Files
Learn-Python-Programming-Th…/ch04/parameters.positional.only.py
T
adii1823 ee641c189f ch04
2021-10-28 17:37:54 +05:30

59 lines
1.3 KiB
Python

# parameters.positional.only.py
def func(a, b, /, c):
print(a, b, c)
func(1, 2, 3) # prints: 1 2 3
func(1, 2, c=3) # prints 1 2 3
# func(1, b=2, c=3) # produces the following traceback:
"""
Traceback (most recent call last):
File "arguments.positional.only.py", line 7, in <module>
func(1, b=2, c=3)
TypeError: func() got some positional-only arguments
passed as keyword arguments: 'b'
"""
"""
def func_name(positional_only_parameters, /,
positional_or_keyword_parameters, *,
keyword_only_parameters):
Valid:
def func_name(p1, p2, /, p_or_kw, *, kw):
def func_name(p1, p2=None, /, p_or_kw=None, *, kw):
def func_name(p1, p2=None, /, *, kw):
def func_name(p1, p2=None, /):
def func_name(p1, p2, /, p_or_kw):
def func_name(p1, p2, /):
Invalid:
def func_name(p1, p2=None, /, p_or_kw, *, kw):
def func_name(p1=None, p2, /, p_or_kw=None, *, kw):
def func_name(p1=None, p2, /):
Why it is useful:
def divmod(a, b, /):
"Emulate the built in divmod() function"
return (a // b, a % b)
len(obj='hello') # The "obj" keyword argument impairs readability
"""
def func_name(name, /, **kwargs):
print(name)
print(kwargs)
func_name('Positional-only name', name='Name in **kwargs')
"""
Prints:
Positional-only name
{'name': 'Name in **kwargs'}
"""