Python学习笔记:函数常用用法

函数

函数是为了达到某种目的而采取的行为,函数是可重复使用的,用来实现某个单一功能或者功能片段的代码块,简单来说就是由一系列的程序语句组成的程序段落。

函数存在的意义:

  1. 提高代码的复用性
  2. 将复杂的逻辑简单化,分功能化

函数名字最好能直接表示该函数的功能,多个单词之间用_链接。

<def> <函数名>([参数列表])<:>
    # 待执行语句
    # 如果需要显式返回 <return 标识符> 或 <return>

简单实例

def func():
    print("Hello world!")

print("程序正常执行")

函数只有被调用了才会执行。

# 调用函数 函数名 + ()
func()

# output
func()
Hello world!
# 函数先调用后定义
# 抛出异常 SyntaxError: invalid syntax
# func()

程序运行的时候先把函数内的代码加载到内存中,有调用的地方直接执行,先调用的时候程序还没有读取函数到内存中,所以抛出异常。

print(func)
<function func at 0x000000000AA4C510>
# 直接打印函数对应的内存地址

函数的返回值

函数可以返回任何类型的数据,函数内执行到return后结束,后面代码不再执行。

# 定义函数
def func():
    res = 1 + 1
    print('我执行了!')
    return res
    print('我不会执行!')
    
print('程序正常执行')
func()

# output
程序正常执行
我执行了!
Out[5]: 2

想要拿到函数return的值需要重新找个变量接收。

res = func()
我执行了!

print(res)
2

不写return默认返回None。

def func():
    res = 1 + 1
    print('我执行了!')

res = func()
print(res)

# output
我执行了!
None

多个返回值,需要多个变量接收。

def func():
    return 1,2,3

a,b,c = func()
print(a,b,c)

# output
1 2 3

一个变量也可以接收一个元组。

def func():
    return 1,2,3

res = func()
print(res)

# output
(1, 2, 3)

函数的参数

计算两个数字之和。

def sum_of_two():
    res = 3 + 4
    return res

print(sum_of_two())

# output
7

默认按位置传递参数,一一对应。

def sum_of_two(num1, num2):
    res = num1 + num2
    return res

print(sum_of_two(5, 6))

# output
11

关键字传参,参数名对应。

def sum_of_two(num1, num2):
    print(num1, num2)
    res = num1 + num2
    return res

print(sum_of_two(num2 = 5, num1 = 6))

# output
6 5
11

混合使用,先位置参数再关键字参数。

def sum_of_two(num1, num2, num3):
    print(num1, num2, num3)
    res = num1 + num2 + num3
    return res

print(sum_of_two(3, num3 = 1, num2 = 2))

# output
3 2 1
6

默认值,不传递参数就用默认值,传递了就用传递的值。

def sum_of_two(num1 = 1, num2 = 2):
    print(num1, num2)
    res = num1 + num2
    return res

print(sum_of_two())
print(sum_of_two(5, 10))

# output
1 2
3
5 10
15

混合使用时,先按位置传递参数,后按关键字传递参数,最后是默认值。

###### 错误写法 ######
def sum_of_two(num1 = 1, num2, num3): # 默认值只能放最后
    print(num1, num2, num3)
    res = num1 + num2 + num3
    return res

# output
SyntaxError: non-default argument follows default argument
# 编译语法错误

###### 错误写法 ######
def sum_of_two(num1, num2, num3 = 3):
    print(num1, num2, num3)
    res = num1 + num2 + num3
    return res

print(sum_of_two(num2 = 2, 3)) # 先位置,后关键字
# output
SyntaxError: positional argument follows keyword argument

print(sum_of_two(1, num1 = 2)) # 不允许给同一个参数传递2个值
# output
TypeError: sum_of_two() got multiple values for argument 'num1'

可变参数(多个不确定的参数)

  • *列表
  • **字典

通常都是: *args、**kwargs

# 传递列表
def sum_of_two(*args):
    res = 0
    for i in args:
        res += i
    return res

# 任意个 0个也可以
print(sum_of_two())
# output
0

print(sum_of_two(1,2,3,4,5))
# output 
15

# 已有列表
list_001 = [1,2,3,4,5]
print(sum_of_two(*list_001))
# output
15
# 列表会自动解释为多个参数

# 传递字典
def func(**kwargs):
    return kwargs

print(func()) # {}
print(func(name = 'Hider', age = 30)) # {'name': 'Hider', 'age': 30}
print(func(**{'name': 'Hider', 'age': 30})) # {'name': 'Hider', 'age': 30}

总体结合来看。

def func(x,y,z,*args,**kwargs):
    print(x)
    print(y)
    print(z)
    print(args)
    print(kwargs)
    
func(1,2,3,4,5,6,a=11,b=22)

# output
1
2
3
(4, 5, 6)
{'a': 11, 'b': 22}

  • 可变类型参数的传递,列表中第1个值被函数修改。

可以实现实参传递给形参,形参发生改变,实参跟着发生改变。

def func(li):
    li[0] = 666

li = [1,2,3,4,5]
func(li)
print(li)

# output
[666, 2, 3, 4, 5]

  • 不可改变类型的传递
def func(str1):
    str1 = 'aaa'
    print('函数内:', str1)

str1 = 'hello'
func(str1)
print(str1)

# output
函数内: aaa
hello

  • 全局变量和局部变量

局部可以使用全局变量,局部变量是在函数内部声明并使用的数据变量,随函数的启动而出生,随函数的退出而消亡,作用域只在函数内。

# 局部可以使用全局变量
temp = 'hello'
def func():
    print(temp)

func() # hello

# 全局不能使用局部变量
def func():
    temp = 'hello'
    print(temp)

func() # hello

print(temp) # NameError: name 'temp' is not defined

# 结合应用
temp = '你好'
def func():
    temp = 'hello'
    print(temp)

print(temp)
# output
你好


temp = '你好'
def func():
    temp = 'hello'
    print(temp)
    
func()
print(temp)

# output
hello
你好

num = 1
def set_num(in_num):
    num = in_num
    print(num)
    pass

set_num(11)
print(num)

# output
11
1

声明使用全局变量(global)

num = 1
def set_num(in_num):
    global num
    num = in_num
    pass

set_num = 11
print(num)

# output
1

全局变量,局部变量重名,仍需要用全局变量。

num = 11
def func():
    num = 22
    print(num)
    print(globals()['num'])

# output
func()
22
11

参考链接:Python中的基本函数及其常用用法简析

原文地址:https://www.cnblogs.com/hider/p/12940608.html