在cPython 2.4中:
def f(a,b,c,d):
pass
>>> f(b=1,c=1,d=1)
TypeError: f() takes exactly 4 non-keyword arguments (0 given)
Run Code Online (Sandbox Code Playgroud)
但:
>>> f(a=1,b=1,c=1)
TypeError: f() takes exactly 4 non-keyword arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
显然,我并不是真的了解Python的函数 - 参数处理机制.有人愿意分享一下这个吗?我看到发生了什么(比如填充参数插槽,然后放弃),但我认为这会毁掉一个新手.
(另外,如果人们有更好的问题关键词 - 类似"胆量" - 请重拍)
unu*_*tbu 13
当你说
def f(a,b,c,d):
Run Code Online (Sandbox Code Playgroud)
你告诉python f需要4个位置参数.每次调用f它时必须给出4个参数,第一个值将分配给a,第二个值分配给b,等等.
你被允许f用类似的东西打电话
f(1,2,3,4)或者f(a=1,b=2,c=3,d=4),甚至f(c=3,b=2,a=1,d=4)
但在所有情况下,必须提供4个参数.
f(b=1,c=1,d=1)返回错误,因为没有提供任何值a.(0给定)
f(a=1,b=1,c=1)返回错误,因为没有提供任何值d.(3)
给出的args数表示在实现错误之前python已经达到了多远.
顺便说一句,如果你说
def f(a=1,b=2,c=3,d=4):
Run Code Online (Sandbox Code Playgroud)
然后你告诉python f需要4个可选参数.如果未给出某个arg,则会自动为您提供其默认值.然后你就可以逃脱呼唤
f(a=1,b=1,c=1) 要么 f(b=1,c=1,d=1)
| 归档时间: |
|
| 查看次数: |
4702 次 |
| 最近记录: |