Python 3.x 如何指定函数的参数类型
我需要做一个函数,它只接受一种特定类型的函数,比如参数,只接受二进制函数。我尝试过这个,但它不能正常工作:Python 3.x 如何指定函数的参数类型,python-3.x,Python 3.x,我需要做一个函数,它只接受一种特定类型的函数,比如参数,只接受二进制函数。我尝试过这个,但它不能正常工作: from typing import Callable, Any def es_binaria(f:Callable[[Any,Any],Any]): print("Es función binaria") def f1(a): return a def f2(a,b): return a+b def f3(a,b,c): return a+b+c es_
from typing import Callable, Any
def es_binaria(f:Callable[[Any,Any],Any]):
print("Es función binaria")
def f1(a): return a
def f2(a,b): return a+b
def f3(a,b,c): return a+b+c
es_binaria(f1)
es_binaria(f2)
es_binaria(f3)
看输出,它接受任何类型的函数
Es función binaria
Es función binaria
Es función binaria
请告诉我如何确保我的函数只接受二进制函数?(例如)Python是一种动态类型化语言。您要添加的参数类型是“提示”,而不是要求。也就是说,如果希望函数正常工作,应该将此类型的参数传递给函数 除非在函数中做出断言语句,否则无法将需求添加到参数列表:
import types
from typing import Callable, Any
def es_binaria(f:Callable[[Any,Any],Any]):
if type(f) == types.FunctionType: #Check type of f
print("Es un función")
else:
print("No es un función")
def f1(a): return a
es_binaria(1)
es_binaria('string')
es_binaria(f1)
“Stictly typed”实际上不是一个定义的术语。Python是强类型的,但它也是动态类型的(与静态类型相反),这意味着类型提示只对
mypy
这样的工具有意义,而不是Python解释器本身。很好。我是说静态输入。非常感谢@deseuler!所以我不能检查“参数函数”的参数,就像C++一样,对吗?技术上是正确的。因此Python没有重载函数。它的约定是使用关键字参数,并为不总是使用的参数设置默认值。另一个潜在的真正有用的资源是学习。这也是在python中使用可变数量的参数实现函数的常用方法。