簡體   English   中英

在Python中從命名空間對象導入變量

[英]Importing variables from a namespace object in Python

假設我有一個名稱空間args ,我從調用parser.parse_args()獲得,它解析命令行參數。

如何將此命名空間中的所有變量導入到當前命名空間?

例如

parser.add_argument('-p', '--some_parameter', default=1)

args = parser.parse_args()

# ... code to load all variables defined in the namespace args ...

print some_parameter

我當然可以這樣做:

some_parameter = args.some_parameter

但如果我有大量的參數,我需要為每個參數提供一條這樣的線。

是否有另一種從命名空間導入變量的方法,而不必逐個瀏覽它們?

PSfrom args import *不起作用。

PS2 :我知道這是一個不好的做法,但這在一些極端情況下會有所幫助,例如我們在非常快速地對代碼進行原型設計和測試時。

使用vars()函數的結果更新本地命名空間:

globals().update(vars(args))

這通常不是一個好主意; 將這些屬性保留在命名空間中。

您可以創建比使用此方法解決的問題更多的問題,特別是如果您不小心配置了具有影響您關注的內置或本地的dest名稱的參數,例如listprint或其他內容。 玩得開心追捕那個蟲子!

蒂姆彼得斯已經在他的禪宗Python中說明了這一點:

命名空間是一個很棒的主意 - 讓我們做更多的事情吧!

可能是有史以來最糟糕的想法:因為您可以將任意對象傳遞給parse_args() ,傳遞__builtins__模塊,以便可以將所有屬性都查找為局部變量。

p = argparse.ArgumentParser()
p.add_argument("--foo")
p.parse_args( "--foo bar".split(), __builtins__)
print foo

對於目標不是有效Python標識符的參數,這甚至可以“工作”:

# To use the example given by Francis Avila in his comment on Martijn Pieters' answer
getattr(__builtins__, '2my-param')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM