2011-10-16 61 views
2
使用字符串

短版:導入在Python

說我有一個字符串str和文件functions.py從中我想導入其名稱存儲在str的方法。

我該怎麼辦?我想這樣的事情:

from functions.py import str 

但有str評估,而不是導入方法'str'(這不存在)。

一些google搜索後,我來接近(我希望)爲:提前

func_name = str 
_tmp = __import__('functions.py', globals(), locals(), ['func_name'], -1) 
func = ???? <what to put here?> 

感謝。

編輯:TMI。

+0

注意你應該導入'functions'而不是'functions.py'。 – Robin

回答

4

假設你的代碼模塊導入_tmp作品那麼最後一步很簡單:

func = getattr(_tmp, func_name) 
+0

非常好,這個作品很棒。謝謝! –

1

getattr方法爲您提供給定對象的屬性。由於全局函數都是它們在模塊的屬性,你可以使用這個:

import functions 

funcName = 'doSomething' 
f = getattr(functions, funcName) 
f(123) 

沒有必要使用__import__,作爲這通常僅在需要時,你不事先知道模塊的名字。

0

如果你的目標是隻導入了所需的功能,以節省內存,不要打擾;即使您使用了from ... import ...構造,Python仍會導入整個模塊,只是它只會將當前字典中添加的那些成員(您其他人仍在內存中,只是無法直接訪問)添加到當前字典中。

考慮到這一點,我會做一些沿着這些路線:

import functions 
the_name = self.name.lower() + str(i) 
the_func = getattr(functions, the_name) 
+1

TypeError:'模塊'對象不可以訂購 –

+0

@Mark Ah,對。在一段時間內不使用該語言後,你會忘記一點點。 :) –