Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何指定函数的参数类型_Python 3.x - Fatal编程技术网

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中使用可变数量的参数实现函数的常用方法。