8.4. Function Arguments

8.4.1. Rationale

argument

Value/variable/reference being passed to the function

positional argument

Value passed to function - order is important

keyword argument

Value passed to function resolved by name - order is not important

8.4.2. Syntax

Listing 8.12. Function definition with parameters
my_function(<arguments>)
add(1, 2)
add(a=1, b=2)
add(1, b=2)

8.4.3. Positional Arguments

  • Order of positional arguments has significance

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


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

8.4.4. Keyword Arguments

  • 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

8.4.5. Positional and Keyword Arguments

  • Positional arguments must be at the left side

  • Keyword arguments must be at the right side

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


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'

8.4.6. Examples

Listing 8.13. Example 1
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
Listing 8.14. Example 2
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,
)
Listing 8.15. Example 3
read_csv('iris.csv')

read_csv('iris.csv', encoding='utf-8')

read_csv('iris.csv', encoding='utf-8', parse_dates=['date_of_birth'])

read_csv('iris.csv', skiprows=3, delimiter=';')

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

8.4.7. Assignments

8.4.7.1. Function Arguments Sequence

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ść

8.4.7.2. Function Arguments Divide

English
  1. Define function divide

  2. Function takes two arguments

  3. Function divides its arguments and returns the result

  4. Call function with divide(4, 2)

  5. Call function with divide(4, 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 dzieli oba argumenty przez siebie i zwraca wynik dzielenia

  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?

Output
>>> divide(4, 2)
2

>>> divide(4, 0)
None

8.4.7.3. Function Arguments Power

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

  7. Compare result with "Output" section (see below)

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

  7. Porównaj wyniki z sekcją "Output" (patrz poniżej)

Output
>>> power(4, 3)
64

>>> power(3)
27

8.4.7.4. Function Arguments Translate

English
  1. Use data from "Input" section (see below)

  2. Define function translate with parameter text

  3. Use str.join() with generator expression to iterate over text

  4. If letter is in PL then use conversion value as letter, otherwise take letter

  5. Return from function translated text

  6. Call translate('zażółć')

  7. Call translate('gęślą')

  8. Call translate('jaźń')

  9. Compare result with "Output" section (see below)

Polish
  1. Użyj danych z sekcji "Input" (patrz poniżej)

  2. Zdefiniuj funkcję translate przyjmującą parametr text

  3. Użyj str.join() z wyrażeniem generatorowym do iteracji po text

  4. Jeżeli litera jest w PL to użyj przekonwertowanej wartości jako litera, w przeciwnym przypadku to weź literę

  5. Zwróć z funkcji przetłumaczony text

  6. Uruchom translate('zażółć')

  7. Uruchom translate('gęślą')

  8. Uruchom translate('jaźń')

  9. Porównaj wyniki z sekcją "Output" (patrz poniżej)

Input
PL = {'ą': 'a', 'ć': 'c', 'ę': 'e',
      'ł': 'l', 'ń': 'n', 'ó': 'o',
      'ś': 's', 'ż': 'z', 'ź': 'z'}
Output
>>> translate('zażółć')
'zazolc'

>>> translate('gęślą')
'gesla'

>>> translate('jaźń')
'jazn'

8.4.7.5. Function Arguments Clean

English
  1. Use data from "Input" section (see below)

  2. Write function cleaning up data

  3. Function takes one argument of type str

  4. Function returns cleaned text

  5. Compare result with "Output" section (see below)

Polish
  1. Użyj danych z sekcji "Input" (patrz poniżej)

  2. Napisz funkcję czyszczącą dane

  3. Funkcja przyjmuje jeden argument typu str

  4. Funkcja zwraca oczyszczony tekst

  5. Porównaj wyniki z sekcją "Output" (patrz poniżej)

Input
>>> clean('ul.Mieszka II')
'Mieszka II'

>>> clean('UL. Zygmunta III WaZY')
'Zygmunta III Wazy'

>>> clean('  bolesława chrobrego ')
'Bolesława Chrobrego'

>>> clean('ul Jana III SobIESkiego')
'Jana III Sobieskiego'

>>> clean('\tul. Jana trzeciego Sobieskiego')
'Jana III Sobieskiego'

>>> clean('ulicaJana III Sobieskiego')
'Jana III Sobieskiego'

>>> clean('UL. JA    NA 3 SOBIES  KIEGO')
'Jana III Sobieskiego'

>>> clean('ULICA JANA III SOBIESKIEGO  ')
'Jana III Sobieskiego'

>>> clean('ULICA. JANA III SOBIeskieGO')
'Jana III Sobieskiego'

>>> clean(' Jana 3 Sobieskiego  ')
'Jana III Sobieskiego'

>>> clean('Jana III Sobi  eskiego ')
'Jana III Sobieskiego'
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

8.4.7.6. Function Arguments Numbers to Str

English
  1. Use data from "Input" section (see below)

  2. Given is pilot's alphabet for numbers

  3. Convert DATA: Dict[int, str] to CONVERT: Dict[str, str] (keys as str)

  4. For input data (see input section below)

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

  6. You can modify CONVERT

  7. You cannot change DATA

  8. Compare result with "Output" section (see below)

Polish
  1. Użyj danych z sekcji "Input" (patrz poniżej)

  2. Dany jest alfabet pilotów dla numerów

  3. Przekonwertuj DATA: Dict[int, str] na CONVERT: Dict[str, str] (klucze jako str)

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

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

  6. Możesz modyfikować CONVERT

  7. Nie możesz zmieniać DATA

  8. Porównaj wyniki z sekcją "Output" (patrz poniżej)

Input
DATA = {
    0: 'zero',
    1: 'one',
    2: 'two',
    3: 'tree',
    4: 'fower',
    5: 'fife',
    6: 'six',
    7: 'seven',
    8: 'ait',
    9: 'niner',
}
>>> pilot_say(1969)
'one niner six niner'

>>> pilot_say(31337)
'tree one tree tree seven'

>>> pilot_say(13.37)
'one tree and tree seven'

>>> pilot_say(31.337)
'tree one and tree tree seven'

>>> pilot_say(-1969)
'minus one niner six niner'

>>> pilot_say(-31.337)
'minus tree one and tree tree seven'

>>> pilot_say(-49.35)
'minus fower niner and tree fife'
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

8.4.7.7. Function Arguments Numbers to Human

English
  1. Use data from "Input" section (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 .)

  6. Compare result with "Output" section (see below)

Polish
  1. Użyj danych z sekcji "Input" (patrz poniżej)

  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 .)

  6. Porównaj wyniki z sekcją "Output" (patrz poniżej)

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