symbols()
功能
正如其他答案所指出的 - 一种用途**args
in the symbols
是传递关于Symbol
正在被创建。您可以通过的假设列表记录在假设 http://docs.sympy.org/dev/modules/assumptions/index.html页面为支持的谓词 http://docs.sympy.org/dev/modules/assumptions/index.html#supported-predicates.
However,您还应该注意可以传入一些其他特殊的命名参数。
这些都记录在您链接的部分中,并且是:
-
cls=<ClassName>
尽管它的名字如此,symbols() 可以创建类似符号的对象,例如 Function 或 Wild 类的实例。要实现此目的,请将 cls 关键字参数设置为所需的类型:
注意:如果没有指定,则默认Symbol
使用类。
-
seq=<True|False>
文档说:
如果单个符号需要可迭代容器,请设置seq
论证True
或以逗号终止符号名称
代码步行
您注意到您已经浏览了代码 - 因此我将向您展示这些代码在代码中的实现位置。如果您致电symbols() https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L86函数时,它对其参数进行各种检查,包括pop-ing cls and seq https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L86论点来自**args
然后它执行更多检查等,最后调用实例化Symbol
here https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L476, here https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L513 or here https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L515。这些调用了构造函数Symbol
(或其子类通过via传入cls
)与剩下的任何东西**args
都被解释为assumptions在构造函数中。 https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L91- 他们是sanitized here https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L101即非假设或不适用的命名参数是抛出 https://github.com/sympy/sympy/blob/sympy-0.7.6/sympy/core/symbol.py#L86在此刻!
这表明假设 +cls
+ seq
形成可以传入的命名参数集**args
to symbols()
其他功能(一般情况)
我想到symbols()
可能只是作为一个更普遍的问题的代表性例子。我希望以上内容已经让您相信所有可以有效传递的值symbols()
被记录下来。这可能会让您确信 SymPy 中的其他函数也是如此。
然而,在一般情况下,答案是很难向自己证明所有可以作为关键字参数传入的值都在文档中any库或函数。事实上,有时只故意记录一个子集,因为它们是库的“公共 API”,而实际代码可能采用其他参数,但出于某种原因,开发人员不想将它们公开给公众 - 例如因为它们的可用性可能会改变,或者它们的功能未经测试。
If you do传入无效参数,您正在使用的库的行为可能会有所不同。一些库或函数会忽略它们,而另一些库或函数会在您传递无效的关键字参数时抛出错误。
如果您想了解是否是这种情况(并且该库是开源的,例如 SymPy),那么您可以随时深入研究代码(如我在上面的代码步行中所示)。如果你这样做 - 你需要遵循执行路径,寻找出现的情况args.pop()
。如果您关心 SymPy 中的其他函数,请在评论中告诉我 - 但希望这个通用方法对您有用。
我假设您了解上面的内容*args
and **args
句法。如果您不完全清楚 - 这一部分python官方教程 https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments我来处理它。