2015-06-21 99 views
0

如何在Python中自動解析格式說明符? 例如,而不是:在Python中模擬C宏

MagicPrint(str.format('This is {}', my.name)) 

我想寫MagicPrint()函數如下:

MagicPrint('This is {my.name}') 

建議?也許我可以使用裝飾器MagicPrint()函數? 請注意,由於MagicPrint()可以從另一個模塊調用,因此my.name不存在於**locals()中。

+0

它是不可能的!實際上[有兩種方法可以將變量放在字符串中](https://docs.python.org/2/library/string.html#formatstrings)1.是'format'和2.使用'%'符號.' '這是%s'%my.name' – Kasramvd

回答

0
class my: name = "Jerry" 
"This is {my.name}".format(**locals()) 
+0

這隻有在\ ** locals()包含my.name變量時纔有效。我正在尋找從另一個模塊接收'my.name'的方法。 –

+0

你可能想把它放在你的問題中。你也可以使用'vars(modulename)'來獲取來自該模塊的變量。 – kindall

0

只適用於**locals()包含。我正在尋找從另一個模塊接收a.class_name的方法。

class a: class_name = "name_class" 
"This is {a.class_name}".format(**locals()) 
0

使用this解決方案來訪問調用者的變量。 然後我有automagical訪問來打印字符串。

def MagicPrint(s, *args, **kwargs): 
    ''' In order for this to work we need the caller's module variables ''' 
    f = sys._getframe(1) 
    try: 
     print (s.format(*args, **f.f_globals)) 
    except: 
     print (s.format(*args, **f.f_locals)) 
    else: 
     pass