Python 的函数在声明参数时大概有下面 4 种形式:
def func(a): passdef func(a, b = 1): passdef func(a, b = 1, *c): passdef func(a, b = 1, *c, **d): pass在调用函数时,有两种情况:
func(\"G\", 20)func(a = \"G\", b = 20)(其中带有关键词调用可以不考虑顺序:func(b = 20, a = \"G\")当然,这两种情况是可以混用的:func(\"G\", b = 20),但最重要的一条规则是位置参数不能在关键词参数之后出现:
| 123 | def func(a, b = 1): passfunc(a = \”G\”, 20) # SyntaxError 语法错误 |
| 1234 | File \”\”, line 3 func(a = \”G\”, 20) # SyntaxError 语法错误 ^SyntaxError: positional argument follows keyword argument |
另外一条规则是:位置参数优先权:
| 123 | def func(a, b = 1): passfunc(20, a = \”G\”) # TypeError 对参数 a 重复赋值 |
| 12345678910 | —————————————————————————————————————– TypeError Traceback (most recent call last) in () 1 def func(a, b = 1): 2 pass——> 3 func(20, a = \”G\”) # TypeError 对参数 a 重复赋值 TypeError: func() got multiple values for argument \’a\’ |
最保险的方法就是全部采用关键词参数。
任意参数可以接受任意数量的参数,其中*a的形式代表任意数量的位置参数,**d代表任意数量的关键词参数:
| 1234 | def concat(*lst, sep = \”/\”): return sep.join((str(i) for i in lst)) print(concat(\”G\”, 20, \”@\”, \”Hz\”, sep = \”\”)) |
| 1 | G20<a href=\”http://www.jobbole.com/members/wuhan7265\”>@Hz</a> |
上面的这个def concat(*lst, sep = \"/\")的语法是PEP 3102提出的,在 Python 3.0 之后实现。这里的关键词函数必须明确指明,不能通过位置推断:
| 1 | print(concat(\”G\”, 20, \”-\”)) # Not G-20 |
上一篇:用python实现模拟登录人人网
下一篇:Python 字符串