本文最后更新于 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))