当你有一个名为max的变量时,使用Python的max函数?

Nic*_*man 2 python scope standard-library built-in

Python包含内置的max()函数.但是,尽管它内置于它不是一个关键字.也就是说,你被允许这样做max=4.这是有道理的,因为最大的东西出现了很多.但!如果使用max作为变量,则禁用该范围中的max函数.

所以,如果你这样做:

max = 4
max(1, 2)
Run Code Online (Sandbox Code Playgroud)

你会得到一个错误int object not callable.再次,有道理.但有没有办法指定你想要max函数?喜欢std.max()?这适用于所有其他内置功能.

小智 5

__builtin__(Python的2)/builtins(Python 3中)模块提供另一种方式来访问所有内置/标准标识符这样的情况下:

>>> import __builtin__
>>>
>>> __builtin__.max is max
True
>>>
>>> max = 2
>>> __builtin__.max([0, max])
2
Run Code Online (Sandbox Code Playgroud)
import __builtin__ as builtins

def random_integer(min, max):
    random_integer.seed = builtins.max(10101, ( # looks random enough, right?
        ((random_integer.seed * 3 - 210) % 9898989) >> 1) ^ 173510713571)
    return min + (random_integer.seed % (max - min + 1))

random_integer.seed = 123456789
Run Code Online (Sandbox Code Playgroud)

大多数应用程序通常不会显式访问此模块,但在提供与内置值同名的对象的模块中可能很有用,但在该模块中也需要该名称的内置.

Python 3中的名称更改是PEP 3100中描述的"核心语言"更改的一部分:

为了摆脱之间的混乱__builtin____builtins__,因此决定重新命名__builtin__(模块)来builtins,并留下__builtins__单独(沙盒钩).

  • 那你就可以做`__builtins__.max = 2`了,真的惹祸了! (2认同)