如何将变量的类型提示指定为函数类型?没有打字。函数,我在相关PEP PEP 483中找不到任何东西。
当前回答
我想要这个功能的具体用例是在PyCharm中启用富代码补全。使用Callable并没有导致PyCharm建议对象具有.__code__属性,这是我在本例中想要的。
我偶然发现类型模块和..
从类型导入功能类型
允许我用FunctionType注释对象,voilà, PyCharm现在建议我的对象具有.__code__属性。
OP不清楚为什么这个类型提示对他们有用。Callable当然适用于任何实现.__call__()的对象,但为了进一步澄清接口,我提交了types模块。
遗憾的是,Python需要两个非常相似的模块。
其他回答
我想要这个功能的具体用例是在PyCharm中启用富代码补全。使用Callable并没有导致PyCharm建议对象具有.__code__属性,这是我在本例中想要的。
我偶然发现类型模块和..
从类型导入功能类型
允许我用FunctionType注释对象,voilà, PyCharm现在建议我的对象具有.__code__属性。
OP不清楚为什么这个类型提示对他们有用。Callable当然适用于任何实现.__call__()的对象,但为了进一步澄清接口,我提交了types模块。
遗憾的是,Python需要两个非常相似的模块。
正如@jonrsharpe在评论中指出的那样,这可以通过打字来完成。可调用:
from typing import Callable
def my_function(func: Callable):
注意:Callable本身等价于Callable[…],任何]。 这样的Callable接受任意数量和类型的参数(…),并返回任意类型的值(any)。如果这太不受约束,还可以指定输入参数列表的类型和返回类型。
例如,给定:
def sum(a: int, b: int) -> int: return a+b
对应的注释为:
Callable[[int, int], int]
也就是说,参数在外部订阅中被子脚本化,返回类型作为外部订阅中的第二个元素。一般来说:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
在python3中,它无需导入类型即可工作:
def my_function(other_function: callable):
pass
另一个值得注意的有趣点是,您可以使用内置函数type()来获取内置函数的类型并使用它。 所以你可以
def f(my_function: type(abs)) -> int:
return my_function(100)
或者类似的形式
一个最简单和有趣的解决方案是:
def f(my_function: type(lambda x: None)):
return my_function()
可以用以下方法证明:
def poww(num1, num2):
return num1**num2
print(type(lambda x: None) == type(poww))
输出将是: 真正的
推荐文章
- 字典:获取键列表的值列表
- 如何创建两个熊猫DataFrame列的字典
- 如何在Python中打印变量和字符串在同一行?
- 为什么这个用于初始化列表列表的代码明显地将列表链接在一起?
- 在Python中,在函数内部导入时会发生什么?
- 用Python列表中的值创建一个.csv文件
- 在Python中哪个更快:x**。5还是math.sqrt(x)?
- 有哪些好的Python ORM解决方案?
- 如何在f字符串中转义括号?
- Python void返回类型注释
- 如何为python模块的argparse部分编写测试?
- 在python中是否有用于均方根误差(RMSE)的库函数?
- 如何从matplotlib (pyplot。Figure vs matplotlib。figure) (frameon=False matplotlib中有问题)
- django test app error -在创建测试数据库时出现错误:创建数据库的权限被拒绝
- 识别使用pip安装的python包的依赖关系