python的各种函数_各种python 函数參数定义和解析

本文详细介绍了Python函数参数的使用,包括默认参数、不定长参数、字典参数以及修饰器的调用方式。通过示例展示了如何在函数定义和调用中处理不同类型的参数,强调了参数赋值的优先级,并提醒注意语法细节。同时,讨论了*和**在参数传递中的作用,以及在处理多于规定参数数量时的行为。
摘要由CSDN通过智能技术生成

这样的方式就能够在调用的时候不填写默认參数了。可是要注意含有默认值的函数在定义的时候就已经把他的默认參数初始化了,这个在曾经的文章也谈过。

3.不确定參数个数的函数定义:>>> def Fun(*a):

if 0 == len(a):

print 'None'

else:

print a

>>> Fun(1,2,3)

(1, 2, 3) # tuple 类型

>>> Fun(a=1,b=2,c=33) # 不能在依照字典的方式赋值

Traceback (most recent call last):

File "", line 1, in

Fun(a=1,b=2,c=33)

TypeError: Fun() got an unexpected keyword argument 'a'

>>> Fun() # 能够是0參数

None这样的带*号的说明參数的个数是不确定的。在调用的时候想传多少个 參数都行[0,n]。呵呵,爽吧。可是他传入的參数都会放在一个

tuple中,假设有返回值的接受的时候也是用tuple行了,对于函数内部不确定的数量赋值时直接就循环迭代赋值就Ok了。

4.不确定个数的字典參数定义:

在定义的形參处加两个*,就是在函数内部处理函数的时候都是用字典的形式保存,当然调用的时候要用key=value的形式

>>> def Fun(**a):

if 0 == len(a):

print 'None'

else:

print a

>>> Fun(1,2,3,4) # 字典赋值。这样就不行了

Traceback (most recent call last):

File "", line 1, in

Fun(1,2,3,4)

TypeError: Fun() takes exactly 0 arguments (4 given)

>>> Fun(a=1,b=2,c=3) # 必须key=value的赋值

{'a': 1, 'c': 3, 'b': 2} # dict 类型

>>> Fun(aa=3,b=333,d=44)

{'aa': 3, 'b': 333, 'd': 44}

最后一个关于函数參数赋值优先级的样例:

>>> def Fun(a,b,c=22,*d,**e):

print a,b,c,d,e

>>> Fun(1)

Traceback (most recent call last):

File "", line 1, in

Fun(1)

TypeError: Fun() takes at least 2 arguments (1 given)

>>> Fun(1,2)

1 2 22 () {}

>>> Fun(1,2,3)

1 2 3 () {}

>>> Fun(1,2,3,4,5) # 默认顺序匹配把多余的參数匹配给tuple

1 2 3 (4, 5) {}

>>> Fun(1,2,3,4,5,aa=33,bb=33) # 把字典赋值匹配给dict

1 2 3 (4, 5) {'aa': 33, 'bb': 33}

>>> Fun(a=3,c=4,b=2b)

SyntaxError: invalid syntax

>>> Fun(a=3,c=4,b=22) # 在字典赋值和枚举匹配赋值的时候优先考虑匹配赋值

3 22 4 () {}

>>> Fun(b=22,a=22,e=(1,2,3))

22 22 22 () {'e': (1, 2, 3)}

>>> Fun(b=22,c=77,2,3,4,5,6,) # 没有给a 赋值,多一个逗号

SyntaxError: non-keyword arg after keyword arg

>>> Fun(b=22,c=77,2,3,4,5,6,k=44)

SyntaxError: non-keyword arg after keyword arg

>>> Fun(b=22,c=77,a=44,2,3,4,5,6,)

>>> Fun(1,2,3,(22,3334,34))   # 直接使用tuple的实參传递1 2 3 ((22, 3334, 34),) {}

能够看出这里函数參数的赋值方式是有所区别的,依照 1 。2,3,4的优先级依次减少。也就是先为枚举形參赋值,再为默认參数赋值,然后多出来的就都组装在在tuple中传过去,给带*的參数,最后把key=value的形式组装成字典的形式传进去,给**的參数

5.修饰器的函数调用方式(不是函数的定义方式,仅仅是一种函数调用约定):

@Fun详细的这样的函数调用方式看曾经的那篇文章吧:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值