在python中从方法返回函数

在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

我试着查看文档和谷歌搜索,但我无法找到方法末尾[clazz]的意义。有人能帮我理解方法末尾[clazz]的意思吗?谢谢

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
类传递给它,它将返回该上下文和类的构造函数抱歉,我现在理解了。