小编hos*_*ino的帖子

PYTHON:*函数*中的双下划线前缀参数

下面是在builtins.pyi


def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], SupportsLessThan]) -> _T:

Run Code Online (Sandbox Code Playgroud)

我确实知道名称修饰的含义,并且知道名称修饰将影响类定义字段中的每个“__xxx”标识符。

所以我有三个问题:

  • 为什么参数“__arg1”“__arg2”使用“__xxx”模式而参数“key”不使用;
  • 函数参数或本例中专门使用的“__xxx”模式的功能和用途是什么;
  • 我觉得很难找到名称修改的实现,你能告诉我它在 cpython 源代码中的位置吗?

非常感谢。

进一步的工作:

def wat1(__a):
    def wat2(__b):
        return __b, __a
    return __a

print(wat1.__code__.co_varnames)
print(wat1.__code__.co_cellvars)
dis.dis(wat1)
Run Code Online (Sandbox Code Playgroud)

输出(linux python==3.10.8):

('__a', 'wat2')
('__a',)

21           0 LOAD_FAST                0 (__a)
              2 RETURN_VALUE

22           0 LOAD_FAST                0 (__b)
              2 LOAD_DEREF               0 (__a)
              4 BUILD_TUPLE              2
              6 RETURN_VALUE


Run Code Online (Sandbox Code Playgroud)

python cpython

4
推荐指数
1
解决办法
230
查看次数

标签 统计

cpython ×1

python ×1