Как я могу передать своих местных жителей и получить доступ к переменным непосредственно от другой функции?

Существует свойство на UITableViewCell, названном editAction, который документируется как разрешение Вам изменить действие, используемое для вставки или удаления на отдельных ячейках (это использует ячейку target свойство также). Я не протестировал его, но это кажется, что могло бы сделать то, что Вы хотите.

5
задан Geo 14 August 2009 в 12:08
поделиться

4 ответа

Компилятор Python оптимизирует доступ к локальным переменным, распознавая во время компиляции, являются ли простые имена, к которым обращается функция, локальными (т. Е. Простые имена, назначенные или иным образом связанные внутри функции). Итак, если вы кодируете:

def lv1(d):
  locals().update(d)
  print zap

, компилятор «знает», что barename zap НЕ является локальным (не назначается в функции lv1 ), и поэтому он компилирует код для доступа к нему как к глобальному. - все, что содержит d , не имеет значения.

Если вы предпочитаете медленный и раздутый код, вы можете отменить оптимизацию, используя exec внутри функции - когда компилятор видит ключевое слово exec , он ЗНАЕТ, что вы пытаетесь сделать свой код как можно медленнее, раздутым и содержащим ошибки, и поэтому он взаимодействует, никак не оптимизируя его, примерно.

Итак, следующий код работает так, как вы хотите:

def lv1(d):
  exec ""
  locals().update(d)
  print zap

lv1({'zap': 23})

он излучает 23 , как вы хотите.

Я надеюсь, что из приведенного выше «невозмутимого юмора» ясно, что эта техника не рекомендуется, но я бы лучше изложите это очень четко: за сомнительное синтаксическое удовольствие написания print zap вместо print locals () ['zap'] , вы платите огромную цену с точки зрения производительности . Тем не менее, как и всевозможные опасные инструменты, которые могут быть полезны в редких случаях для действительно опытных программистов уровня гуру, действительно действительно знающих, что они делают и почему, exec доступен для вас. (или неправильно использовать) по вашей прихоти: Python НЕ стоит на вашем пути! -)

Из приведенного выше «невозмутимого юмора» ясно, что эта техника не рекомендуется, но я лучше изложу ее очень подробно: для сомнительного синтаксического удовольствия написания напечатайте zap вместо print locals () ['zap'] , вы платите огромную цену с точки зрения производительности. Тем не менее, как и всевозможные опасные инструменты, которые могут быть полезны в редких случаях для действительно опытных программистов уровня гуру, действительно действительно знающих, что они делают и почему, exec доступен для вас. (или неправильно использовать) по вашей прихоти: Python НЕ стоит на вашем пути! -)

Из приведенного выше «невозмутимого юмора» ясно, что эта техника не рекомендуется, но я лучше изложу ее очень подробно: для сомнительного синтаксического удовольствия от написания напечатайте zap вместо print locals () ['zap'] , вы платите огромную цену с точки зрения производительности. Тем не менее, как и всевозможные опасные инструменты, которые могут быть полезны в редких случаях для действительно опытных программистов уровня гуру, действительно действительно знающих, что они делают и почему, exec доступен для вас. (или неправильно использовать) по вашей прихоти: Python НЕ стоит на вашем пути! -)

за сомнительное синтаксическое удовольствие от написания print zap вместо print locals () ['zap'] , вы платите огромную цену с точки зрения производительности. Тем не менее, как и всевозможные опасные инструменты, которые могут быть полезны в редких случаях для действительно опытных программистов уровня гуру, действительно действительно знающих, что они делают и почему, exec доступен для вас. (или неправильно использовать) по вашей прихоти: Python НЕ стоит на вашем пути! -)

за сомнительное синтаксическое удовольствие написания print zap вместо print locals () ['zap'] , вы платите огромную цену с точки зрения производительности. Тем не менее, как и всевозможные опасные инструменты, которые могут быть полезны в редких случаях для действительно опытных программистов уровня гуру, которые действительно действительно знают, что они делают и почему, exec доступен для вас. (или неправильно использовать) по вашей прихоти: Python НЕ стоит на вашем пути! -)

19
ответ дан 18 December 2019 в 08:29
поделиться

Вы можете использовать замыкания для доступа к области видимости другой функции:

def b():

  def a():
    print size

  size = 20
  a()

Уловка состоит в том, чтобы складывать функции, которые принадлежат друг другу. Таким образом, внутренняя функция a может получить доступ к локальным переменным внешней функции b.

Но я не знаю, чем вы действительно занимаетесь, поэтому я не уверен, поможет ли это.

1
ответ дан 18 December 2019 в 08:29
поделиться

Это вам чем-то помогает?

def print_size(size=None):
    print(size)

dict = {'size': 'XXL'}
print_size(**dict)
1
ответ дан 18 December 2019 в 08:29
поделиться
print size

не может работать, потому что "размер" неизвестен при компиляции кода. Ваш код будет работать, если вы измените его следующим образом:

def a(dict):
    locals().update(dict)
    print locals()["size"]

def b():
    size = 20
    a(locals())

Но, как уже следует из комментария к вашему вопросу: это очень странный код. Я уверен, что есть лучшие решения, если вы объясните, чем действительно хотите заниматься.

-1
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: