- Вы добавляете переменные в локальное пространство имен функции.Ничто из того, что вы добавляете, не будет видно за пределами функции.
- Назначение, которое вы делаете, относится к переменной с именем
nameoflist
, а не к строке, к которой она относится.
Чтобы обойти это, вы должны назначить пространство имен модуля.На самом деле это не так сложно:
def createlist(nameoflist):
globals()[nameoflist] = ["test"]
Вопрос, который вы должны задать себе, - это почему вы хотите это сделать.Допустим, вы загружаете свой файл:
with open("mydog.txt") as f:
for line in f:
createlist(line.strip())
Теперь вы действительно можете сделать
>>> print(bingo)
['test']
Однако весь смысл использования файла заключается в том, чтобы иметь динамические имена.Вы не знаете, какие имена вы получите заранее, и как только вы вставите их в глобальное пространство имен, вы не будете знать, какие переменные пришли из файла, а какие из других.
Имейте в виду, чтоглобальное пространство имен - это просто необычный, но обычный словарь.Я рекомендую хранить переменные в вашем собственном словаре, просто для этой цели:
with open("mydog.txt") as f:
mylists = {line.strip(): ['test'] for line in f}
Теперь вы можете получить доступ к элементам по имени:
>>> mylists['bingo']
['test']
Но что более важно, выможете проверить, какие имена у вас есть, и реально манипулировать ими:
>>> list(mylists.keys())
['bingo', 'bango', 'smelly', 'wongo']