2011-06-22 10 views
5

Chcę przekazać funkcję do funkcji w Pythonie. Wiem, że mogę to zrobić po prostu umieszczając nazwę funkcji jako parametr, np:Uzyskiwanie obiektu funkcji dla funkcji int() i float()

blah(5, function) 

Jednakże chcę przekazać funkcję int() i funkcję float() do tej funkcji. Jeśli po prostu wstawię nazwę funkcji, to zakłada się, że mam na myśli typy int i float, a nie funkcje do konwersji łańcuchów na int i float.

Czy istnieje sposób przekazania funkcji, a nie jej typu?

Odpowiedz

11

Po prostu przekazanie int i float jest w porządku. Masz rację, że to faktycznie przekazuje obiekty typu zamiast funkcji, ale to nie jest ważne. Ważną rzeczą jest to, że przekazany obiekt można wywołać, a wywołanie obiektów typu wykona to, czego oczekujesz.

+1

Dlaczego miałbyś kiedyś podawać int jako argument? – Trufa

+4

@Trufa: Tylko dwa przykłady: 'defaultdict (int)' i 'map (int, string_list)'. Jest o wiele więcej. –

+0

'posortowane (['1', '100', '99'], key = int)' –

3

Obiektami typu , co chcesz.

>>> def converter(value, converter_func): 
...  new_value = converter_func(value) 
...  print new_value, type(new_value) 
... 
>>> converter('1', int) 
1 <type 'int'> 
>>> converter('2.2', float) 
2.2 <type 'float'> 
>>>