将对象传递给对象

时间:2016-03-24 16:31:49

标签: python object

我试图了解以下原因的背景:

def part_string(items):
    if len(items) == 1:
        item = items[0]
        def g(obj):
            return obj[item]
    else:
        def g(obj):
            return tuple(obj[item] for item in items)
    return g

my_indexes = (2,1)
my_string = 'ABCDEFG'
function_instance = part_string(my_indexes)
print(function_instance(my_string))
# also works: print(part_string(my_indexes)(my_string))

为什么我可以将 my_string 传递给 function_instance 对象,即使我已经将 my_indexes 属性传递给 part_string()创建 function_instance 时?为什么Python隐式接受 my_string

我想这与以下内容有关,所以这里有更多问题: g(obj)中的 obj 是什么?这可能是其他的东西,例如 g(东西)(与 self 一样,只是一种惯例)? 如果我想将2个对象传递给 function_instance 怎么办?我如何在 g(obj)中引用它们?

你能推荐一些阅读吗?

1 个答案:

答案 0 :(得分:0)

您遇到的是closure

当你写part_string(my_indexes)时,你正在创建一个新函数,并且在调用它时,你使用你给part_string的旧变量和给function_instance的新变量。

您可以根据需要命名内部函数,并且没有约定。 (obj在此处使用,但它可以是pie。除了func除了函数闭包(decorators)之外,没有任何约定。

如果您希望将两个变量传递给函数,您可以为g(obj)函数定义两个变量:

def g(var1, var2):
    ...

以下是有关closures in python的更多信息。