Python源文件默认以UTF-8编码。在这种编码下,世界上大多数语言的字符可以在字符串,标识符和注释中同时使用 — 尽管标准库中的标识符只使用ASCII字符,它是可移植代码应该遵循的一个惯例。为了能够正确显示所有的这些字符,你的编辑器必须能够识别文件是UTF-8编码,且必须使用支持文件中所有字符的字体。
当然,也可以给源文件指定一个不同的编码。方法是在 #! 行的后面再增加一行特殊的注释来定义源文件的编码:
# -*- coding: encoding -*-
如果你只打印range,会出现奇怪的结果:
>>> print(range(10)) range(0, 10)
range()返回的对象的行为在很多方面很像一个列表,但实际上它并不是列表。当你迭代它的时候它会依次返回期望序列的元素,但是它不会真正产生一个列表,因此可以节省空间。
我们把这样的对象称为可迭代的,也就是说,它们适合作为期望连续获得元素直到穷尽的函数和构造器的目标。我们已经看到for语句是这样的一个迭代器。list()函数是另外一个;它从可迭代对象创建列表。可以想象,list()函数迫使可迭代对象将所有元素一次性生成为list型。
>>> list(range(5)) [0, 1, 2, 3, 4]
循环语句while/for可以有一个 else 子句;当循环是因为迭代完整个列表( for 语句)或者循环条件不成立(while 语句)终止,即正常终止,而非由break 语句终止时,else子句将被执行。下面循环搜索质数的代码例示了这一点:
1 >>> for n in range(2, 10): 2 ... for x in range(2, n): 3 ... if n % x == 0: 4 ... print(n, ‘equals‘, x, ‘*‘, n//x) 5 ... break 6 ... else: 7 ... # loop fell through without finding a factor 8 ... print(n, ‘is a prime number‘) 9 ... 10 2 is a prime number 11 3 is a prime number 12 4 equals 2 * 2 13 5 is a prime number 14 6 equals 2 * 3 15 7 is a prime number 16 8 equals 2 * 4 17 9 equals 3 * 3
是的,这是正确的代码。看仔细:else子句属于for 循环,不属于 if 语句。
时间: 2025-01-02 05:08:14