python函数调用时参数位置可不可以调整_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...

默认参数:定义函数的时候给定变量一个默认值。  def num(age=1):

位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用。

关键字参数:如果定义的函数中含有关键字参数,调用函数时必须要传如该关键字对应的实参。

不定长参数:在定义函数的时候不确定传入的参数的数量(可能是0个或多个)  def num(*args,**args): (不定长参数的标志符号是*和**,args和kwargs只是变量的名字,可以改为任意的变量如(*num,**kwnum))

*+变量名1,可以接受被其他参数接受后剩下的任意的形参(不包括赋值语句),放进一个元组里,这个元组的名字是前面的变量名1(所以位置参数必须在此参数之前)

**+变量名2,可以接受被其他参数接受后剩下的任意赋值语句,放进一个字典中,这个字典的名字是前面的变量名2(所以关键字参数和默认参数必须在此参数之前,*+变量名也要在此参数之前)

测试上面的总结是否正确

def num_0(a,b,c,*args,city='beijing',name,**kwnum):

print(a,b,c,name,city,args,kwnum) # 输出的时候直接用*或者** 的变量名

num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian')

#结果

D:\pycharm_project\装饰器\venv\Scripts\python.exe D:/pycharm_project/装饰器/venv/text.py

1 2 3 jack hangzhou (4, 5, 6, 7) {'age': 18, 'country': 'haidian'}

Process finished with exit code 0

最后总结

调用函数传递实参的时候,先传变量/定量,再传赋值语句(num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian'))

定义函数的时候直接按此顺序定义形参(def num_0(a,b,c,*args,city='beijing',name,**kwnum):)(位置参数,*变量名,默认参数,关键字参数,**变量名)

接下来讨论一下不定长参数中的 * 和 ** 还有什么用处

1,当在函数的形参中使用时(和上面的例子相同)

*t:将所有的其他位置的实参(变量/定量)获取,并将它们打包到元祖中,并赋值给此形参

def foo(*t):print(t)

foo(1,2,3)

(1,2,3)

**t:将所有的其他位置的实参(赋值语句)获取,并将它们打包到字典中,并赋值给此参数

def foo(**t):print(t)

foo(a=1,b=2)

{'x': 1, 'y': 2}

2,当在调用函数的时候使用(实参中)

*tuple_a:将此元祖的元素,当做函数调用的位置参数

deffoo(a,b):print(a,b)

tuple_a= (1,2)

foo(*tuple_a)

1,2

**dict_a:将字典中的键值对,当做函数调用的关键字参数

deffoo(x, y):print(x, y)

dict_a= {'x':1, 'y':2}

foo(**dict_a)

1,2

3,在匹配和for循环中

*x意味着‘匹配多余的元素’,x是一个列表

>>>x, *xs = (1, 2, 3, 4)

>>>xs

[2, 3, 4]

>>>x,*xs = [1, 2, 3, 4]

>>>xs

[2, 3, 4]

>>> *xs, x =(1, 2, 3, 4)

>>>xs

[1, 2, 3]

>>>x

4>>>x, *xs, y =(1, 2, 3, 4)

>>>x

1>>>xs

[2, 3]

>>>y

4

for (x, *y, z) in [ (1, 2, 3, 4) ]: print(x, y, z)1 [2, 3] 4

4,可以用于合并字典

dict_a = {'a':1,'b':2}

dict_b= {'b':3,'c':4}

dict_c= {**dict_a,**dict_b}print(dict_c)

{'a': 1, 'b': 3, 'c': 4}

*t表示“获取此函数的所有其他位置参数,并将它们作为元组打包到此参数中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值