语言基础
1. 简介
对象是 Python 中最核心的一个概念,Python 与 PowerShell 的理念类似,一切都是对象。一个整数是一个对象,一个字符串是对象,一个类型也是一个对象。在面向对象理论中,Python的类和对象都是通过对象来实现的。
在 Python 中的,已经预先定义了一些内建类型的对象,提供了 Python 的基础数据类型。这些基础数据类型用来描述用户自定义的类的内容。
从 1989 年,Guido 在圣诞节揭开了 Python 的大幕,一直到现在,Python 经历了若干大版本的迭代,但是其实现语言都是 ANSI C。在 Python 中,创建对象的本质就是使用 C 中结构体在堆内存上申请一块内存。一般来说,对象是不能被静态初始化的,并且不能出现在栈空间上。唯一的例外就是类型也是对象的一种,Python 的内建类型都是被静态初始化的。
在 Python 中,一个对象一旦被创建,在内存中的大小就不能发生变化了,这就意味着那些可以变长度的数据需要维护一个指向一块可变大小的内存区域的指针。为什么要设定这样一条特殊的规则呢?因为遵循这样的规则可以让指针的维护工作变得简单。一旦允许对象在运行期可以改变大小,那么就需要维护对象大小变化以后得移动工作和指针重映射工作。
Python 作为一门强类型的动态语言,提供了丰富的抽象表达能力,并且提供了完善的脚本解释器。通过创建 Python 文件或者直接使用脚本解释器运行 Python 代码。当创建 Python 文件的时候需要在文件头部添加必要的描述:
#!/usr/bin/env python3 # -*- coding:utf-8 -*-
第一行指定了 Python 的解释器及其位置,第二行是因为 Python 中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
2. 变量与数制
让我们从 HelloWorld 项目开始:
#!/usr/bin/env python3 # -*- coding:utf-8 -*- if __name__ == "__main__": print("HelloWorld")
然后在命令行终端中执行:
python3 app.py
在 Python 中使用如下方式创建一个变量:
x = 1 x, y, z = 1, 2, 3 # 序列解包
根据上文所说,创建变量以后将会分配一个内存空间,可以通过 id
函数来查看:
id(x)
Python 会进行自动垃圾回收,但是也可以手动回收,使用 del
函数即可:
del(x)
在 Python 解释器中,可以使用 del
指令:
del x
刚才定义的变量是整型的,并且是十进制数字。Python 的数据类型是自动推导的,但是可以定义其他数制的数据:
数制 | 表示法 | 描述 |
---|---|---|
十进制 | 302 | 常见的表示形式 |
八进制 | 1070 | 在数字末尾加 0 |
十六进制 | 0xAF | 在数字头部加 0x |
二进制 | 0b110101 | 在数字头部加 0b |
在Python中,名称(标识符)只能由字母、数字和下划线(_
)构成,且不能以数字开头。
Python 为提供数字类型,但是实际上 Python 内部将数字类型分为了整型、浮点型。此外,Python 还提供了字符串、元组、列表和字典类型。
3. 运算符
Python 提供了丰富的运算符供我们使用:算术运算符、关系运算符、赋值运算符、位运算符、成员运算符、身份运算符。
-
算术运算符:参与数学运算
运算符 描述 示例 +
两个对象相加 1 + 1
,'a' + 'b'
-
相减 1 - 1
*
相乘 1 * 5
/
相除 1 / 2
%
求余(取模) 54 % 7
**
幂运算 2**10
//
取整除(取商) 3 // 5
-
关系运算符:参与关系比较运算,通常用于条件分支
运算符 描述 示例 ==
等于 1 == 1
!=
不等于 1 != 1
<>
不等于(Python3 已经废弃) 1 <> 1
>
,>=
大于,大于等于 1 > 2
,4 >= 2
<
,<=
小于,小于等于 2 < 3
,3 <= 3
-
赋值运算符:主要是为了简化运算
运算符 描述 示例 =
将值赋值给变量 x = 1
+=
原地加法运算 x += 1
,等价于x = x + 1
-=
原地减法运算 x -= 1
,等价于x = x - 1
*=
原地乘法运算 x *= 1
,等价于x = x * 1
/=
原地除法运算 x /= 1
,等价于x = x / 1
%=
原地取模运算 x %= 1
,等价于x = x % 1
**=
原地幂运算 x **= 1
,等价于x = x ** 1
//=
原地商运算 x //= 1
,等价于x = x // 1
-
位运算符:用于内部进行二进制运算
运算符 描述 示例 &
按位与运算 0b11011 & 0b10
¦
按位或运算 0b11011 ¦ 0b10
^
按位异或运算 0b1011 ^ 0b10
~
按位取反运算 ~0b11100101
<<
左移动运算 8 << 2
>>
右移动运算 9 >> 1
-
逻辑运算符:用户布尔运算
运算符 描述 示例 and
逻辑与运算 x and y
or
逻辑或运算 x or y
not
逻辑取反运算 not x
-
成员运算符:用于对象与序列之间的运算
运算符 描述 示例 in
判断指定的值是否在序列中 x in seq
not in
in
的取反x not in seq
-
身份运算符:用于对象与对象之间的运算
运算符 描述 示例 is
判断两个标识符是不是引用自一个对象 x is y
is not
is
的取反x is not y
-
运算符优先级:
运算符 描述 **
指数 (最高优先级) ~ + -
按位翻转, 一元加号和减号 * / % //
乘,除,取模和取整除 + -
加法减法 >> <<
右移,左移运算符 &
位 'AND' ^ ¦
位运算符 <= < > >=
比较运算符 <> == !=
等于运算符 = %= /= //= -= += *= **=
赋值运算符 is is not
身份运算符 in not in
成员运算符 not and or
逻辑运算符