Как использовать одну и ту же переменную в одной функции с другой функцией, не делая эту переменную глобальной? - PullRequest
0 голосов
/ 22 сентября 2011

Как я могу взять одну переменную из одной функции и использовать ее в другой функции, не делая эту переменную глобальной?

Ответы [ 4 ]

4 голосов
/ 22 сентября 2011

У вас есть в основном два варианта.

Один - передать его второй функции в качестве параметра. (Если вы хотите, чтобы первая функция видела изменения в значении, это должен быть ссылочный тип (например, dict / list), и вам не нужно перезаписывать объект, только изменить его (например, a.append(b) вместо a = a + [b] ).

Второй - определить класс, который можно использовать как одиночный. Технически, это все еще определяет что-то «глобально», но позволяет вам группировать вещи:

class FooSingleton(object):
    class_var = "foo"

def func1():
    FooSingleton.class_var = "bar"

def func2():
    print(FooSingleton.class_var)

(Вы также можете сделать это с dict вместо класса; вопрос предпочтений.)

2 голосов
/ 22 сентября 2011

имеют функцию, принимающую параметр, и передают этот параметр.

def one_function():
  one_variable = ''
  return one_variable

def another_function(a_param):
  # do something to a_param
  return
0 голосов
/ 23 сентября 2011

Вы можете использовать замыкание для обработки этого, или более естественным является определение обеих функций как методов класса и "глобальной" переменной как члена класса.

0 голосов
/ 22 сентября 2011

Технически возможно и может быть использовано, например, для запоминания (но обычно это скрыто за декоратором и реализуется только людьми, которые уверены, что поступают правильно, даже если они все еще чувствуют себя немного об этом):

def g():
    if not hasattr(g, "x"):
        g.x = 0
    return g.x

g()
# 0

g.x = 100
g()
# 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...