Нуб здесь.Я только что узнал, что «глобальный» применяется только внутри модуля, и этот факт создал проблему.Решения на стеке потока для подобных проблем находятся за пределами моего понимания и кажутся излишними для того, что я пытаюсь сделать.
У меня есть функция, ch (a, b), которая использует переменную с именем "str_name", для которой в главном модуле установлено значение global (test.py).Функция отлично работает там.str_name может быть изменено по желанию в test.py, и функция работает.Но когда я переместился в мою библиотеку функций, chr (a, b) не получил str_name.
Я приведу код ниже.Сначала некоторый код, чтобы показать желаемое использование функции (которая снова работает, когда функция находится в test.py).Функция позволяет мне сэкономить на кодировании.Я переформатирую HTML, поэтому я выполняю десятки операций поиска и заменяю только одну или две переменные.Вместо того, чтобы писать:
my_variable = my_variable.replace(v1, v2)
Я могу написать:
ch(v1, v2)
Конечно, это может быть сделано только тогда, когда по умолчанию установлено значение my_variable, и я бы хотел иметь возможностьизмените это на разные переменные в разных местах скрипта.Таким образом, общая идея заключается в следующем:
str_name = 'my_first_variable'
ch(v1, v2)
ch('this is a literal', 'this is another literal')
ch(v5, v6)
str_name = 'my_next_variable'
ch(v14, v15)
ch(v102, v110)
и т. Д.- которое делает возможным:
sar_batch_for_myvar = [[v2, v1], [v5, v7], ['foo', 'bar']]
str_name = 'myvar'
for item in sar_batch_for_myvar:
ch(item[0], item[1])
Затем на словари пакетов, набранные по имени переменной.
Вот код, который работает, за исключением случаев, когда ch (a, b) былимпортировано:
def ch(a, b):
global str_name
try:
globals()[str_name] = globals()[(str_name)].replace(a, b)
except NameError:
print(' ***str_name must be in quotes! (e.g., \'s\' not s)?\n\n')
return
global str_name
str_name = 's'
s = 'xyz'
print('s before =', s)
ch('x', '***')
ch('z', 'qqq')
print('s after =', s)