Найти - Пользователи
Полная версия: как преобразовать 'str' в object?
Начало » Python для новичков » как преобразовать 'str' в object?
1
Hat
Доброго времени суток уважаемый 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)
Благодарю за дельные и внятные ответы.

Тема закрыта.
regall
Hat
Как импортировать модуль, через переменную
>>> x= 'sys'
>>> x = 'sys'
>>> sys = __import__(x)
>>> sys
<module 'sys' (built-in)>
regall
Hat
Как получить результат модуль.функция через переменные пер1 и пер2
>>> per1 = 'math'
>>> module = __import__(per1)
>>> per2 = 'log10'
>>> module.__dict__[per2](10)
1.0
ZZZ
regall
>>> module.__dict__(10)
Правильным решением будет использовать функцию getattr.
Hat
ZZZ - почему?
ZZZ
Скажем так… Это расово верный способ получения аттрибута у объекта.
И если для модуля способ с __dict__ работает нормально, то для сложных объектов может не работать или работать не корректно. Да и модуль может быть подменён другим объектом в sys.modules.
Hat
regall
>>> x= 'sys'
>>> x = 'sys'
>>> sys = __import__(x)
>>> sys
<module 'sys' (built-in)>
Жаль что не работает такой код:
>>> x = 'sys'
>>> sys = 'import ' + x
>>> sys
А может есть функция, переводящая строковый обьект в исполняемый код?
Можно было бы легко импортировать куски кода из текстового файла без индейского фолклера.
Или распарсивать html с python кодом…

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

С уважением…
ZZZ
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)
regall
Hat
Здесь же подфорум для новичков :-)
Да, именно для новичков, но не для младенцев =)
Нужно же на основе ответов самому попытаться что-то поделать, поэкспериментировать, а вдруг получиться =). Ну, а если уж не получилось, то спрашивать дальше (поверьте, от этого лучше будет не только тем, кто отвечает, а в первую очередь тому, кто задает вопрос…)
Hat
regall
Да, именно для новичков, но не для младенцев =)
Ну уж потерпите чутка :D
Надеюсь в перспективе научиться ходить, а пока не судите строго.

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

Тема закрыта.
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