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

Я работаю над проектом и, чтобы сократить код, я определил функцию. Но он работает не так, как должен, когда я его назвал. Задача, которую я хочу выполнить в этом проекте, заключается в том, что, когда в списке букв есть буквы «a» и «b», код делает переменные «x» и «y» равными нулю. Для этого я сделал словарь, в котором алфавиты являются ключевыми, а переменные имеют нулевые значения. Теперь, когда «for» l oop находит буквы в ключах, он выполняет значения. Этот код отлично работает, когда я использую его просто. Но когда я скопировал весь этот код в пользовательскую функцию и вызвал ее, он не работал. Переменные остаются без изменений. Я хочу использовать этот код с функцией. Ниже приведен код, который не работает с функцией, и я хочу, чтобы мой код выглядел примерно так.

x = y = z = 10
letters = ['a', 'b']

def operator(lis):
    dic = {'a': 'x=0', 'b': 'y=0', 'c': 'z=0'}
    for key, value in dic.items():
        if key in lis:
            exec(value)

operator(letters)
print(x)  # Output is 10
print(y)  # Output is 10

А вот код, который работает без функции.

x = y = z = 10
letters = ['a', 'b']

dic = {'a': 'x=0', 'b': 'y=0', 'c': 'z=0'}
for key, value in dic.items():
    if key in letters:
        exec(value)
print(x)  # Output is 0
print(y)  # Output is 0

Я трачу много времени, чтобы исправить это. Пожалуйста, устраните эту проблему и укажите, почему она не работает.

1 Ответ

2 голосов
/ 13 июля 2020

Я думаю, у вас проблема с масштабом. Я не очень хорошо знаком с использованием exe c (), но я провел быстрый поиск, и это решило проблему. Попробуйте использовать другие примеры, чтобы проверить, работает ли он. Просто замените строку exe c на это:

exec(value, globals())

Я предполагаю, что x, y, z, используемые внутри функции, считаются локальными, и, добавляя этот аргумент, вы делаете их глобальными. Надеюсь, это поможет.

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