[英]How to pass a function, list, among others as args to argparse in Python?
[英]When using argparse in Python 2.7, how can I pass more than 'args' into my default function?
我正在嘗試將一些參數傳遞給解析器的默認函數,該函數並非直接來自命令行中的參數。 用戶在cli上提供的參數旨在查詢所需的實際值,因為用戶不一定會重復輸入真實值。
使用argparse,您可以執行以下操作:
parser = argparse.ArgumentParser()
def test_function(args):
print args
Parser.set_defaults(func=test_function)
args = parser.parse_args()
args.func(args)
test_function將在此處成功打印出參數。 注意如何
(func=test_function)
不會傳入任何參數,似乎只是傳入args,在此處添加括號可防止傳入args,因為如果您這樣做,它不會自動推送,並且由於尚未輸入args而無法輸入就Python而言尚未定義。
我也嘗試過
Parser.set_defaults(func=test_function, realValue=lookup_function)
但是,realValue似乎是在對函數本身的引用進行評估,而不是對函數返回的值進行評估(我認為該函數甚至不會執行,因此我不確定這是否會將args傳遞給lookup_function)。
我可能可以從test_function調用lookup函數,但是我想避免這種情況,因為在我的程序中,這兩個函數位於單獨的模塊中,似乎有點...將它們相互導入而不是簡單地將它們都導入都比較麻煩到我的main.py文件中。
有人知道我要做什么嗎? 我需要吸收它並導入跨子模塊嗎?
編輯為了更清楚一點,我想通過argparse的功能將args 和另一個動態值傳遞給test_function。
Parser.set_defaults(func=test_function)
動態值是使用args值之一找到的。 我想知道一種傳遞給test_function或args本身的方法,它是另一個函數返回的新值。
我最終找到了自己的方式,我當時正在尋找一些非常簡單的東西。 由於某種原因,我沒有將這兩個因素結合在一起。
Parser.set_defaults(func=test_function)
args.func(args)
我認為這是argparse模塊中的內置功能,但是它比看起來簡單得多。 我找到了一種方法,可以通過遵循正確的語法(本來會想到的)將新值添加到args中
所以這:
parser = argparse.ArgumentParser()
def test_function(args):
print args
Parser.set_defaults(func=test_function, realValue=lookup_function)
args = parser.parse_args()
args.func(args)
變成這個:
parser = argparse.ArgumentParser()
def test_function(args):
print args
Parser.set_defaults(realValue=lookup_function)
Parser.set_defaults(func=test_function)
args = parser.parse_args()
args.realValue(args)
args.func(args)
對不起,我想這個愚蠢的問題,希望這對以后犯類似錯誤的人有所幫助
這是您僅將args
傳遞給args.func
:
args.func(args)
# ^^^^ this bit!
如果要將其他內容傳遞給args.func
,只需將它們傳遞!
args.func(whatever, the, heck, you, want)
如果希望args.func
接收3
, "fish"
和"sweaters"
args.func
"sweaters"
作為參數,則可以執行以下操作:
args.func(3, "fish", "sweaters")
args.func
會立即阻塞這些參數,因為您編寫它只是希望將名稱空間對象作為參數。 您可以定義它以采用不同的參數:
def test_function(number, animal, garments):
print("I stuffed", number, garments, "into a big rubber", animal, "as an art project.")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.