Saya ingin menggunakan petunjuk tipe dalam proyek Python 3.5 saya saat ini. Fungsi saya harus menerima fungsi sebagai parameter.
Bagaimana saya bisa menentukan fungsi tipe dalam petunjuk tipe saya?
import typing
def my_function(name:typing.AnyStr, func: typing.Function) -> None:
# However, typing.Function does not exist.
# How can I specify the type function for the parameter `func`?
# do some processing
pass
Saya memeriksa PEP 483 , tetapi tidak dapat menemukan petunjuk jenis fungsi di sana.
Callable
Jawaban:
Seperti yang dicatat @jonrsharpe dalam komentar, ini dapat dilakukan dengan
typing.Callable
:Issue is,
Callable
itu sendiri diterjemahkanCallable[..., Any]
yang artinya:Callable mengambil sejumlah / tipe argumen dan mengembalikan nilai tipe apa pun. Dalam kebanyakan kasus, ini bukan yang Anda inginkan karena Anda akan mengizinkan hampir semua fungsi untuk diteruskan. Anda ingin parameter fungsi dan tipe kembalian diberi petunjuk juga.
Itulah mengapa banyak
types
dityping
telah kelebihan beban untuk mendukung sub-skrip yang menunjukkan jenis tambahan ini. Jadi jika, misalnya, Anda memiliki fungsisum
yang membutuhkan duaint
s dan mengembalikanint
:Anotasi Anda untuk itu adalah:
yaitu, parameter di-sub-skrip di langganan luar dengan tipe kembalian sebagai elemen kedua di langganan luar. Secara umum:
sumber
typing
hal ini menggerakkan seluruh bahasa python ke atas.Callable[[Arg, Types, Here], ...]
untuk*args
,**kwargs
, args kata kunci hanya dan hanya args posisi? Apakah mereka tidak berpikir untuk memanggil konvensi dalam tipe signature untuk callable? ;)Hal menarik lainnya yang perlu diperhatikan adalah Anda dapat menggunakan fungsi bawaan
type()
untuk mendapatkan jenis fungsi bawaan dan menggunakannya. Jadi Anda bisa sajaAtau sesuatu dari bentuk itu
sumber
builtin_function_or_method
sebagaimy_function
? Bukankah akanlambda
berhasil? Fungsi yang ditentukan pengguna atau metode terikat?