python - 这是 python 2 函数中的错误吗?

标签 python args

所以我创建了一个转置函数,它可以选择添加列标题,我相信我在 python 和使用 *args 时遇到了一个错误:

>>> def transpose(*args,header=None):
  File "<stdin>", line 1
    def transpose(*args,header=None):
                        ^
SyntaxError: invalid syntax

是的,因为 *args 是任意数量的值,你不能在它后面放任何东西,但是你应该可以放 variable=value因为那个变量有一个自动分配使其与 *args 分开,因为你会用 header=['col1','col2','col3'] 等调用它。

以下不会报错:

def transpose(header=None,*args):
    #code goes here

唯一的问题是,这使得函数的第一个输入被分配给 header ,而无需执行 header=value,使 header 成为必需的输入,这不是我想要的,而且我敢肯定,许多使用任意数量的值创建函数的人也不是想要的。

有了这个错误,似乎不可能有一个使用 *args 的函数,并且输入不是必需的。这是 python 中的错误吗?

注意:我使用的是python2.7,所以如果它是一个bug,那么它很可能只是那个版本的一个bug

最佳答案

简短的 python 2.x 回答是“不要那样做”。 :-)(正如@Bakurui 指出的那样,它内置于 Python 3.x。)

如果你真的想这样做,方法如下(只是 args 部分):

def transpose(*args, **kwargs):
    header = kwargs.pop('header', None)
    if kwargs:
        raise TypeError('unexpected keyword args to transpose()')
    print 'transpose: args:', args
    print 'transpose: header:', header

关于python - 这是 python 2 函数中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001917/

相关文章:

python - Multiprocessing.pool 具有多个 args 和 kwargs 的函数

PHP 相当于 Python 的 func(*[args])

python - Django/AngularJS : CSFR Token Error

java - 我有一个 main 方法,但仍然出现错误

linux - vim:通过 ftp 替换文件

java - 在java中使用scanner类来平均数字

python - 使用 arg 列表调用可调用的 python

python - python pandas DataFrames中,设置值时自动类型转换的规则是什么?

python - 将范围 slider 小部件移植到 PyQt5

python - keras模型预测不拟合,这是什么意思?