Уведомления

Группа в Telegram: @pythonsu

#1 Май 11, 2010 08:12:30

Petit-fute
От:
Зарегистрирован: 2010-05-11
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

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



Офлайн

#2 Май 11, 2010 10:20:51

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

Если нет опасений, касаемо содержимого файла (вредоносный код, например) то можно использовать eval()

А ещё можно поковырять модуль pickle.



Офлайн

#3 Май 11, 2010 10:49:23

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

Pantherinae, Felidae - это что? Строки?



Офлайн

#4 Май 11, 2010 11:09:16

Petit-fute
От:
Зарегистрирован: 2010-05-11
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

Ed
Pantherinae, Felidae - это что? Строки?
Это строка, считанная из текстового файла.

я пробовала с eval - но не получилось, расскажите поподробнее подалуйста



Офлайн

#5 Май 11, 2010 12:00:03

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

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

Petit-fute
Это строка, считанная из текстового файла.
ВНЕЗАПНО! Вы ведь не имя переменной хотите из текстового файла считать?..



Офлайн

#6 Май 11, 2010 12:12:45

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

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 - это зло. А в вашем случае я вообще не понимаю что человек имел в виду советуя его.
Либо я не понял что вам нужно, а он понял :)



Офлайн

#7 Май 11, 2010 12:15:53

Petit-fute
От:
Зарегистрирован: 2010-05-11
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

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

Petit-fute
Это строка, считанная из текстового файла.
ВНЕЗАПНО! Вы ведь не имя переменной хотите из текстового файла считать?..
Pantherinae, Felidae - вообще это имена родительских классов для класса Panthera. и мне надо динамически создать класс Panthera.



Офлайн

#8 Май 11, 2010 12:19:45

Petit-fute
От:
Зарегистрирован: 2010-05-11
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

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 - все равно остаются строками, а по идее в функции - это имена родительских классов. Причем их не обязательно два.



Офлайн

#9 Май 11, 2010 12:25:15

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

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 по именам, то бишь либо определены здесь же, либо проимпортированы.



Отредактировано (Май 11, 2010 12:34:52)

Офлайн

#10 Май 12, 2010 20:40:55

Petit-fute
От:
Зарегистрирован: 2010-05-11
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как передать параметры в функцию из текстового файла?

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 по именам, то бишь либо определены здесь же, либо проимпортированы.
спасибо, все заработало! :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version