2016-03-24 2 views
1

Я пытаюсь понять предысторию, почему следующие работы:передавая объект к объекту

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 неявно?

Я предполагаю, что это имеет какое-то отношение к следующему, поэтому больше вопросов здесь: что такое OBJ в г (OBJ)? может ли это быть чем-то другим, например. g (материал) (как с self, который является просто конвенцией)? Что делать, если я хочу передать 2 объекта в function_instance? как я могу обратиться к ним в g (obj)?

Можете ли вы порекомендовать вам некоторые чтения?

+1

See (http://stackoverflow.com/questions/13857/can-you. [Можете ли вы объяснить закрытие (так как они относятся к Python)?] -explain-укупорочные-как-они-относятся к питон) –

ответ

0

Что вы встретите, это closure.

Когда вы пишете part_string(my_indexes), вы создаете новую функцию, и, вызывая ее, вы используете старые переменные, которые вы дали part_string, вместе с новыми переменными, указанными в function_instance.

Вы можете назвать внутреннюю функцию тем, что хотите, и нет соглашения. (obj используется здесь, но это может быть pie. Там нет соглашения для этого, кроме func для замыканий функций (decorators).

Если вы хотите передать две переменные функции, вы можете определить две переменные в g(obj) функция:

def g(var1, var2): 
    ... 

Вот еще информация о closures in python

Смежные вопросы