Python的常用内置对象
对象是python语言中最基本的概念,在python中处理的一切都是对象。
表1: Python的内置对象
对 象 类 型 | 类型名称 | 示例 | 简要说明 |
---|---|---|---|
数字 | int, float, complex | 1234, 3.14, 1.3e5, 3+4j | 数字大小没有限制,内置支持复数及其 运算 |
字符串 | str | str ‘swfu’, “I’m student”, ‘’‘Python ‘’’, r’abc’, R’bcd’ | 使用单引号、双引号、三引号作为定界 符,以字母r或R引导的表示原始字符串 |
字节串 | bytes | b’hello world’ | 以字母b引导,可以使用单引号、双引 号、三引号作为定界符 |
列 表 | list | [1, 2, 3],[‘a’, ‘b’, [‘c’, 2]] | 所有元素放在一对方括号中,元素之间 使用逗号分隔,其中的元素可以是任意 类型 |
字 典 | dict | {1:‘food’ ,2:‘taste’, 3:‘import’} | 所有元素放在一对大括号中,元素之间 使用逗号分隔,元素形式为“键:值” |
元 组 | tuple | (2, -5, 6), (3,) | 不可变,所有元素放在一对圆括号中, 元素之间使用逗号分隔,如果元组中只 有一个元素的话,后面的逗号不能省略 |
集 合 | set | frozenset {‘a’, ‘b’, ‘c’} | 所有元素放在一对大括号中,元素之间 使用逗号分隔,元素不允许重复;另外, set是可变的,而frozenset是不可变的 |
布 尔 型 | bool | True, False | 逻辑值,关系运算符、成员测试运算 符、同一性测试运算符组成的表达式的 值一般为True或False |
空 类 型 | NoneType | None | 空值 |
异 常 | Exception、 ValueError、 TypeError…… | Python内置大量异常类,分别对应不同 类型的异常 | |
文 件 | f = open(‘data.dat’, ‘rb’) | open是Python内置函数,使用指定的 模式打开文件,返回文件对象 | |
其 他 可 迭 代 对 象 | 生成器对象、range对象、 zip对象、enumerate对象、map对象、filter对象 等 | 具有惰性求值的特点 | |
编程单元 | 函数(使用def定义) 类 (使用class定义) 模块 (类型为module) | 类和函数都属于可调用对象,模块用来集中存放函数、类、常量或其他对象 |
python中有许多内置对象可供编程者使用,内置对象可直接使用,如数字、字符串、列表、del等;
Python变量
Python属于强类型编程语言,Python解释器会根据赋值或运算来自动推断变量类型。Python还是一种动态类型语言,变量的类型也是可以随时变化的。
需要注意以下问题。
- 变量名必须以字母或下画线开头但以下画线 开头的变量在Python中有特殊含义,请参考第6章内容。
- 变量名中不能有空格或标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问等)。
- 不能使用关键字作为变量名,Python关键字的介绍请见2.3节。要注意的是,直着Python版本的变 化,关键字列表可能会有所变化。
- 不建议使用系统内置的模块名、类型名或函数名以及已导人的模块名及其成员作为变量名,这会 改变其类型和含义,甚至会导致其他代码无法正常执行。可以通过difr(_ _ builtins_ _ )查看所有 内置对象名称。
- 变量名对英文字母的大小写敏感,例如student和Student是不同的变量
>>> x = 4
>>> print(type(x))
<class 'int'>
>>> x = 'Hello world.'
>>> print(type(x)) #查看变量类型
<class 'str'>
>>> x = [1,2,3]
>>> print(type(x))
<class 'list'>
>>> isinstance(3, int) #测试对象是否是某个类型的实例
True
>>> isinstance('Hello world', str)
True
>>> x = 3
>>> x
3
>>> x**2
9
字符串和元组属于不可变序列,不能通过下标的方式来修改其中的元素值,试图修改元组中元素的值时会抛出异常。
在Python中,允许多个变量指向同一个值 。
x = 3
y = 3
x += 6
内存变化如下:
- 赋值语句的执行过程是:首先把等号右侧表达式的值计算出来,然后在内存中寻找一个位置把值存放进去,最后创建变量并指向这个内存地址。
- Python采用的是基于值的内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。 Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因。
- Python具有自动内存管理功能,对于没有任何变量指向的值,Python自动将其删除。Python会跟踪所有的值,并自动删除不再有变量指向的值。尽管如此,显式使用
命令删除不需要的值或显式关闭不再需要访问的资源,仍是一个好的习惯,同时也是一个优秀程序员的基本素养之一。del
数字
数字是不可变对象,可以表示任意大小的数字。
>>> 999*99 #想乘
98901
>>> 999**99 #幂运算,等价于内置函数pow()
905697844958667709741956562802753100901389806139609538815019658231017504097064752403846139892968390554024852396172082441213697329994395340901282449426848216146865935961454742677324005498146550510264840271813301125214581059267630055862747172378231729576039278689152963667155086263379780844149098999
>>> 0.3+0.2
0.5
>>> 0.5-0.2
0.3
0.4-0.1 #实数相减,结果稍有偏差
0.30000000000000004
Python中的整数类型可以分为
- 十进制整数如,0、-1、9、123
- 十六进制整数,需要16个数字0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f来表示整数,必须以
开头,如0x
、0x10
、0xfa
0xabcdef
- 八进制整数,只需要8个数字0、1、2、3、4、5、6、7来表示整数,必须以
开头,如0o
、0o35
0o11
- 二进制整数,只需要2个数字0、1来表示整数,必须以
开头如,0b
、0b101
0b100
浮点数又称小数
15.2, 0.31, 3.14, -11.2
Python 3.6.x开始支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符。
>>> 1_000_000
1000000
>>> 1_2_3_4
1234
>>> 3.14159_26535_89793_83246
3.14159265358979383246
字符串
- 用单引号、双引号或三引号界定的符号系列称为字符串。
- 单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串 ‘abc’、‘123’、“Python”、’’’ Tom said, “Let’s go” ‘’’。
- 字符串属于不可变序列。
- 空字符串表示为’'或 “”。
- 三引号’’'或"""表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释。
常见的转义字符
表2: 转义字符
转义字符 | 含义 | 转义字符 | 含义 |
---|---|---|---|
\b | 退格,把光标移动到前一列位置 | \ | 一个斜线\ |
\f | 换页符 | \’ | 单引号’ |
\n | 换行符 | \” | 双引号” |
\r | 回车 | | 3位八进制数对应的字符 |
\t | 水平制表符 | | 2位十六进制数对应的字符 |
\v | 垂直制表符 | | 4位十六进制数表示的Unicode字符 |
Python运算符
表3: Python 运算符
运算符 | 功能说明 |
---|---|
+ | 算术加法,列表,元组,字符串合并与连接,正号 |
- | 算术减法,集合差集,相反数 |
* | 算术乘法,序列重复 |
/ | 真除法 |
// | 求整商,但如果操作数中有实数的话,结果为实数形式的整数 |
% | 求余数,字符串格式化 |
** | 幂运算 |
<,<=,>,>=,==,!= | (值)大小比较,集合的包含关系比较 |
or | 逻辑或 |
and | 逻辑与 |
not | 逻辑非 |
in | 成员测试 |
is | 对象同一性测试,即测试是否为同一个对象或者内存地址是否相同 |
|,^,&,<<,>>,~ | 位或,位异或,位与,左移位,右移位,位求反 |
&,|,^ | 集合交集,并集,对称差集 |
@ | 矩阵相乘运算符 |
Python关键字简要说明
表4: 关键字
关键字 | 含义 |
---|---|
False | 常量,逻辑假 |
None | 常量,空置 |
True | 常量,逻辑假 |
and | 逻辑与运算 |
as | 在import或except语句中给对象器别名 |
assert | 断言,用来确认某个条件必须满足,可以来帮助调试程序 |
break | 用来循环中,提前结束break所在层次的循环 |
class | 用来定义类 |
continue | 用在循环中,提前结束本次循环 |
def | 用来定义函数 |
del | 用来删除对象或对象成员 |
elif | 用在选择结构中,表示else if 的意思 |
else | 可以用在选择结构、循环结构和异常处理结构中 |
except | 用在异常处理结构中,用来捕获特定类型的异常 |
finally | 用在异常处理结构中,用来表示不论是否发生异常都会执行的代码 |
for | 构造for循环,用来迭代序列或可迭代对象中的所有元素 |
from | 明确指定从哪个模块中导入什么对象,例如from math import sin;还可以与 yield 一起构成 yield表达式 |
global | 定义或声明全局变量 |
if | 用在选择结构中 |
import | 用来导入模块或模块中的对象 |
in | 成员测试 |
is | 同一性测试 |
lambda | 用来定义lambda表达式,类似于函数(匿名函数) |
nonlocal | 用来声明nonlocal变量 |
not | 逻辑非运算 |
or | 逻辑或运算 |
pass | 空语句,执行该语句时什么都不做,常用作占位符 |
raise | 用来显式抛出异常 |
return | 在函数中用来返回值,如果没有指定返回值,表示返回空值None |
try | 在异常处理结构中用来限定可能会引发异常的代码块 |
while | 用来构造while循环结构,只要条件表达式等价于True就重复执行限定的代码块 |
with | 上下文管理,具有自动管理资源的功能 |
yield | 在生成器行数中用来返回值 |