Python--函数参数

函数参数

python3中函数也可以用中文

def func(a,b):   #站在函数定义角度上:位置参数,是必须传的参数
    print(a,b)

站在调用函数的角度上

 func(1,2)    #按照位置传参
 func(b = 1,a = 2)      #按照关键字传参
 func(1,b = 2)         #混用:必须先按照位置传参
 
def welcome(name,sex='male'):        #sex 默认参数
    print('welcome,%s,sex:%s%(name,sex))

welcome('fff')
welcome('female')        
#默认参数可以不传,不传用默认,如果不传的话就用传入的值
def age(age,my_age=18)
    if age>my_age:
    return False
 else:
    return True

-----------------------------------------------------   

默认参数陷阱

针对可变数据类型,不可变不受影响

def c(a=[]):
    a.append(1)
    print(a)
c()
c()
c()
结果:
[1]
[1, 1]
[1, 1, 1]

---------------------------------------------------

def c(a=[]):
    a.append(1)
    print(a)
c([])
c([])
c([])
结果:
[1]
[1]
[1]

--------------------------------------------------

动态参数

arg形参  para实参
*是动态参数的标识  后面变量名

def func(*a):
    h = 0
    for item in a:
        h += item
    print(h)
func(33,44,55,88,77,78)

动态参数可以接受多个传过来的实参

li = [1,2,3,4,5,6,7]
func(*li)   #把列表打散了传参
#*在形参前,*是聚合,将每个参数组合成一个元组
#*在实参前,*是打散,将一个列表或者元组打散成多个参数
#一个*只针对按位置传参,不能关键字传参
func fa(**li):
   print(li)
fa(a=1,b=1,c=1)
结果
{'a': 1, 'b': 1, 'c': 1}
#**两个*是针对关键字传参,传出值是字典,变量变成key
#**在关键字形参前是聚合  组成字典
#**在实参前,是打散

def fa(*a,**f):
    print(a)
    print(f)
fa(3,8,3,5,6,5,8,g=4,c=7,o=9)

混用必须位置传参在前
实参传形参也是这样一个*的放在前面两个*放在后面


站在函数定义角度上:所有参数都是形参
位置参数
默认参数
动态参数:*args,**kwargs
站在函数调用的角度上:所有的参数都是实际参数
按照位置传参
按照关键字传参
混用先位置再关键字
先定义动态参数里面的*args再放默认参数再放**kwargs

def func(位置参数,*args,默认参数=10,**kwargs):
    print(位置参数)
 print(*args)
 print(默认参数)
 print(**kwargs)

这样可以显示出默认参数,如果默认参数放在了*args前,就永远都用不到设定的默认参数值
放在关键词传参前面,就而已用,但是必须要在写入时用字符串写出默认参数的变量名,然后赋值
例如:

def funk(a,b,*args,c=10,**kwargs):
    print(a,b)
    print(args)
    print(c)
    print(kwargs)
funk(3,5,4,8,6,2,1,z=10,y=8,o=9)


这样的话就可以将c=10利用,加载1和z=10中间的位置。

原文地址:https://www.cnblogs.com/gaoshengyue/p/7448536.html