自学Python--函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41402059/article/details/82229203

多个返回值:

def fun1():
    return 1, 2, 3 # python解释器自动转换成元组类型,相当于rerun (1, 2, 3)

a = fun1() # a = (1, 2, 3) 元组
b, c, d = fun1() # b = 1, c = 2, d = 3

s1, s2 ,s3 = (1, 2, 3) # s1 = 1, s2 = 2, s3 = 3 自动解析

传参:

必须先位置传参,然后再关键字传参

函数定义形参顺序:位置参数, 动态参数*args, 默认参数'=', 动态关键字参数**kwargs

动态参数:

*args:可变参数,接收n个位置传参,args类型为元组

**kwargs:关键字参数,接收n个关键字传参,kwargs类型为元组

*args必须在**kwargs之前

def f(a, *args, default=1, **kwargs):
    print(a, args, default, kwargs)

f(1, 2, 3, 4, 5, 6, default=0, b=7, c=8, d=9) 
# args类型为元组,kwargs类型为字典
# 1 (2, 3, 4, 5, 6) 0 {'b': 7, 'c': 8, 'd': 9}

直接传列表等作为*args和直接传字典作为**kwargs:

def f1(*args):
    print(args)

l = [1, 2, 3]
f1(*l) 
# 相当于
"""
for i in l:
    f(i)
"""

def f2(**kwargs):
    print(kwargs)

d = {'a':1, 'b':2} # 字典key必须是str
f2(**d)
# 相当于
"""
for k, v in d.items():
    f2(k=v)
"""

函数参数的坑:

需求:定义一个函数,使得列表结尾增加‘end’然后返回列表

# 错误定义

def add_end(L=[]):
    L.append('end')
    return L

add_end([1, 2]) # 正常 [1, 2, 'end']

add_end() # 正常 ['end']

#再次调用默认参数
add_end() # 错误 ['end', 'end']

原因:函数在定义的时候,默认参数L就被计算出来了,因此L也是一个变量,

所以,函数的默认参数必须是不可变类型

def add_end(L=None):
    if L is None:
        L = []
    L.append('end')
    print(L)

add_end([1, 2]) # 正常 [1, 2, 'end']

add_end() # 正常 ['end']

#再次调用默认参数
add_end() # 正常 ['end']

猜你喜欢

转载自blog.csdn.net/weixin_41402059/article/details/82229203