2012-07-20 123 views
3

我想要做這樣的事情獲得說法變量名:蟒蛇在功能

fib = 1 
foo = (arg): 
    print arg, argName # the name of the variable that was put in for arg 
foo(fib) 

而得到這個返回:

1, fib 
+0

這不是在Python中有效的函數定義。 – chepner 2012-07-20 16:42:56

+0

@chepner:我寧願把它當作[僞代碼](http://en.wikipedia.org/wiki/Pseudocode)。 – Tadeck 2012-07-20 16:43:58

+0

你爲什麼想這樣做? – 2012-07-20 17:09:41

回答

4

你不能那樣做(如伊格納西奧巴斯克斯 - 艾布拉姆斯已經回答了),但你可以以類似的方式做到這一點:

>>> def foo(**kwargs): 
    for arg_name in kwargs: 
     return kwargs[arg_name], arg_name 


>>> foo(fib=1) 
(1, 'fib') 

唯一的區別是,你必須使用關鍵字參數,否則它將無法工作。

的替代解決方案是也訪問傳遞的變量,這將導致在獲得函數,類或名稱(或其他任何將具有定義的此名稱)的名字的屬性__name__。唯一應該注意的是,默認情況下,這不是變量的名稱,而是函數/類/模塊的原始名稱(在定義時指定的名稱)。看到這裏的例子:http://ideone.com/MzHNND

2

不能完成。 Python不區分該級別的名稱。

+0

如何通過使用'locals()','globals()'循環變量並通過比較'id()'的返回值來找出哪些名稱引用給定值? – 2013-09-16 11:01:01

0
def print_args(**kwargs): 
    for name,value in kwargs.iteritems(): 
     print name, value