Python __init__ * argument [duplicate]

你。 提交于 2019-12-11 11:55:45

问题


So I'm pretty new to Python and there is this library I want to work with. However there is an argument in the constructor of the class which I can't find anything about.

init method looks like this:

def __init__(self, ain1, ain2, bin1, bin2, *, microsteps=16):

What does the * do? As far as I know the self is just the object itself and the others are just arguments. But what's the * ?

Link to the full class: check line 73

Thanks in advance


回答1:


In Python 3, adding * to a function's signature forces calling code to pass every argument defined after the asterisk as a keyword argument:

>> def foo(a, *, b):
..     print('a', a, 'b', b)

>> foo(1, 2)
TypeError: foo() takes 1 positional argument but 2 were given

>> foo(1, b=2)
a 1 b 2

In Python 2 this syntax is invalid.




回答2:


The * indicates something called keyword arguments. Basically, this means you must specify the names of the parameters after the *. For example, if you had this method:

def somemethod(arg1, *, arg2):
    pass

you can call it this way:

somemethod(0, arg2=0)

but not this way:

somemethod(0, 0)

Using the * forces the user to specify what arguments are getting what values.



来源:https://stackoverflow.com/questions/53795545/python-init-argument

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!