Bird
Raised Fist0
Pythonprogramming~5 mins

Argument order rules in Python

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

Arguments in a function must be given in the right order so Python knows which value goes to which parameter.

When you write a function that takes multiple inputs.
When you call a function and want to give values to its parameters.
When you want to avoid mistakes by mixing up inputs.
When you use both positional and keyword arguments in a function call.
When you want to use default values but still provide some arguments.
Syntax
Python
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.

Examples
name is positional-only, greeting can be positional or keyword, punctuation is keyword-only.
Python
def greet(name, /, greeting='Hello', *, punctuation='!'):
    print(f"{greeting}, {name}{punctuation}")
Shows different ways to call the function following argument order rules.
Python
greet('Alice')
greet('Bob', 'Hi')
greet('Carol', greeting='Hey', punctuation='.')
Sample Program

This program shows how to use positional-only, positional-or-keyword, and keyword-only arguments in a function.

Python
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)
OutputSuccess
Important Notes

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.

Summary

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

(1/5)
1.

Which of the following correctly describes the order of arguments in a Python function definition?

easy
A. Positional-only, positional-or-keyword, keyword-only
B. Keyword-only, positional-only, positional-or-keyword
C. Positional-or-keyword, keyword-only, positional-only
D. Positional-or-keyword, positional-only, keyword-only

Solution

  1. Step 1: Recall argument order rules

    Python functions must define arguments in the order: positional-only, positional-or-keyword, then keyword-only.
  2. Step 2: Match the correct order

    Positional-only, positional-or-keyword, keyword-only matches this exact order, others do not.
  3. Final Answer:

    Positional-only, positional-or-keyword, keyword-only -> Option A
  4. Quick Check:

    Argument order = Positional-only, positional-or-keyword, keyword-only [OK]
Hint: Remember: positional-only first, then normal, then keyword-only [OK]
Common Mistakes:
  • Confusing keyword-only and positional-only order
  • Thinking positional-or-keyword comes first
  • Ignoring positional-only arguments
2.

Which of the following function definitions is syntactically correct in Python?

def example(a, /, b, *, c):
    pass
easy
A. def example(a, /, b, *, c): pass
B. def example(a, b, *, /, c): pass
C. def example(a, *, b, /, c): pass
D. def example(/, a, b, *, c): pass

Solution

  1. 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.
  2. Step 2: Check each option's order

    def example(a, /, b, *, c): pass correctly places a before / (positional-only), b as positional-or-keyword, and c after * (keyword-only). Others have invalid order or misplaced / and *.
  3. Final Answer:

    def example(a, /, b, *, c): pass -> Option A
  4. Quick Check:

    Syntax with / and * correct = def example(a, /, b, *, c): pass [OK]
Hint: Slash (/) before positional-only, star (*) before keyword-only [OK]
Common Mistakes:
  • Placing / after positional-or-keyword arguments
  • Putting * before /
  • Using / as a standalone argument
3.

What is the output of this code?

def func(a, /, b, *, c):
    print(a, b, c)

func(1, 2, c=3)
medium
A. TypeError: missing required keyword-only argument 'c'
B. 1 2 3
C. TypeError: positional argument after keyword argument
D. SyntaxError

Solution

  1. Step 1: Understand argument passing

    a is positional-only, so must be passed by position (1). b is positional-or-keyword, passed by position (2). c is keyword-only, passed as c=3.
  2. Step 2: Check function call validity and output

    All arguments are passed correctly. The print outputs the values: 1 2 3.
  3. Final Answer:

    1 2 3 -> Option B
  4. Quick Check:

    func(1, 2, c=3) prints 1 2 3 [OK]
Hint: Positional-only args by position, keyword-only by name [OK]
Common Mistakes:
  • Passing positional-only argument by keyword
  • Passing keyword-only argument positionally
  • Confusing argument order in call
4.

Identify the error in this function call:

def f(x, /, y, *, z):
    return x + y + z

f(x=1, y=2, z=3)
medium
A. No error, returns 6
B. TypeError: missing required positional argument y
C. SyntaxError: invalid function call
D. TypeError: x is positional-only and cannot be passed as keyword

Solution

  1. Step 1: Check argument types in definition

    x is positional-only (before /), y is positional-or-keyword, z is keyword-only (after *).
  2. Step 2: Analyze function call

    Calling f(x=1, y=2, z=3) tries to pass x by keyword, which is not allowed for positional-only arguments, causing a TypeError.
  3. Final Answer:

    TypeError: x is positional-only and cannot be passed as keyword -> Option D
  4. Quick Check:

    Positional-only args cannot be keyword = TypeError [OK]
Hint: Positional-only args can't be named in calls [OK]
Common Mistakes:
  • Passing positional-only argument by keyword
  • Thinking all arguments can be named
  • Ignoring the / marker meaning
5.

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
hard
A. Definition 3
B. Definition 2
C. Definition 1
D. Definition 4

Solution

  1. 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).
  2. Step 2: Check each definition

    Definition 1 matches this order exactly: a, b before /, c after /, d, e after *. Others have wrong placement of / or * or argument counts.
  3. Final Answer:

    Definition 1 -> Option C
  4. Quick Check:

    Two positional-only, one normal, two keyword-only = Definition 1 [OK]
Hint: Two positional-only before /, one normal after, two keyword-only after * [OK]
Common Mistakes:
  • Placing too many args before or after / or *
  • Miscounting positional-only arguments
  • Confusing keyword-only with positional-or-keyword