Python 的语法简洁而易懂,也有许多官方和第三方文档与教程。这里仅介绍一些对 OIer 比较实用的语言特性,你可以在 Python 文档 和 Python Wiki 等网页上了解更多关于 Python 的教程。
注释
加入注释并不会对代码的运行产生影响,但加入注释可以使代码更加易懂易用。
# 用 # 字符开头的是单行注释
"""
跨多行字符串会用三引号(即三
个单引号或三个双引号)包裹,
但也通常被用于注释
"""
加入注释代码并不会对代码产生影响。我们鼓励加入注释来使代码更加易懂易用。
基本数据类型
一切皆对象
在 Python 中,你无需事先声明变量名及其类型,直接赋值即可创建各种类型的变量:
>>> x = -3 # 语句结尾不用加分号
>>> x
-3
>>> f = 3.1415926535897932384626; f # 实在想加分号也可以,这里节省了一行
3.141592653589793
>>> s1 = "O"
>>> s1 # 怎么显示成单引号了?有区别吗?
'O'
>>> b = 'A' == 65 # 明明在 C/C++ 中是成立的
>>> b # 与众不同的是 True, False 首字母均大写,可能与内置常量的命名约定有关
False
>>> True + 1 == 2 and not False != 0 # Python 可能喜欢单词胜过符号
True
但这不代表 Python 没有类型的概念,实际上解释器会根据赋值或运算自动推断变量类型,你可以使用内置函数 type()
查看这些变量的类型:
>>> type(x)
<class 'int'>
>>> type(f)
<class 'float'>
>>> type(s1) # 请注意,不要给字符串起名为 str,不信试试看是否真的可以这么做
<class 'str'>
>>> type(b)
<class 'bool'>
内置函数 是什么?
在 C/C++ 中,很多常用函数都分散在不同的头文件中,但 Python 的解释器内置了许多实用且通用的函数,你可以直接使用而无需注意它们的存在,但这也带来了小问题,这些内置函数的名称多为常见单词,你需要注意避免给自己的变量起相同的名字,否则可能会产生奇怪的结果。
正如我们所看到的,Python 内置有整数、浮点数、字符串和布尔类型,可以类比为 C++ 中的 int
,float
,string
和 bool
。但有一些明显的不同之处,比如没有 char
字符类型,也没有 double
类型(但 float
其实对应 C 中的双精度),如果需要更精确的浮点运算,可以使用标准库中的 decimal 模块,如果需要用到复数,Python 还内置了 complex
类型(而这也意味着最好不要给变量起名为 complex
)。 可以看到这些类型都以 class
开头,而这正是 Python 不同于 C++ 的关键之处,Python 程序中的所有数据都是由对象或对象间关系来表示的,函数是对象,类型本身也是对象:
>>> type(int)
<class 'type'>
>>> type(pow) # 求幂次的内置函数,后文会介绍
<class 'builtin_function_or_method'>
>>> type(type) # type() 也是内置函数,但有些特殊,感兴趣可自行查阅
<class 'type'>
你或许会觉得这些概念一时难以理解且没有用处,所以我们暂时不再深入,在后文的示例中你或许能慢慢体会到,Python 的对象提供了强大的方法,我们在编程时应当优先考虑围绕对象而不是过程进行操作,这会让我们的代码显得更加紧凑明晰。
数字运算
有人说,你可以把你系统里装的 Python 当作一个多用计算器,这是事实。
在交互模式下,你可以在提示符 >>>
后面输入一个表达式,就像其他大部分语言(如 C++)一样使用运算符 +
、-
、*
、/
、%
来对数字进行运算,也可以使用 ()
来进行符合结合律的分组,读者可以自行试验,在这里我们仅展示与 C++ 差异较大的部分:
>>> 5.0 * 6 # 浮点数的运算结果是浮点数
30.0
>>> 15 / 3 # 与 C/C++ 不同,除法永远返回浮点 float 类型
5.0
>>> 5 / 100000 # 位数太多,结果显示成科学计数法形式
5e-05
>>> 5 // 3 # 使用整数除法(地板除)则会向下取整,输出整数类型
1
>>> -5 // 3 # 符合向下取整原则,注意这与 C/C++ 不同
-2
>>> 5 % 3 # 取模
2
>>> -5 % 3 # 负数取模结果一定是非负数,这点也与 C/C++ 不同,不过都满足 (a//b)*b+(a%b)==a
1
>>> x = abs(-1e4) # 求绝对值的内置函数
>>> x += 1 # 没有自增/自减运算符
>>> x # 科学计数法默认为 float
10001.0
在上面的实践中可以发现,除法运算(/
)永远返回浮点类型(在 Python 2 中返回整数)。如果你想要整数或向下取整的结果的话,可以使用整数除法(//
)。同样的,你也可以像 C++ 中一样,使用模(%
)来计算余数,科学计数法的形式也相同。
特别地,Python 用 **
即可进行幂运算,还通过内置的 pow(a, b, mod)
提供了 快速幂 的高效实现。
Python 的字符串类型包含 Unicode 字符,这意味着任何字符串都会存储为 Unicode。2在 Python 中,可以对一个 Unicode 字符使用内置函数 ord()
将其转换为对应的 Unicode 编码,逆向的转换使用内置函数 chr()
。
如果想把数转换为对应的字符串,可使用 Python 内置函数 str()
,也可以使用 f-string 实现;反之,可以使用 int()
和 float()
两个函数。
Python 的字符串类型还有 许多方便的功能。由于本文篇幅有限,这里不一一介绍。
数据类型判断
对于一个变量,可以使用 type(object)
返回变量的类型,例如 type(8)
和 type('a')
的值分别为 <class 'int'>
和 <class 'str'>
。