Python 3: передача изменяемого значения переменной в функцию в импортированной библиотеке функций - PullRequest
0 голосов
/ 25 мая 2019

Нуб здесь.Я только что узнал, что «глобальный» применяется только внутри модуля, и этот факт создал проблему.Решения на стеке потока для подобных проблем находятся за пределами моего понимания и кажутся излишними для того, что я пытаюсь сделать.

У меня есть функция, 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)
...