【发布时间】:2015-06-25 14:38:44
【问题描述】:
我正在编写具有很多功能的大型有限元分析代码。为了在不同的函数之间传递变量,我使用了 python 的 kwargs。我主要选择了这个,以便我可以以多种不同的方式调用函数,从而创造出极大的灵活性。
但是现在我正在处理一个问题。从一个主函数中,我使用 kwargs 调用另一个函数。然后,第二个函数处理输入并添加新的 kwargs。问题是在该函数中创建的新 kwargs 在第一个函数中是不可访问的。有没有这样做的pythonic方式?我创建了以下代码作为示例:
# Create main function
def main(**kwargs):
# Add a key word argument
kwargs["textMain"] = "text added in main"
# Call a function with existing kwargs and a new one
functionA(textNew = "text added in new" ,**kwargs)
# Test what is in kwargs after subfunction is called
print("\nTest kwargs after subfunction is called:")
if "textMain" in kwargs:
print(kwargs["textMain"])
if "textNew" in kwargs:
print(kwargs["textNew"])
if "textA" in kwargs:
print(kwargs["textA"])
def functionA(**kwargs):
# Test kwargs before adding kwargs in subfunction
print("\nTest kwargs in subfunction before adding:")
if "textMain" in kwargs:
print(kwargs["textMain"])
if "textNew" in kwargs:
print(kwargs["textNew"])
if "textA" in kwargs:
print(kwargs["textA"])
# Add kwargs
kwargs["textA"] = "text added in sub A"
# and test kwargs again
print("\nTest kwargs in subfunction after adding:")
if "textMain" in kwargs:
print(kwargs["textMain"])
if "textNew" in kwargs:
print(kwargs["textNew"])
if "textA" in kwargs:
print(kwargs["textA"])
if __name__ == "__main__":
main()
这会产生以下输出:
#Test kwargs in subfunction before adding:
#text added in main
#text added in new
#Test kwargs in subfunction after adding:
#text added in main
#text added in new
#text added in sub A
#Test kwargs after subfunction is called:
#text added in main
我最喜欢的输出是:
#Test kwargs in subfunction before adding:
#text added in main
#text added in new
#Test kwargs in subfunction after adding:
#text added in main
#text added in new
#text added in sub A
#Test kwargs after subfunction is called:
#text added in main
#text added in new
#text added in sub A
如果有人能解决我的问题,那将是非常有帮助的。提前致谢!
【问题讨论】:
-
你的例子感觉有点臃肿,你确定不能再短一点吗?
标签: python function python-3.x keyword-argument