如何在Python中自動解析格式說明符? 例如,而不是:在Python中模擬C宏
MagicPrint(str.format('This is {}', my.name))
我想寫MagicPrint()函數如下:
MagicPrint('This is {my.name}')
建議?也許我可以使用裝飾器MagicPrint()
函數? 請注意,由於MagicPrint()
可以從另一個模塊調用,因此my.name
不存在於**locals()
中。
如何在Python中自動解析格式說明符? 例如,而不是:在Python中模擬C宏
MagicPrint(str.format('This is {}', my.name))
我想寫MagicPrint()函數如下:
MagicPrint('This is {my.name}')
建議?也許我可以使用裝飾器MagicPrint()
函數? 請注意,由於MagicPrint()
可以從另一個模塊調用,因此my.name
不存在於**locals()
中。
class my: name = "Jerry"
"This is {my.name}".format(**locals())
這隻有在\ ** locals()包含my.name變量時纔有效。我正在尋找從另一個模塊接收'my.name'的方法。 –
你可能想把它放在你的問題中。你也可以使用'vars(modulename)'來獲取來自該模塊的變量。 – kindall
只適用於**locals()
包含。我正在尋找從另一個模塊接收a.class_name
的方法。
class a: class_name = "name_class"
"This is {a.class_name}".format(**locals())
使用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
它是不可能的!實際上[有兩種方法可以將變量放在字符串中](https://docs.python.org/2/library/string.html#formatstrings)1.是'format'和2.使用'%'符號.' '這是%s'%my.name' – Kasramvd