【问题标题】:passing object to object [duplicate]将对象传递给对象[重复]
【发布时间】:2016-07-12 08:16:32
【问题描述】:

我试图了解为什么以下工作的背景:

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(stuff) (就像 self 这只是一个约定)? 如果我想将 2 个对象传递给 function_instance 怎么办?我如何在 g(obj) 中引用它们?

你能推荐一些关于这个的阅读吗?

【问题讨论】:

标签: python object


【解决方案1】:

您遇到的是closure。

当您编写part_string(my_indexes) 时,您正在创建一个新函数,并且在调用它时,您将使用您提供给part_string 的旧变量以及提供给function_instance 的新变量。

您可以随意命名内部函数,并且没有约定。 (这里使用了obj,但它可以是pie。除了func 用于函数闭包(decorators)之外,没有其他约定。

如果你想传递两个变量给函数,你可以定义两个变量给g(obj)函数:

def g(var1, var2):
    ...

这里有更多关于closures in python的信息。

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2017-10-11
    • 2014-05-01
    相关资源
    最近更新 更多