Python 内置函数的精彩源代码之旅242


Python 拥有丰富的内置函数库,为程序员提供了一系列强大且通用的工具来处理各种任务。本指南将深入探讨这些函数的源代码,揭示它们的内部工作原理,并展示如何利用它们来写出高效、可读的代码。

abs()

abs() 函数返回数字的绝对值,它通过检查数字的符号并取其正值来实现。源代码如下:```python
def abs(number: int) -> int:
if number < 0:
return -number
return number
```

len()

len() 函数获取序列(如列表、元组或字符串)中的元素数量。它使用一个简单的循环来遍历序列并累加元素数。```python
def len(sequence: Sequence) -> int:
count = 0
for _ in sequence: # 使用 Python 中的丢弃变量 _
count += 1
return count
```

max()

max() 函数返回序列中最大的元素。它使用 * 参数来处理可变数量的参数,并将它们与 key 函数一起传递,该函数允许根据自定义比较进行排序。```python
def max(*args, key=None) -> object:
if key is None:
return _max(*args)
return _apply_key(max, args, key)
```

min()

min() 函数与 max() 类似,但返回序列中的最小元素。它也使用 * 参数和 key 函数进行排序。```python
def min(*args, key=None) -> object:
if key is None:
return _min(*args)
return _apply_key(min, args, key)
```

sum()

sum() 函数计算序列中元素的总和。它使用 for 循环将元素逐个累加到一个运行总和中。```python
def sum(iterable: Iterable, /, start: int = 0) -> int:
tot = start
for elem in iterable:
tot += elem
return tot
```

enumerate()

enumerate() 函数生成一个枚举对象,它将序列中的每个元素与一个从零开始的计数器配对。这对于需要跟踪元素索引的迭代非常有用。```python
def enumerate(iterable: Iterable, start: int = 0) -> Iterator[Tuple[int, object]]:
count = start
for elem in iterable:
yield count, elem
count += 1
```

zip()

zip() 函数将多个序列打包为元组组成的元组序列。它通过遍历序列并从每个序列中提取一个元素来创建元组。```python
def zip(*iterables: Iterable) -> Iterator[Tuple[object, ...]]:
shortest = min(iterables, key=len)
iterators = [iter(iterable) for iterable in iterables]
while True:
values = [next(it) for it in iterators]
if values[-1] is None:
return
yield tuple(values)
```

reversed()

reversed() 函数返回一个反向迭代器,它从序列的结尾开始反向遍历元素。它使用一个循环来访问元素,并在每次迭代中递减计数器。```python
def reversed(sequence: Sequence) -> Iterator[object]:
i = len(sequence)
while i > 0:
i -= 1
yield sequence[i]
```

sorted()

sorted() 函数对序列中的元素进行排序并返回一个排序后的列表。它使用归并排序算法,并允许通过 key 函数指定自定义排序。```python
def sorted(iterable: Iterable, *, key=None, reverse=False) -> List[object]:
result = list(iterable)
(key=key, reverse=reverse)
return result
```

all()

all() 函数检查序列中的所有元素是否为真。它使用布尔“与”运算符来逐个检查元素,如果所有元素都为真,则返回 True。```python
def all(iterable: Iterable) -> bool:
for elem in iterable:
if not elem:
return False
return True
```

any()

any() 函数检查序列中的任何元素是否为真。它使用布尔“或”运算符来逐个检查元素,如果任何元素为真,则返回 True。```python
def any(iterable: Iterable) -> bool:
for elem in iterable:
if elem:
return True
return False
```

filter()

filter() 函数从序列中过滤元素,仅返回满足给定条件的元素。它使用一个生成器表达式来遍历序列并根据 predicate 函数的结果来选择元素。```python
def filter(predicate: Callable[[object], bool], iterable: Iterable) -> Iterator[object]:
for elem in iterable:
if predicate(elem):
yield elem
```

map()

map() 函数将序列中的每个元素转换并返回一个生成器,其中包含转换后的元素。它使用一个生成器表达式来遍历序列并根据 function 函数对每个元素应用转换。```python
def map(function: Callable[[object], object], iterable: Iterable) -> Iterator[object]:
for elem in iterable:
yield function(elem)
```

reduce()

reduce() 函数将序列中所有元素累积为一个单一值。它使用指定的 function 函数将两个元素折叠在一起,直到序列中只有一个元素为止。```python
def reduce(function: Callable[[object, object], object], iterable: Iterable, initial=None) -> object:
it = iter(iterable)
if initial is None:
value = next(it)
else:
value = initial
for elem in it:
value = function(value, elem)
return value
```

深入理解 Python 内置函数

探索内置函数的源代码揭示了 Python 内部工作的复杂性。通过理解函数如何实现它们的逻辑,程序员可以编写出更有效率、更健壮的代码。此外,它可以增强对 Python 语言底层的欣赏,并为进一步学习和自定义语言打开大门。

2024-10-19


上一篇:Python 代码风格指南

下一篇:Python 数据库编程指南