极限的 Python
in python翻译 with 0 comment

极限的 Python

in python翻译 with 0 comment

0. 前言

这篇文章旨在记录 Python 中各类极限情况,这种情况在正常编码中几乎不会出现。但十分有趣。谨以此文记录。

1. map() 函数

Python 对于函数式编程提供了很好的实现。令人惊讶的是,仅仅采用几个函数(map(),reduce(),filter())和算子(lambda)就基本上可以实现任意Python程序。

map()函数接受两个参数,第一个是函数,第二个是一个可迭代对象(列表,元组等)。这个函数的功能很简单,会将可迭代对象的每一个元素作为参数传入第一个函数中。依次执行后,其返回的结果组成一个新的 list 对象返回。也就是说,返回结果永远是第一个函数执行结果的 list。

假如第一个函数式 None,传入一个 list 会有什么结果?

map(None, [1, 2, 3, 4])

在 Python2 中,会返回原先的第二个参数。

zVHit.png

而在 Python3 中,会返回一个 map 对象(迭代器)。

zVbJP.png

产生不一样结果的原因是 Python3 中对 map 的运算结果进行了延迟计算。其官方描述为:

Wraps map() in a list call. It also changes map(None, x) to list(x). Using from future_builtins import map disables this fixer.

2. Python 中的最大数

原文传送门
这个问题的准确的描述应该是 Maximum and Minimum values for ints in Python
在 Python2中sys 模块存储了这一常量。

$ python -c 'import sys;print sys.maxint'
9223372036854775807

当然也可以用-sys.maxint - 1来计算最小值。

$ python -c 'import sys;print -sys.maxint - 1'
-9223372036854775808

但是,如果数字超过了 sys.maxint,Python 会将它转换为长整型:

>>> import sys
>>> type(sys.maxint)
<type 'int'>
>>> type(sys.maxint+1)
<type 'long'>
>>>

但是在 Python3 中,超过 maxint 却不受影响:

In [1]: 9223372036854775807+1
Out[1]: 9223372036854775808

In [2]: type(9223372036854775807+1)
Out[2]: int
Responses