Python 位置参数跟随关键字参数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42163846/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
positional argument follows keyword argument
提问by Ardour Technologies
I am a calling a function like this in python .
我正在 python 中调用这样的函数。
order_id = kite.order_place(self, exchange, tradingsymbol,
transaction_type, quantity, price, product, order_type, validity,
disclosed_quantity=None, trigger_price=None, squareoff_value,
stoploss_value, trailing_stoploss, variety, tag='')
Here is the code from the documentation of the function ..
这是函数文档中的代码..
def order_place(self, exchange, tradingsymbol, transaction_type,
quantity, price=None, product=None, order_type=None, validity=None,
disclosed_quantity=None, trigger_price=None, squareoff_value=None,
stoploss_value=None, trailing_stoploss=None, variety='regular', tag='')
It is giving an error like this..
它给出了这样的错误..
How to resolve this error ? Thanks !
如何解决此错误?谢谢 !
回答by aghast
The grammar of the languagespecifies that positional arguments appear before keyword or starred arguments in calls:
该语言的语法指定位置参数出现在调用中的关键字或带星号的参数之前:
argument_list ::= positional_arguments ["," starred_and_keywords]
["," keywords_arguments]
| starred_and_keywords ["," keywords_arguments]
| keywords_arguments
Specifically, a keyword argument looks like this: tag='insider trading!'
while a positional argument looks like this: ..., exchange, ...
. The problem lies in that you appear to have copy/pasted the parameter list, and left some of the default values in place, which makes them look like keyword arguments rather than positional ones. This is fine, except that you then go back to using positional arguments, which is a syntax error.
具体来说,关键字参数看起来像这样:tag='insider trading!'
而位置参数看起来像这样:..., exchange, ...
。问题在于您似乎复制/粘贴了参数列表,并保留了一些默认值,这使它们看起来像关键字参数而不是位置参数。这很好,除了您然后返回使用位置参数,这是一个语法错误。
Also, when an argument has a default value, such as price=None
, that means you don't have to provide it. If you don't provide it, it will use the default value instead.
此外,当参数具有默认值时,例如price=None
,这意味着您不必提供它。如果您不提供它,它将改用默认值。
To resolve this error, convert your later positional arguments into keyword arguments, or, if they have default values and you don't need to use them, simply don't specify them at all:
要解决此错误,请将后面的位置参数转换为关键字参数,或者,如果它们具有默认值并且您不需要使用它们,则根本不指定它们:
order_id = kite.order_place(self, exchange, tradingsymbol,
transaction_type, quantity)
# Fully positional:
order_id = kite.order_place(self, exchange, tradingsymbol, transaction_type, quantity, price, product, order_type, validity, disclosed_quantity, trigger_price, squareoff_value, stoploss_value, trailing_stoploss, variety, tag)
# Some positional, some keyword (all keywords at end):
order_id = kite.order_place(self, exchange, tradingsymbol,
transaction_type, quantity, tag='insider trading!')