在下面的方法定义,什么是*和**为做param2?
def foo(param1, *param2):
def bar(param1, **param2):
Run Code Online (Sandbox Code Playgroud) python syntax parameter-passing variadic-functions argument-unpacking
*在C中具有特殊含义,就像在C中一样吗?我在Python Cookbook中看到了这样的函数:
def get(self, *a, **kw)
Run Code Online (Sandbox Code Playgroud)
您能否向我解释或指出我能在哪里找到答案(Google将*解释为外卡字符,因此我找不到满意的答案).
非常感谢你.
在Python中,您可能有一个函数定义:
def info(object, spacing=10, collapse=1)
Run Code Online (Sandbox Code Playgroud)
可以通过以下任何一种方式调用:
info(odbchelper)
info(odbchelper, 12)
info(odbchelper, collapse=0)
info(spacing=15, object=odbchelper)
Run Code Online (Sandbox Code Playgroud)
感谢Python允许任意顺序参数,只要它们被命名.
我们遇到的问题是我们的一些较大的功能增长,人们可能会之间添加参数spacing和collapse,这意味着错误的值可以将未命名的参数.此外,有时候我们并不总是清楚需要注意什么.我们正在采用一种方法强迫人们命名某些参数 - 不仅仅是编码标准,而且理想情况下是标志或pydev插件?
所以在上面的4个例子中,只有最后一个会通过检查,因为所有参数都被命名.
赔率是我们只会为某些功能打开它,但任何关于如何实现这一点的建议 - 或者如果它甚至可能会被赞赏.
在下面的函数定义中,*和/代表什么?
def func(self, param1, param2, /, param3, *, param4, param5):
print(param1, param2, param3, param4, param5)
Run Code Online (Sandbox Code Playgroud)
注意:不要误认为 *args | 中的单|双星号 **kwargs(在这里解决)
python function parameter-passing function-parameter python-3.x
在以交互方式返回的签名中help(foo),是什么意思/?
In [37]: help(object.__eq__)
Help on wrapper_descriptor:
__eq__(self, value, /)
Return self==value.
In [55]: help(object.__init__)
Help on wrapper_descriptor:
__init__(self, /, *args, **kwargs)
Initialize self. See help(type(self)) for accurate signature.
Run Code Online (Sandbox Code Playgroud)
我认为它可能与仅关键字参数有关,但事实并非如此.当我使用仅关键字参数创建自己的函数时,位置和仅关键字参数由*(按预期)分隔,而不是由/.什么/意思?
没有标识符的单个*在Python函数参数中意味着什么?这是一个适用于Python3.2的示例:
class Shape:
def __init__(self, *, shapename, **kwds):
self.shapename = shapename
super().__init__(**kwds)
Run Code Online (Sandbox Code Playgroud)
对我来说,自我之后的明星很奇怪.
我在这里找到了它(从第46行开始):http: //code.activestate.com/recipes/577720-how-to-use-super-effectively/
我已经看到了这个问题(这不是重复的):Python在函数参数中显示星号
在python-3.x中你可以*为函数参数添加一个裸,这意味着(引自docs):
"*"或"*identifier"之后的参数是仅关键字参数,并且只能传递使用的关键字参数.
好的,我已经定义了一个函数:
>>> def f(a, b, *, c=1, d=2, e=3):
... print('Hello, world!')
...
Run Code Online (Sandbox Code Playgroud)
我可以通过c,d而e变量值只能通过指定关键字:
>>> f(1, 2, 10, 20, 30)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 5 were given
>>> f(1, 2, c=10, d=20, e=30)
Hello, world!
Run Code Online (Sandbox Code Playgroud)
问题是:
一些"真实世界"的例子会有很大帮助.提前致谢.
我正在浏览这个代码文件,然后我找到了这个类:
class StreamPlaylistEntry(BasePlaylistEntry):
def __init__(self, playlist, url, title, *, destination=None, **meta):
super().__init__()
Run Code Online (Sandbox Code Playgroud)
我知道参数前面的星号表示它是任意数量参数的列表,但星号本身是什么意思?
*以下代码(在pprint库中找到)的含义是什么?
def pformat(object, indent=1, width=80, depth=None, *, compact=False):
"""Format a Python object into a pretty-printed representation."""
return PrettyPrinter(indent=indent, width=width, depth=depth,
compact=compact).pformat(object)
Run Code Online (Sandbox Code Playgroud)
如果是*args那么它将是任意数量的位置参数.参数值将在名为的元组中args.前4个参数可以按名称或按位置compact分配,参数只能按名称分配...
好吧,不!因为它不符合文档:
在函数调用中,关键字参数必须遵循位置参数.
那么,明星在其他命名参数之前和之后做了什么?那是怎么用的?或者为什么不使用它?
在Python 3.8 Programming FAQ 中,我看到了以下函数定义:
class callByRef:
def __init__(self, /, **args):
for key, value in args.items():
setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)
这在Python 3.7 版本中缺失:
class callByRef:
def __init__(self, **args):
for (key, value) in args.items():
setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)
这是什么新/语法?
它与/出现在help()输出中有什么关系?
注意:this和this question 是关于help() annotation,而 this question 是关于新语法和help()注释的任何差异。
python ×10
function ×4
arguments ×3
python-3.x ×3
syntax ×2
coding-style ×1
inspection ×1
parameters ×1