Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2009 13:21:07

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

как преобразовать 'str' в object?

Доброго времени суток уважаемый All.

Столкнулся с парой задачек-неберучек.

1.
Дано:
переменная = ‘название_модуля’
Вопрос:
Как импортировать модуль, через переменную
Решение:

regall
>>> x = 'sys'
>>> sys = __import__(x)
>>> sys
2.
Дано:
пер1 = ‘модуль’
пер2 = ‘функция’

Вопрос:
Как получить результат модуль.функция через переменные пер1 и пер2
Кошерное решение:
ZZZ
>>> x, y, z = 'csv', 'excel', '__doc__'
>>> module = __import__(x)
>>> func = getattr(module, y) # Для получения csv.excel
>>> mean = getattr(func, z) # Для получения csv.excel.__doc__
Альтернативное решение:
regall
>>> per1 = 'math'
>>> module = __import__(per1)
>>> per2 = 'log10'
>>> module.__dict__[per2](10)
Благодарю за дельные и внятные ответы.

Тема закрыта.



Отредактировано (Ноя. 17, 2009 21:11:01)

Офлайн

#2 Ноя. 17, 2009 13:49:13

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

как преобразовать 'str' в object?

Hat
Как импортировать модуль, через переменную
>>> x= 'sys'
>>> x = 'sys'
>>> sys = __import__(x)
>>> sys
<module 'sys' (built-in)>



Офлайн

#3 Ноя. 17, 2009 13:52:05

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

как преобразовать 'str' в object?

Hat
Как получить результат модуль.функция через переменные пер1 и пер2
>>> per1 = 'math'
>>> module = __import__(per1)
>>> per2 = 'log10'
>>> module.__dict__[per2](10)
1.0



Офлайн

#4 Ноя. 17, 2009 15:04:35

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

как преобразовать 'str' в object?

regall
>>> module.__dict__(10)
Правильным решением будет использовать функцию getattr.



Офлайн

#5 Ноя. 17, 2009 15:48:25

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

как преобразовать 'str' в object?

ZZZ - почему?



Офлайн

#6 Ноя. 17, 2009 16:31:41

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

как преобразовать 'str' в object?

Скажем так… Это расово верный способ получения аттрибута у объекта.
И если для модуля способ с __dict__ работает нормально, то для сложных объектов может не работать или работать не корректно. Да и модуль может быть подменён другим объектом в sys.modules.



Офлайн

#7 Ноя. 17, 2009 17:17:22

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

как преобразовать 'str' в object?

regall
>>> x= 'sys'
>>> x = 'sys'
>>> sys = __import__(x)
>>> sys
<module 'sys' (built-in)>
Жаль что не работает такой код:
>>> x = 'sys'
>>> sys = 'import ' + x
>>> sys
А может есть функция, переводящая строковый обьект в исполняемый код?
Можно было бы легко импортировать куски кода из текстового файла без индейского фолклера.
Или распарсивать html с python кодом…

ZZZ, lorien - Благоданю за отслеживание кошерности ответов, но пожалуйста, приводите пример кошерного по вашему мнению кода. Здесь же подфорум для новичков :-)

С уважением…



Офлайн

#8 Ноя. 17, 2009 17:57:01

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

как преобразовать 'str' в object?

Hat
Жаль что не работает такой код
Изучайте пока язык – потом смеяться над этой фразой будите.

Hat
но пожалуйста, приводите пример кошерного по вашему мнению кода
>>> getattr(__import__('sys'), 'argv')
['/Library/Frameworks/Python.framework/Versions/2.6/bin/bpython']
Но кашерным кодом будет:
>>> import sys
>>> sys.argv
['/Library/Frameworks/Python.framework/Versions/2.6/bin/bpython']
А правильным советом будет:
>>> import this
и
>>> help(getattr)



Офлайн

#9 Ноя. 17, 2009 17:59:52

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

как преобразовать 'str' в object?

Hat
Здесь же подфорум для новичков :-)
Да, именно для новичков, но не для младенцев =)
Нужно же на основе ответов самому попытаться что-то поделать, поэкспериментировать, а вдруг получиться =). Ну, а если уж не получилось, то спрашивать дальше (поверьте, от этого лучше будет не только тем, кто отвечает, а в первую очередь тому, кто задает вопрос…)



Офлайн

#10 Ноя. 17, 2009 20:33:28

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

как преобразовать 'str' в object?

regall
Да, именно для новичков, но не для младенцев =)
Ну уж потерпите чутка :D
Надеюсь в перспективе научиться ходить, а пока не судите строго.

Благодарю за дельные и внятные ответы.

Тема закрыта.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version