9.3. Function Arguments

9.3.1. Arguments vs Parameters

  • argument is the value/variable/reference being passed to the function

  • parameter is the receiving variable used within the function/block

9.3.2. Function Parameters

def add(a, b):
    print(a + b)

add(1, 2)
# 3

add(1.5, 2.5)
# 4.0
def echo(text):
    print(text)

echo('hello')
# hello

9.3.2.1. Required Parameters

def subtract(a, b):
    return a - b

subtract()
# TypeError: subtract() missing 2 required positional arguments: 'a' and 'b'

subtract(10)
# TypeError: subtract() missing 1 required positional argument: 'b'

subtract(10, 20)
# -10

subtract(10, 20, 30)
# TypeError: subtract() takes 2 positional arguments but 3 were given

9.3.2.2. Parameters with Default Value

  • Parameters without default values are required

  • Function will take default value if not overwritten by user

  • Parameters with default values must be at the right side

  • Parameters with default values can be omitted while executing

def subtract(a=1, b=2):
    return a - b


subtract()
# -1

subtract(10)
# 8

subtract(10, 20)
# -10

subtract(10, 20, 30)
# TypeError: subtract() takes from 0 to 2 positional arguments but 3 were given
def subtract(a, b=2):
    return a - b


subtract()
# TypeError: subtract() missing 1 required positional argument: 'a'

subtract(10)
# 8

subtract(10, 20)
# -10

subtract(10, 20, 30)
# TypeError: subtract() takes from 1 to 2 positional arguments but 3 were given
def subtract(a=1, b):
    return a - b

# SyntaxError: non-default argument follows default argument

9.3.3. Function Arguments

9.3.3.1. Positional Arguments

def subtract(a, b):
    return a - b


subtract(2, 1)      # 1
subtract(1, 2)      # -1

9.3.3.2. Keyword arguments

  • Arguments without default values are required

  • Order of keyword arguments has no significance

def subtract(a, b):
    return a - b


subtract(a=2, b=1)  # 1
subtract(b=1, a=2)  # 1

subtract(2, b=1)    # 1
subtract(a=2, 1)    # SyntaxError: positional argument follows keyword argument

subtract(2, a=1)    # TypeError: subtract() got multiple values for argument 'a'
def hello(name='José Jiménez'):
     print(f'My name... {name}')


hello('Mark Watney')          # My name... Mark Watney
hello(name='Mark Watney')     # My name... Mark Watney
hello()                       # My name... José Jiménez

9.3.4. Use Cases

def connect(username, password, host='127.0.0.1',
            port=22, ssl=True, keep_alive=1,
            persistent=False):
    print('Connecting...')


connect('admin', 'admin')
connect('admin', 'admin', 'localhost', 22, False, 1, True)
connect(host='localhost', username='admin', password='admin')
connect(
    host='localhost',
    username='admin',
    password='admin',
    port=443,
    ssl=True,
    persistent=True,
)
def read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer',
             names=None, index_col=None, usecols=None, squeeze=False, prefix=None,
             mangle_dupe_cols=True, dtype=None, engine=None, converters=None,
             true_values=None, false_values=None, skipinitialspace=False,
             skiprows=None, nrows=None, na_values=None, keep_default_na=True,
             na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False,
             infer_datetime_format=False, keep_date_col=False, date_parser=None,
             dayfirst=False, iterator=False, chunksize=None, compression='infer',
             thousands=None, decimal=b'.', lineterminator=None, quotechar='"',
             quoting=0, escapechar=None, comment=None, encoding=None, dialect=None,
             tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True,
             skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True,
             memory_map=False, float_precision=None):
    """
    Definition of pandas.read_csv() function
    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
    """

my_file1 = read_csv('iris.csv')
my_file2 = read_csv('iris.csv', encoding='utf-8')
my_file3 = read_csv('iris.csv', encoding='utf-8', parse_dates=['date_of_birth'])
my_file4 = read_csv('iris.csv', skiprows=3, delimiter=';')
my_file5 = read_csv('iris.csv',
    encoding='utf-8',
    skiprows=3,
    delimiter=';',
    usecols=['Sepal Length', 'Species'],
    parse_dates=['date_of_birth']
)

9.3.5. Assignments

9.3.5.1. Example

  • Complexity level: easy

  • Lines of code to write: 5 lines

  • Estimated time of completion: 5 min

  • Solution: solution/args_example.py

English
  1. Define function which takes sequence of integers as an argument

  2. Sum only even numbers

  3. Print returned value

Polish
  1. Zdefiniuj funkcję biorącą sekwencję liczb całkowitych jako argument

  2. Zsumuj tylko parzyste liczby

  3. Wypisz zwróconą wartość

Solution
def total(sequence):
    return sum(x for x in sequence if x % 2 == 0)


print(total([1, 2, 3, 4]))
# 6

print(total([1, 1, 2]))
# 2

print(total([0, 2, 4, 9]))
# 6

9.3.5.2. Divide

  • Complexity level: easy

  • Lines of code to write: 5 lines

  • Estimated time of completion: 5 min

  • Solution: solution/args_divide.py

English
  1. Define function divide

  2. Function takes two arguments

  3. Function returns result of a division for its arguments

  4. Call function with divide(10, 3)

  5. Call function with divide(10, 0)

  6. Print returned values

  7. What to do in case of error?

