在python中从方法返回函数
我试着查看文档和谷歌搜索,但我无法找到方法末尾[clazz]的意义。有人能帮我理解方法末尾[clazz]的意思吗?谢谢在python中从方法返回函数,python,functional-programming,Python,Functional Programming,我试着查看文档和谷歌搜索,但我无法找到方法末尾[clazz]的意义。有人能帮我理解方法末尾[clazz]的意思吗?谢谢 def get_context_setter(context, clazz): return { int: context.setFieldToInt, datetime: context.setFieldToDatetime }[clazz] setFieldToInt和setFieldToDa
def get_context_setter(context, clazz):
return {
int: context.setFieldToInt,
datetime: context.setFieldToDatetime
}[clazz]
setFieldToInt和setFieldToDatetime是上下文类中的方法。此函数返回两种方法之一。它返回
context.setFieldToInt
或context.setFieldToDatetime
。它使用字典作为其他编程语言中的switch
语句来实现这一点
它检查clazz
是对类int
的引用还是对类datetime
的引用,然后返回适当的方法
它与此代码相同:
def get_context_setter(context, clazz):
lookup_table = {int: context.setFieldToInt,
datetime: context.setFieldToDatetime
}
context_function = lookup_table[clazz] # figure out which to return
return context_function
使用dict而不是开关
语句非常流行,请参阅。更简要地介绍。
所提供的代码期望某个对象的类作为参数,但名称很差,称为clazz。
然后将该类用作字典键。
他们实际上是在尝试接受两种不同的类型,并对对象类型调用一个方法
类是Python中的一个关键字。
您展示的代码的作者选择使用奇怪的拼写,而不是像obj_类这样的较长的snake_case参数名。
这些参数真的应该被命名为obj,obj_类
或
实例,实例类
更好的是,该类实际上不需要是单独的参数 它看起来像是在构建一个字典,然后立即访问作为
clazz
参数传入的键。因此,您将int
类或datetime
类传递给它,它将返回该上下文和类的构造函数抱歉,我现在理解了。