Python内置对象
对象是python语言中最基本的概念之一,在python中处理的一切都是对象,除了整数、实数、复数、字符串、列表、元组、字典、集合,还有 zip
、 map
、 enumerate
、 filter
等对象,函数和类也是对象 。
表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常量与变量
常量,一般是指不需要改变也不能改变的字面值,变量的值是可以变化的。
Python属于强类型编程语言,Python解释器会根据赋值或运算来自动推断变量类型。Python还是一种动态类型语言,变量的类型也是可以随时变化的。
需要注意以下问题。
- 变量名必须以字母或下画线开头但以下画线 开头的变量在Python中有特殊含义,请参考第6章内容。
- 变量名中不能有空格或标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问等)。
- 不能使用关键字作为变量名,Python关键字的介绍请见2.3节。要注意的是,直着Python版本的变 化,关键字列表可能会有所变化。
- 不建议使用系统内置的模块名、类型名或函数名以及已导人的模块名及其成员作为变量名,这会 改变其类型和含义,甚至会导致其他代码无法正常执行。可以通过
dir(_ _ 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
在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开始支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符。
```python 3.6.x 支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性```
>>> 1_000_000
1000000
>>> 1_2_3_4
1234
>>> 3.14159_26535_89793_83246
3.14159265358979383246
分数
>>> from fractions import Fraction
>>> x = Fraction(3,5)
>>> y = Fraction(3,7)
>>> x
Fraction(3, 5)
>>> y
Fraction(3, 7)
>>> x.numerator # 查看分子
3
>>> y.denominator # 查看分母
7
高精度实数
>>> from fractions import Decimal
>>> 1/9
0.1111111111111111
>>> 1/3
0.3333333333333333
>>> Decimal(1/3)
Decimal('0.333333333333333314829616256247390992939472198486328125')
>>> Decimal(1/3) + Decimal(1/7)
Decimal('0.4761904761904761640423089375')