Arguments in a function must be given in the right order so Python knows which value goes to which parameter.
Argument order rules in Python
Start learning this pattern below
Jump into concepts and practice - no test required
def function_name(positional1, positional2, /, positional_or_keyword1, positional_or_keyword2, *, keyword_only1, keyword_only2): pass
Positional-only arguments come first and must be given by position.
Keyword-only arguments come after * and must be given by name.
name is positional-only, greeting can be positional or keyword, punctuation is keyword-only.def greet(name, /, greeting='Hello', *, punctuation='!'): print(f"{greeting}, {name}{punctuation}")
greet('Alice') greet('Bob', 'Hi') greet('Carol', greeting='Hey', punctuation='.')
This program shows how to use positional-only, positional-or-keyword, and keyword-only arguments in a function.
def describe_pet(name, /, species='dog', *, age=None): description = f"Pet name: {name}, species: {species}" if age is not None: description += f", age: {age} years" print(description) describe_pet('Buddy') describe_pet('Mittens', 'cat') describe_pet('Goldie', age=2)
Positional-only arguments are marked with a slash / in the function definition.
Keyword-only arguments come after an asterisk * and must be named when calling the function.
Using argument order rules helps avoid confusion and bugs in your code.
Arguments have a specific order: positional-only, positional-or-keyword, then keyword-only.
Positional-only arguments must be given by position, keyword-only must be named.
Following these rules makes your functions easier to use and understand.
Practice
Which of the following correctly describes the order of arguments in a Python function definition?
Solution
Step 1: Recall argument order rules
Python functions must define arguments in the order: positional-only, positional-or-keyword, then keyword-only.Step 2: Match the correct order
Positional-only, positional-or-keyword, keyword-only matches this exact order, others do not.Final Answer:
Positional-only, positional-or-keyword, keyword-only -> Option AQuick Check:
Argument order = Positional-only, positional-or-keyword, keyword-only [OK]
- Confusing keyword-only and positional-only order
- Thinking positional-or-keyword comes first
- Ignoring positional-only arguments
Which of the following function definitions is syntactically correct in Python?
def example(a, /, b, *, c):
passSolution
Step 1: Understand syntax for positional-only and keyword-only
The slash (/) marks positional-only arguments before it, and the asterisk (*) marks keyword-only arguments after it.Step 2: Check each option's order
def example(a, /, b, *, c): pass correctly placesabefore / (positional-only),bas positional-or-keyword, andcafter * (keyword-only). Others have invalid order or misplaced / and *.Final Answer:
def example(a, /, b, *, c): pass -> Option AQuick Check:
Syntax with / and * correct = def example(a, /, b, *, c): pass [OK]
- Placing / after positional-or-keyword arguments
- Putting * before /
- Using / as a standalone argument
What is the output of this code?
def func(a, /, b, *, c):
print(a, b, c)
func(1, 2, c=3)Solution
Step 1: Understand argument passing
ais positional-only, so must be passed by position (1).bis positional-or-keyword, passed by position (2).cis keyword-only, passed asc=3.Step 2: Check function call validity and output
All arguments are passed correctly. The print outputs the values: 1 2 3.Final Answer:
1 2 3 -> Option BQuick Check:
func(1, 2, c=3) prints 1 2 3 [OK]
- Passing positional-only argument by keyword
- Passing keyword-only argument positionally
- Confusing argument order in call
Identify the error in this function call:
def f(x, /, y, *, z):
return x + y + z
f(x=1, y=2, z=3)Solution
Step 1: Check argument types in definition
xis positional-only (before /),yis positional-or-keyword,zis keyword-only (after *).Step 2: Analyze function call
Callingf(x=1, y=2, z=3)tries to passxby keyword, which is not allowed for positional-only arguments, causing a TypeError.Final Answer:
TypeError: x is positional-only and cannot be passed as keyword -> Option DQuick Check:
Positional-only args cannot be keyword = TypeError [OK]
- Passing positional-only argument by keyword
- Thinking all arguments can be named
- Ignoring the / marker meaning
You want to define a function that takes exactly two positional-only arguments, one positional-or-keyword argument, and two keyword-only arguments. Which of these definitions is correct?
1. def func(a, b, /, c, *, d, e): pass 2. def func(a, /, b, c, *, d, e): pass 3. def func(a, b, c, /, *, d, e): pass 4. def func(a, b, /, *, c, d, e): pass
Solution
Step 1: Identify argument categories
Two positional-only args: before / (a, b). One positional-or-keyword: after / and before * (c). Two keyword-only: after * (d, e).Step 2: Check each definition
Definition 1 matches this order exactly:a, bbefore /,cafter /,d, eafter *. Others have wrong placement of / or * or argument counts.Final Answer:
Definition 1 -> Option CQuick Check:
Two positional-only, one normal, two keyword-only = Definition 1 [OK]
- Placing too many args before or after / or *
- Miscounting positional-only arguments
- Confusing keyword-only with positional-or-keyword
