Как проверить, существует ли переменная внутри функции? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь проверить, существует ли переменная, но внутри функции. Меня учили, что для этого единственное, что вам нужно было сделать:

'a' in locals() 

К сожалению, все оказалось немного сложнее, чем я ожидал.

I попытался определить функцию, которая включала этот метод.

q=[1,2,3]
def f():
    print('q' in locals())

Когда я запускаю эту функцию, она возвращает:

False

Проблема, как мы видим, в том, что q переменная, поэтому когда я запускаю ту же команду, но вне функции:

'q' in locals()

Возвращает:

True

Есть ли способ решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Когда вы кодируете следующие строки

q=[1,2,3]
def f():
    print('q' in locals())
f()

Здесь переменная 'q' не является локальной для функции f (), так как она объявлена ​​вне области действия функции. Внутри функции доступ к q можно получить с помощью Глобальный. Но вне функции 'q' есть локальная переменная. Поэтому, когда вы проверяете внутри функции

q=[1,2,3]
def f():
    print('q' in locals())

, она возвращает False

Но если вы объявите внутри функции и проверите следующее: -

def f():
    q=[1,2,3]
    print('q' in locals())

It вернет True, поскольку q теперь локально для функции.

Также, если вы отметите 'q' внутри функции как глобальное, оно вернет True, поскольку 'q' объявлено вне функции и имеет глобальную область действия.

q=[1,2,3]
def f():
    print('q' in globals())
f()

Выход

True
0 голосов
/ 01 апреля 2020

Вы можете проверить наличие вашего списка q в словаре globals(), поскольку он существует в глобальной области видимости, а не в локальной области действия вашей функции f, то есть:

def f():
    print('q' in globals())

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

def f():
    try:
        # Do something with q
        print(q)
    except NameError:
        print("Variable not defined")
0 голосов
/ 01 апреля 2020

вы можете использовать

hasattr(obj, "var")

и заменить obj на self

class test():
    def  __init__(self):
        self.a = 1
    def check(self, var):
        return hasattr(self, var)

t = test()

print(t.check("a"))
print(t.check("b"))

output

True
False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...