2016-02-17 90 views
2

Python包含内置的max()函数。但是,尽管内置它并不是关键字。也就是说,你可以做max=4。这是有道理的,因为最大的东西出现了很多。但!如果你使用max作为变量,那么它禁止在该范围内使用max函数。当你有一个名为max的变量时使用Python的max函数?

所以,如果你这样做:

max = 4 
max(1, 2) 

您将获得int object not callable错误。再次,是有道理的。但有没有什么方法可以指定你想要的最大功能?像std.max()?这也适用于所有其他内置函数。

+4

不要在Python builtins,period之后命名变量。 – Will

+1

@我知道你在说什么,但在可读性方面,'min'和'max'的名字很棒。因此,有时您可能会创建内部命名冲突,以便您的API易于使用。 –

+0

使用更具描述性的名称会更好。例如,如果您有一个名为'things'的列表,请使用'max_thing'。 – Barmar

回答

5

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

>>> import __builtin__ 
>>> 
>>> __builtin__.max is max 
True 
>>> 
>>> max = 2 
>>> __builtin__.max([0, max]) 
2 
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 

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

在Python 3名称的改变是the "core languages" changes described in PEP 3100部分:

为了摆脱__builtin____builtins__之间的混乱,因此决定重新命名__builtin__(模块)来builtins,和单独离开__builtins__(沙箱钩)。

+0

模块的名称在Python 2和Python 3之间改变了吗?有趣。 –

+1

然后你可以做'__builtins __。max = 2'真的会引起麻烦! – tdelaney