为啥要将一个类作为 lambda 传递?
Posted
技术标签:
【中文标题】为啥要将一个类作为 lambda 传递?【英文标题】:Why would you pass a class as a lambda?为什么要将一个类作为 lambda 传递? 【发布时间】:2019-05-08 05:31:14 【问题描述】:我根据在线示例和教程构建了我的第一个 GraphQL API,但想知道为什么某些事情是用 Python 完成的。
一个我不明白的类的sn-p:
class UpdateRegion(graphene.Mutation):
"""Update a region."""
region = graphene.Field(lambda: Region, description="Region updated by this mutation.")
...
区域类:
class Region(SQLAlchemyObjectType):
class Meta:
model = RegionModel
interfaces = (relay.Node, )
为什么他们将 Region
类作为 lambda 函数传递?
对我来说lambda: Region
和f():return Region
是一样的
【问题讨论】:
因为lambda
的定义比类似的函数定义要短
如果 Field
参数的定义是它应该是 a Callable
专门返回一个对象/构造函数/其他东西,这是一种自然的方法它。
我怎样才能轻松发现它必须是可调用的?因为文档不清楚
嗯,文档应该更清楚了。如果不是,您可以尝试深入研究代码本身。
注意:直接使用Field构造函数时,传递的是类型而不是实例。安装在字段中的类型充当参数。这是他们在文档中给出的唯一提示
【参考方案1】:
对我来说
lambda: Region
与f():return Region
相同
对于初学者来说,f():return Region
不是有效的语法。当然,这可以修复:
def f():
return Region
region = graphene.Field(f, ...)
这将起作用并且大致相当于region = graphene.Field(lambda: Region, ...)
。后者更短,可以说更清晰。
【讨论】:
传递Field(lambda: Region)
与Field(Region)
有何不同?
@GPhilo 更深一层。必须调用 lambda 对象 lambda: Region
以获取 Region
,然后再次获取 Region
实例。 OTOH,Region
本身只能调用一次才能获得 Region
实例。
我明白了!谢谢,我错过了那个细节以上是关于为啥要将一个类作为 lambda 传递?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 lambda auto& 参数选择 const 重载?