Polish
  1. Zdefiniuj funkcję divide

  2. Funkcja przyjmuje dwa argumenty

  3. Funkcja zwraca wynik dzielenia jej argumentów

  4. Wywołaj funkcję z divide(4, 2)

  5. Wywołaj funkcję z divide(4, 0)

  6. Wypisz zwracane wartości

  7. Co zrobić w przypadku błędu?

9.3.5.3. Power

  • Complexity level: easy

  • Lines of code to write: 5 lines

  • Estimated time of completion: 5 min

  • Solution: solution/args_power.py

English
  1. Define function power

  2. Function takes two arguments

  3. Second argument is optional

  4. Function returns power of the first argument to the second

  5. If only one argument was passed, consider second equal to the first one

  6. Print returned values

Polish
  1. Zdefiniuj funkcję power

  2. Funkcja przyjmuje dwa argumenty

  3. Drugi argument jest opcjonalny

  4. Funkcja zwraca wynik pierwszego argumentu do potęgi drugiego

  5. Jeżeli tylko jeden argument był podany, przyjmij drugi równy pierwszemu

  6. Wypisz zwracane wartości

Output
power(4, 3)
# 64

power(3)
# 27

9.3.5.4. Aviation numbers

English
  1. Given is pilot's alphabet for numbers (see boilerplate section below)

  2. Convert CONVERSION: Dict[int, str] to ALPHABET: Dict[str, str] (keys as str)

  3. For input data (see input section below)

  4. Define function converting int or float to text form in Pilot's Speak

  5. You can modify ALPHABET

  6. You cannot change CONVERSION

Polish
  1. Dany jest alfabet pilotów dla numerów (patrz sekcja boilerplate)

  2. Przekonwertuj CONVERSION: Dict[int, str] na ALPHABET: Dict[str, str] (klucze jako str)

  3. Dla danych wejściowych (patrz sekcja input poniżej)

  4. Zdefiniuj funkcję konwertującą int lub float na formę tekstową w mowie pilotów

  5. Możesz modyfikować ALPHABET

  6. Nie możesz zmieniać CONVERSION

Boilerplace
CONVERSION = {
    0: 'zero',
    1: 'one',
    2: 'two',
    3: 'tree',
    4: 'fower',
    5: 'fife',
    6: 'six',
    7: 'seven',
    8: 'ait',
    9: 'niner',
}
Input
1969
31337
13.37
31.337
-1969
-31.337
-49.35
Output
'one niner six niner'
'tree one tree tree seven'
'one tree and tree seven'
'tree one and tree tree seven'
'minus one niner six niner'
'minus tree one and tree tree seven'
'minus fower niner and tree fife'
The whys and wherefores
  • Defining and calling functions

  • Passing function arguments

  • Cleaning data from user input

  • dict lookups

9.3.5.5. Cleaning text input

  • Complexity level: medium

  • Lines of code to write: 15 lines

  • Estimated time of completion: 15 min

  • Solution: solution/args_str_clean.py

English
  1. For given input data (see below)

  2. Write function cleaning up data

  3. Function takes one argument of type str

  4. Function returns cleaned text

Polish
  1. Dla danych wejściowych (patrz sekcja input)

  2. Napisz funkcję czyszczącą dane

  3. Funkcja przyjmuje jeden argument typu str

  4. Funkcja zwraca oczyszczony tekst

Input
INPUT = [
    'ul.Mieszka II',
    'UL. Zygmunta III WaZY',
    '  bolesława chrobrego ',
    'ul Jana III SobIESkiego',
    '\tul. Jana trzeciego Sobieskiego',
    'ulicaJana III Sobieskiego',
    'UL. JA    NA 3 SOBIES  KIEGO',
    'ULICA JANA III SOBIESKIEGO  ',
    'ULICA. JANA III SOBIeskieGO',
    ' Jana 3 Sobieskiego  ',
    'Jana III Sobi  eskiego ',
]
Output
'Mieszka II'
'Zygmunta III Wazy'
'Bolesława Chrobrego'
'Jana III Sobieskiego'
'Jana III Sobieskiego'
'Jana III Sobieskiego'
'Jana III Sobieskiego'
'Jana III Sobieskiego'
'Jana III Sobieskiego'
'Jana III Sobieskiego'
'Jana III Sobieskiego'
The whys and wherefores
  • Defining and calling functions

  • Passing function arguments

  • Cleaning data from user input

Todo

Translate input data to English

9.3.5.6. Number to human readable

English
  1. For input data (see below)

  2. Define function converting int or float to text form

  3. Text form must be in proper grammar form

  4. Max 6 digits before decimal separator (point .)

  5. Max 5 digits after decimal separator (point .)

Polish
  1. Dla danych wejściowych (patrz sekcja input)

  2. Zdefiniuj funkcję konwertującą int lub float na formę tekstową

  3. Forma tekstowa musi być poprawna gramatycznie

  4. Max 6 cyfr przed separatorem dziesiętnym (point .)

  5. Max 5 cyfr po separatorze dziesiętnym (point .)

Input
1969
31337
13.37
31.337
-1969
-31.337
-49.35
Output
'one thousand nine hundred sixty nine'
'thirty one thousand three hundred thirty seven'
'thirteen and thirty seven hundredths'
'thirty one three hundreds thirty seven thousands'
'minus one thousand nine hundred sixty nine'
'minus thirty one and three hundreds thirty seven thousands'
'minus forty nine and thirty five hundreds'
The whys and wherefores
  • Defining and calling functions

  • Passing function arguments

  • Cleaning data from user input

  • dict lookups