栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以输入提示lambda函数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以输入提示lambda函数?

您可以在Python 3.6及更高版本中使用PEP
526变量注释
。您可以使用泛型注释将

lambda
结果分配给的变量:
typing.Callable

from typing import Callablefunc: Callable[[str, str], int] = lambda var1, var2: var1.index(var2)

这不会将类型提示信息附加到功能对象本身,而不会附加到存储对象的名称空间,但这通常是类型提示所需要的。

但是,您也可以只使用函数语句。商品的唯一优点

lambda
是可以将一个简单表达式的函数定义 放在
一个较大的表达式中。但是上述lambda并不是较大表达式的一部分,它只是赋值语句的一部分,并将其绑定到名称。这正是
def func(var1: str,var2: str): return var1.index(var2)
声明所要实现的。

请注意,您也不能单独注释

*args
**kwargs
作为
Callable
状态文档:

没有语法指示可选参数或关键字参数。这种函数类型很少用作回调类型。

该限制不适用于使用方法的PEP
544
协议

__call__

;如果您需要明确表示应接受哪些参数,请使用此选项。您需要Python
3.8 为反向移植安装
typing-extensions
项目:

from typing-extensions import Protocolclass SomeCallableConvention(Protocol):    def __call__(var1: str, var2: str, spam: str = "ham") -> int:        ...func: SomeCallableConvention = lambda var1, var2, spam="ham": var1.index(var2) * spam

对于

lambda
表达式 本身 ,您不能使用任何注释(Python的类型提示所基于的语法)。该语法仅适用于
def
函数语句。

从PEP 3107- 功能注释

lambda的语法不支持注释。lambda的语法可以更改为支持注释,方法是在参数列表周围要求使用括号。但是,由于以下原因,决定不进行此更改:

  • 这将是不兼容的更改。
  • 无论如何,Lambda已经绝育了。
  • lambda始终可以更改为函数。

您仍然可以将注释直接附加到对象,该

function.__annotations__
属性是可写字典:

>>> def func(var1: str, var2: str) -> int:...     return var1.index(var2)...>>> func.__annotations__{'var1': <class 'str'>, 'return': <class 'int'>, 'var2': <class 'str'>}>>> lfunc = lambda var1, var2: var1.index(var2)>>> lfunc.__annotations__{}>>> lfunc.__annotations__['var1'] = str>>> lfunc.__annotations__['var2'] = str>>> lfunc.__annotations__['return'] = int>>> lfunc.__annotations__{'var1': <class 'str'>, 'return': <class 'int'>, 'var2': <class 'str'>}

当然,当您想对类型提示运行静态分析器时,并不是像这样的动态注释会为您提供帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669181.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号