ดังที่@jonrsharpeระบุไว้ในความคิดเห็นสามารถทำได้ด้วยtyping.Callable
:
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
ปัญหาคือCallable
แปลด้วยตัวเองCallable[..., Any]
ซึ่งหมายความว่า:
callable จะใช้อาร์กิวเมนต์/ ประเภทจำนวนเท่าใดก็ได้และส่งกลับค่าประเภทใดก็ได้ ในกรณีส่วนใหญ่นี่ไม่ใช่สิ่งที่คุณต้องการเนื่องจากคุณจะอนุญาตให้ส่งผ่านฟังก์ชันใดก็ได้ คุณต้องการให้พารามิเตอร์ฟังก์ชันและชนิดการส่งคืนเป็นคำใบ้ด้วย
นั่นเป็นเหตุผลว่าทำไมหลาย ๆtypes
อินถึงtyping
ได้รับการโหลดมากเกินไปเพื่อรองรับสคริปต์ย่อยซึ่งแสดงถึงประเภทพิเศษเหล่านี้ ตัวอย่างเช่นหากคุณมีฟังก์ชันsum
ที่ใช้เวลาสองint
วินาทีและส่งกลับค่าint
:
def sum(a: int, b: int) -> int: return a+b
คำอธิบายประกอบของคุณจะเป็น:
Callable[[int, int], int]
นั่นคือพารามิเตอร์เป็นสคริปต์ย่อยในการสมัครสมาชิกภายนอกโดยมีชนิดการส่งคืนเป็นองค์ประกอบที่สองในการสมัครสมาชิกภายนอก โดยทั่วไป:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
Callable