4

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

rienvillage
  • 49
  • 1
  • 2

2 Answers2

10

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.

andreihondrari
  • 5,743
  • 5
  • 30
  • 59
DeepSpace
  • 78,697
  • 11
  • 109
  • 154
3

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.

Pika Supports Ukraine
  • 3,612
  • 10
  • 26
  • 42