Python 小芝士

本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。

open function

open(int)

在 Python 中,open(0)是打开标准输入(stdin)的一种方式。这里的 0 是文件描述符,代表标准输入。同样,1 和 2 分别代表标准输出(stdout)和标准错误(stderr)。

[*open(0)]是将标准输入的每一行作为列表的元素。这样,你就可以像处理普通的 Python 列表一样处理输入的每一行。

在下面段代码中,for 循环表示从标准输入读取每一行(跳过第一行),并将每一行作为字符串 s 处理。这通常用于处理多个测试用例,其中第一行通常是测试用例的数量。

python
for s in [*open(0)][1:]:
    print(s)

list

add

p += i,是将元素 i 添加到列表 p 的末尾。这里的,是创建一个只有一个元素的元组,所以 i,实际上是一个只有一个元素的元组。这样,p += i,就等价于 p.append(i)。

python
a = []
a += 1,

Call by sharing

共享传参指函数的各个形式参数获得实参中各个引用的副本。也就是说,函数内部的形参是实参的别名。

可变默认值导致的幽灵 BUS,所以通常使用 None 作为接收可变值的参数的默认值。

Source: 《流畅的 Python》 8.4.1

Warning: 不要使用可变类型作为参数的默认值,比如列表、字典等。

bash
>>> def f(a, b):
... a += b
... return a
...
>>> x = 1
>>> y = 2
>>> f(x, y)
3
>>> x, y
(1, 2)
>>> a = [1, 2]
>>> b = [3, 4]
>>> f(a, b)
[1, 2, 3, 4]
>>> a, b
([1, 2, 3, 4], [3, 4])
>>> t = (10, 20)
>>> u = (30, 40)
>>> f(t, u)
(10, 20, 30, 40)
>>> t, u
((10, 20), (30, 40))
从零开始使用 jupyter
Calculation 小芝士