如何使用 python 访问在其他函数中创建的 kwargs?
How to access kwargs created in an other function using python?
我正在研究具有很多功能的大型有限元分析代码。为了在不同函数之间传递变量,我使用了 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
如果有人能解决我的问题,那将是非常有帮助的。提前致谢!
当您在调用表达式中使用 **kwargs
语法时,Python 会扩展字典并传入单独的参数。函数签名中的相同语法然后告诉 Python 在该函数中创建一个 new 字典以捕获关键字参数。
换句话说,main()
中的 kwargs
与 functionA()
中的字典不同。
要么传入实际字典(不使用 **kwargs
语法),要么有 functionA()
return 一个 new 字典。
将 kwargs
作为单个参数传入,您可以更改 functionA()
中的字典并查看 main()
中反映的更改,因为它们现在共享对同一字典的引用:
def main(**kwargs):
functionA(kwargs, textNew="text added in new")
# ... etc ...
def functionA(mapping, **kwargs):
# do something with mapping, it is the same dictionary as kwargs in main
从 functionA()
返回更新后的 kwargs
字典需要您将新对象分配回 main()
中的 kwargs
:
def main(**kwargs):
kwargs = functionA(textNew="text added in new", **kwargs)
# ... etc ...
def functionA(**kwargs):
# ...
return kwargs
我正在研究具有很多功能的大型有限元分析代码。为了在不同函数之间传递变量,我使用了 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
如果有人能解决我的问题,那将是非常有帮助的。提前致谢!
当您在调用表达式中使用 **kwargs
语法时,Python 会扩展字典并传入单独的参数。函数签名中的相同语法然后告诉 Python 在该函数中创建一个 new 字典以捕获关键字参数。
换句话说,main()
中的 kwargs
与 functionA()
中的字典不同。
要么传入实际字典(不使用 **kwargs
语法),要么有 functionA()
return 一个 new 字典。
将 kwargs
作为单个参数传入,您可以更改 functionA()
中的字典并查看 main()
中反映的更改,因为它们现在共享对同一字典的引用:
def main(**kwargs):
functionA(kwargs, textNew="text added in new")
# ... etc ...
def functionA(mapping, **kwargs):
# do something with mapping, it is the same dictionary as kwargs in main
从 functionA()
返回更新后的 kwargs
字典需要您将新对象分配回 main()
中的 kwargs
:
def main(**kwargs):
kwargs = functionA(textNew="text added in new", **kwargs)
# ... etc ...
def functionA(**kwargs):
# ...
return kwargs