关于keyword-only参数的一点疑问?

def total(initial=5, *numbers, vegetables):
    count = initial
    for number in numbers:
        count += number 
    count += vegetables    #这一行为什么不需要for语句呢?
    return count
print total(10, 1, 2, 3, vegetables=50)

运行结果是语法错误,keyword-only是需要在带*参数后面的没错吧,检查好久都看不出来哪出问题了呢?(还有,第5行为什么是可以不需要for语句的呢?初学小白,求教,谢谢!)

阅读 3.9k
3 个回答

参数顺序有问题
total(vegetables, initial=5, *numbers)

  1. positional参数只能放在其他类型参数的前面
  2. 带默认值的参数后面只能跟*arg或/和**keyword
  3. *arg后面只能跟**keyword
  4. **keyword只能放最后

py3.4表示并没有错误...
vegetables就是keyword-only参数,10是initial,(1,2,3)是可变参数;
至于count+=vegetables只进行一次运算,并不是number元组里面的循环;

py2.7可能不支持,我用py2exe打包一个程序,里面用到gevent模块中的_socket3.py的196行(可能是这行,我有点记不清了。)语法错误。我打开这个文件定位到相应的行,发现这一行的函数中就便使用了keyword-only参数。
另外补充一下,keyword-only参数的使用格式是类似于以下示例中的样子,你的使用方法有可能是错误的。

def myfun(a,*,b):
    return a+b

使用时*号后面的参数必须显式的调用。如下:

a=1
b=2
myfun(1,b=2)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进