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') 的值分别为 和 。