我想在一個不同的模塊中有一個函數,當它被調用時,它可以訪問其調用者可以訪問的所有變量,並且就像它的主體被粘貼到調用者而不是擁有自己的上下文,基本上像C宏而不是普通函數。我知道我可以將locals()傳入函數,然後它可以作爲字典訪問局部變量,但我希望能夠正常訪問它們(例如xy,而不是x [「y」],並且我希望所有名稱都是調用者可以訪問不只是當地人,還有那被「進口」到調用的文件,但沒有到包含功能模塊的東西。調用python函數就好像它是內聯的
這是可能的決絕?
編輯2這裏有一個最簡單的例子,我可以拿出我真正想要做的事:
def getObj(expression)
ofs = expression.rfind(".")
obj = eval(expression[:ofs])
print "The part of the expression Left of the period is of type ", type(obj),
問題是'表達式'需要調用者的導入和局部變量,以便無誤地評估。在現實中,這不僅僅是一個評估,所以我試圖避免僅僅傳遞本地()的解決方案到eval(),因爲那不能解決我的一般情況問題。
是的,你可以這樣做,但你可能不應該添加神奇的語言功能,因爲可憐的下一個人閱讀你的代碼。有一個原因是C預處理器宏最好不要使用:它們以神祕的方式改變語言。 – msw 2010-06-24 21:37:10
你應該問問題而不是(很好)*非常*解決方案。 – 2010-06-24 23:05:06
@ THC4k- 5000英尺視圖是我幾周前發佈的這個問題,但沒有得到任何答案:http://stackoverflow.com/questions/3027307/listing-all-possible-values-for-soap-用python-suds枚舉 我試圖得到這個問題的一般情況下的解決方案 – bdk 2010-06-25 01:26:06