在初始化 class 时,我如何知道 **kwargs 参数中存储了哪些参数?
How do I know what arguments are stored in the **kwargs parameter when initalizing a class?
我最近开始在 Python 中编码,我对 **kwargs 参数和 class 初始化有疑问。
在下面的class实例化和init方法的情况下,我怎么知道**kwargs中存储了什么?在这种情况下,'net' 是包含不同键的 python 字典。这些键是否加载到 **kwargs 参数中?此外,如果我尝试在 init 方法中打印 **kwargs,它不会向 python 控制台输出任何打印,这是为什么?我不允许在 init 方法中打印吗?
谢谢。
''' instantiation '''
sf = op.algorithms.StokesFlow(network=net, phase=water)
''' __init__ method of the StokesFlow class '''
def __init__(self, settings={}, phase=None, **kwargs):
def_set = {'phase': None,
'quantity': 'pore.pressure',
'conductance': 'throat.hydraulic_conductance',
'gui': {'setup': {'phase': None,
'quantity': '',
'conductance': ''},
'set_rate_BC': {'pores': None,
'values': None},
'set_value_BC': {'pores': None,
'values': None},
'set_source': {'pores': None,
'propname': ''}
}
}
print("kwargs:", **kwargs)
super().__init__(**kwargs)
self.settings.update(def_set)
self.settings.update(settings)
if phase is not None:
self.setup(phase=phase)
一些解释:
- Use of *args and **kwargs
- https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/
kwargs 是一个命令。 Kwargs 捕获未在函数签名中单独指定的命名参数。 **
表示字典正在解压。 (Explanation on unpacking is here)
你什么也得不到,因为你可能没有向那个函数传递任何东西。
def fun1(**kwargs):
print(kwargs)
fun1()
-> 打印 {}
fun1(1)
-> 错误,TypeError: fun1() takes 0 positional arguments but 1 was given
fun1(a=1)
-> {'a': 1}
当您像在代码中那样执行 print(**kwargs)
时会发生什么?
第一个示例不会打印任何内容(空字典解压为空):print(**{})
== print()
。
最后一个例子会中断。因为 print(**{'a': 1})
== print(a=1)
并且打印不喜欢那样的东西
我最近开始在 Python 中编码,我对 **kwargs 参数和 class 初始化有疑问。
在下面的class实例化和init方法的情况下,我怎么知道**kwargs中存储了什么?在这种情况下,'net' 是包含不同键的 python 字典。这些键是否加载到 **kwargs 参数中?此外,如果我尝试在 init 方法中打印 **kwargs,它不会向 python 控制台输出任何打印,这是为什么?我不允许在 init 方法中打印吗?
谢谢。
''' instantiation '''
sf = op.algorithms.StokesFlow(network=net, phase=water)
''' __init__ method of the StokesFlow class '''
def __init__(self, settings={}, phase=None, **kwargs):
def_set = {'phase': None,
'quantity': 'pore.pressure',
'conductance': 'throat.hydraulic_conductance',
'gui': {'setup': {'phase': None,
'quantity': '',
'conductance': ''},
'set_rate_BC': {'pores': None,
'values': None},
'set_value_BC': {'pores': None,
'values': None},
'set_source': {'pores': None,
'propname': ''}
}
}
print("kwargs:", **kwargs)
super().__init__(**kwargs)
self.settings.update(def_set)
self.settings.update(settings)
if phase is not None:
self.setup(phase=phase)
一些解释:
- Use of *args and **kwargs
- https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/
kwargs 是一个命令。 Kwargs 捕获未在函数签名中单独指定的命名参数。 **
表示字典正在解压。 (Explanation on unpacking is here)
你什么也得不到,因为你可能没有向那个函数传递任何东西。
def fun1(**kwargs):
print(kwargs)
fun1()
-> 打印 {}
fun1(1)
-> 错误,TypeError: fun1() takes 0 positional arguments but 1 was given
fun1(a=1)
-> {'a': 1}
当您像在代码中那样执行 print(**kwargs)
时会发生什么?
第一个示例不会打印任何内容(空字典解压为空):print(**{})
== print()
。
最后一个例子会中断。因为 print(**{'a': 1})
== print(a=1)
并且打印不喜欢那样的东西