W C, zwracanie wielu wartości z funkcji jest dość żmudne, ale w Pythonie jest to bardzo łatwe do zrobienia.
Zwrot oddzielony przecinkami
W Pythonie możesz po prostu zwrócić listę oddzielonych przecinkami łańcuchów lub liczb.
Jako przykład, zdefiniuj funkcję, która zwraca tylko ciąg znaków i liczbę, jak pokazano poniżej, z każdym oddzielonym przecinkiem po zwrocie.
def test(): return 'abc', 100
W Pythonie wartości oddzielone przecinkami są traktowane jako tuple bez nawiasów, z wyjątkiem sytuacji, gdy jest to konieczne ze względów składniowych. Dlatego funkcja w powyższym przykładzie zwróci tuple z każdą wartością jako elementem.
To przecinek tworzy tuple, a nie nawiasy okrągłe. Nawiasy okrągłe mogą być pominięte, z wyjątkiem pustych krotek lub gdy jest to konieczne dla uniknięcia niejednoznaczności składni.
Built-in Types — Python 3.10.0 Documentation
Typem zwracanej wartości jest tuple.
result = test() print(result) print(type(result)) # ('abc', 100) # <class 'tuple'>
Każdy element będzie miał typ określony przez funkcję.
print(result[0]) print(type(result[0])) # abc # <class 'str'> print(result[1]) print(type(result[1])) # 100 # <class 'int'>
Błąd, jeśli określisz indeks, który przekracza liczbę zdefiniowanych wartości zwracanych.
# print(result[2]) # IndexError: tuple index out of range
Może być rozpakowany i wiele wartości zwracanych może być przypisanych do oddzielnych zmiennych.
a, b = test() print(a) # abc print(b) # 100
To samo dotyczy sytuacji, gdy chcemy określić trzy lub więcej wartości zwracanych zamiast tylko dwóch.
def test2(): return 'abc', 100, [0, 1, 2] a, b, c = test2() print(a) # abc print(b) # 100 print(c) # [0, 1, 2]
Zwraca listę.
[]
Jeśli otoczysz go tym, wartość zwracana będzie listą zamiast tuple.
def test_list(): return ['abc', 100] result = test_list() print(result) print(type(result)) # ['abc', 100] # <class 'list'>