Найти - Пользователи
Полная версия: как передать параметры в функцию из текстового файла?
Начало » Python для новичков » как передать параметры в функцию из текстового файла?
1
Petit-fute
Мне нужно передавать параметры в функцию в виде кортежа:
например, Panthera = type('Panthera', (Pantherinae, Felidae), {'my_attr':123})
(Pantherinae, Felidae) - нужно передать, но Pantherinae, Felidae хранится у меня в виде строки, так как считывается из файла.
Как правильно передавать эти параметры в функцию?
помогите, пожалуйста)
UsCr
Если нет опасений, касаемо содержимого файла (вредоносный код, например) то можно использовать eval()

А ещё можно поковырять модуль pickle.
Ed
Pantherinae, Felidae - это что? Строки?
Petit-fute
Ed
Pantherinae, Felidae - это что? Строки?
Это строка, считанная из текстового файла.

я пробовала с eval - но не получилось, расскажите поподробнее подалуйста
UsCr
eval преобразует строку в выражение на питоне (по крайней мере так было в 2.5).
Например, eval((123, 456)) создаст кортеж (123, 456).
В вашем случае значения в файл нужно писать строкой, потом из файла выдирать и передавать в eval.

Petit-fute
Это строка, считанная из текстового файла.
ВНЕЗАПНО! Вы ведь не имя переменной хотите из текстового файла считать?..
Ed
Petit-fute
Это строка, считанная из текстового файла.
Ну, тогда ее нужно просто отпарсить.
Вот, например:
input_line = 'Pantherinae, Felidae' # это ваша строка, считанная из файла
var1, var2 = input_line.split(', ') # после этого в var1 будет строка 'Pantherinae', а в var2 - 'Felidae'
Panthera = type('Panthera', (var1, var2), {'my_attr':123}) # передаем их в вашу странную конструкцию
я пробовала с eval - но не получилось, расскажите поподробнее подалуйста
eval - это зло. А в вашем случае я вообще не понимаю что человек имел в виду советуя его.
Либо я не понял что вам нужно, а он понял :)
Petit-fute
UsCr
eval преобразует строку в выражение на питоне (по крайней мере так было в 2.5).
Например, eval((123, 456)) создаст кортеж (123, 456).
В вашем случае значения в файл нужно писать строкой, потом из файла выдирать и передавать в eval.

Petit-fute
Это строка, считанная из текстового файла.
ВНЕЗАПНО! Вы ведь не имя переменной хотите из текстового файла считать?..
Pantherinae, Felidae - вообще это имена родительских классов для класса Panthera. и мне надо динамически создать класс Panthera.
Petit-fute
Ed
Petit-fute
Это строка, считанная из текстового файла.
Ну, тогда ее нужно просто отпарсить.
Вот, например:
input_line = 'Pantherinae, Felidae' # это ваша строка, считанная из файла
var1, var2 = input_line.split(', ') # после этого в var1 будет строка 'Pantherinae', а в var2 - 'Felidae'
Panthera = type('Panthera', (var1, var2), {'my_attr':123}) # передаем их в вашу странную конструкцию
я пробовала с eval - но не получилось, расскажите поподробнее подалуйста
eval - это зло. А в вашем случае я вообще не понимаю что человек имел в виду советуя его.
Либо я не понял что вам нужно, а он понял :)
все дело в том, что var1, var2 - все равно остаются строками, а по идее в функции - это имена родительских классов. Причем их не обязательно два.
Ed
Petit-fute
все дело в том, что var1, var2 - все равно остаются строками, а по идее в функции - это имена родительских классов. Причем их не обязательно два.
Я поэтому и спросил строки ли это. Оказывается, что не строки, а имена классов.
Это совсем другой случай. Тогда делаем так:
input_line = 'Pantherinae, Felidae'
classes = tuple([globals()[name] for name in input_line.split(', ')])
Panthera = type('Panthera', classes, {'my_attr':123})
PS: Классы должны быть видимы в текущем namespace по именам, то бишь либо определены здесь же, либо проимпортированы.
Petit-fute
Ed
Petit-fute
все дело в том, что var1, var2 - все равно остаются строками, а по идее в функции - это имена родительских классов. Причем их не обязательно два.
Я поэтому и спросил строки ли это. Оказывается, что не строки, а имена классов.
Это совсем другой случай. Тогда делаем так:
input_line = 'Pantherinae, Felidae'
classes = tuple([globals()[name] for name in input_line.split(', ')])
Panthera = type('Panthera', classes, {'my_attr':123})
PS: Классы должны быть видимы в текущем namespace по именам, то бишь либо определены здесь же, либо проимпортированы.
спасибо, все заработало! :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB