Python文档中os.removexattr的解释 -- '*' (星号)参数代表什么意思?

5 浏览
0 Comments

Python文档中os.removexattr的解释 -- '*' (星号)参数代表什么意思?

我的第一个问题,请温柔一点。我搜索了但是无法在这里或其他地方找到答案。

请注意,这个问题不适用于类似*args的参数拆包。

在Python 3.3的os.removexattr文档中,如下所述:

os.removexattr(path, attribute, *, follow_symlinks=True)
    从路径中删除扩展的文件系统属性attribute。
    attribute应该是bytes或str类型。如果是字符串,将使用文件系统编码进行编码。
    此函数可以支持指定文件描述符并且不跟随符号链接。

请注意,第三个参数是一个星号:*

我假设这意味着“指定一个属性或用逗号分隔的多个属性”,但是当我尝试这样做时,出现了异常:

import os
os.removexattr('M7-AAE-01.jpg', 'user.camera_brand', 'user.camera_model')
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: 函数最多接受2个位置参数(给出了3个)

我还尝试提供一个参数列表,但也不起作用。

在这种情况下,星号参数具体是什么意思?

谢谢。

0
0 Comments

在Python文档中,当我们看到函数定义中使用了单个星号*时,它表示强制使用命名参数。这意味着如果要为follow_symlinks传递一个值,我们必须使用参数名进行传递。

这样做的目的是为了避免在函数调用中使用类似foo(True, False, False)的形式,让人不知道这些值的含义。

感谢你的答案。我查看了几个Python文档的例子,发现星号*参数总是用在命名参数之前,所以这绝对是正确的答案。不过我必须说,这有点令人困惑,因为星号看起来像是某种“魔法”参数。实际上,我们应该将其解释为“星号参数表示此后的参数都是命名参数”。类似这样的解释...

好吧,看起来你的观察并不普遍;例如os.utime(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)。或者在这里ns也是一个关键字参数吗?

根据Python参考文档(docs.python.org/3/reference/…)的说明:在“*”或“*identifier”之后的参数是只能通过关键字参数传递的参数。

0