Python常用内置对象
一切皆对象
- 常量、变量、函数、模块、类、文件等
3种对象
- 内置对象;标准库对象;扩展库对象
对象含义
- 数据的抽象所有数据以对象形式存在
对象属性
- id (内存地址);类型;值
内置对象可以直接使用,不需要导入
标准库对象需要导入之后才能使用
如import math / math.sin(PI)、import random / random.randint(1,10 )等
扩展库对象需要先安装相应的扩展库,然后导入,才能使用pip install numpy / import numpy asnp / np.arange(1,10,2)
通过内置函数type()来获取对象的类型;
id()函数获取对象的id (内存地址)
数据类型不仅决定了对象在内存中的存储方式,而且决定了可以在对象上附加的操作。
基于不同的数据类型,程序可以实现复杂的功能。
常量和变量
对象通常存放在变量中,变量是指向某个对象的名称,是对象的命名。Python中的变量不同于C 、C++ 、Java等语言中的变量。
Python是一种强类型语言,不需要事先声明变量的类型(所指向对象的类型), 直接赋值即可创建各种类型的变量,变量类型会根据所赋值的类型自动推断。
Python是动态类型语言,变量的类型是可以随时变化的。
>>> a = 2 # 整型赋值
>>> a = "Python " # 字符串赋值
变量的理解:
- 变量在第1次赋值时被创建,再次出现时直接使用
- 变量没有数据类型的概念。数据类型属于对象
- 变量引用了对象。 当在表达式中使用变量时,变量被其引用的对象替代
- 变量在使用前,必须赋初值。
- Python中各种变量存储的不是值,而是值的引用(值的内存地址)
注意:引用和对象分离
在Python中,允许多个变量指向同一个值,例如:
>>> x = 3
>>> id(x)
1786684560
>>> y = x
>>> id(y)
1786684560
>>> x += 6 >>> id(x)
1786684752
>>> y
3
>>> id(y)
1786684560
Python采用的是基于值的内存管理方式,如果为不同变量赋值为相同值(交互模式下仅适用于-5至256的整数和短字符串4KB), 这个值在内存中只有一份,多个变量指向同一块内存地址。
>>> x = 3
>>> id(x)
140720461453136
>>> y = 3
>>> id(y)
140720461453136
>>> x = [1, 1, 1, 1]
>>> id(x[0]) == id(x[1])
True
变量的删除
Python具有自动内存管理功能,会自动跟踪所有的变量,对于没有指向值的变量,并自 动删除不再有指向值的变量。因此, Python程序员一般情况下不需要太多考虑内存的管 理问题。
也通过显式使用del命令,删除不需要的变量,或者显式关闭不再需要访问的资源。
>>> a = 10
>>> dela # 删除变量a
>>> print(a)
NameError: name 'a'is not defined
标识符是编程语言中允许作为名字的有效字符串集合。在命名标识符的时候, 要遵循如下命名规则:
- 标识符的第一个字符必须是字母或者下划线 _ 。
- 标识符可以由字母、下划线 _ 或数字组成。
- 标识符的语法基于Unicode standard annex UAX-31,可以使用中文字符作为标识符。标识符区分大小写。
- 空格、跳格、换页等字符被用来分隔标识符,不能包含标点符号。
- 标识符的长度不限。建议标识符不宜太长,否则不利于程序的编写。
- 禁止使用Python关键字、内置对象作为标识符。
- 标识符可以被用作变量名、函数名、类名、模块名等的命名。
- 标识符建议使用有意义的名字,能够体现其用途。
数字类型
- Python支持四种基本数字类型,分别是整型int、布尔型bool、浮点型float、复 数型complex,其中前两种是整型类型。 Python中的数字是无符号的,所有的 数字不包括符号“- ”,符号“ -”被看做一元运算符“-”。 浮点数由于表示 方式的限制,在进行运算时很少返回精确的预期结果。
- 数字属于Python的不可变对象,修改整型变量值的时候并不是真正修改变量 的值,而是修改变量使其指向新值所在的内存地址。为了增强数字的可读性,可以在数字中间位置使用单个下划线作为分隔。
- 在Python中, 数字类型变量所表示的范围可以是无穷大,只要内存空间足够。 和其它语言一样, Python也可以对数据类型进行等价转换。
>>> a= - 100 # 注意-为一元运算符
>>> b = 8888_888_888_888_888_888 # 使用_提高可读性
>>> c = b ** 5 # **表示幂运算
>>> print(c)
554928957306643634669782722823417839476990296194685769440165286457010279
59857718166268692103168
>>>isinstance(True, int) # 测试True是否为int的实例
True True等价于整数1 ,False等价于整数0
>>> int(''11'',8) # 内置函数int()将n进制字符串转换成十进制
9
>>> bin(8) # 内置函数bin()将整数转换为对应的二进制形式
'0b1000'
>>> oct(8) # 内置函数oct()将整数转换为对应的八进制形式
'0o10'
小数类型float
>>> 0.3 + 0.2 # 实数相加
0.5
>>> 0.4 - 0.1 # 实数相减,结果稍微有点偏差
0.30000000000000004
>>> 0.4 - 0.1 == 0.3 # 应尽量避免直接比较两个实数是否相等
False
>>> abs(0.4-0.1 - 0.3) < 1e-6 # 这里1e-6表示10的-6次方
True
>>> import math
>>> math.isclose(0.4-0.1, 0.3) # 使用标准库函数判断两个实数是否足够接近
True
复数类型complex
Python内置支持复数类型及其运算,并且形式与数学上的复数完全一致。
>>>x=3+4j #使用j或J表示复数虚部
>>> y = 5 + 6j
>>> x + y # 支持复数之间的加、减、乘、除以及幂乘等运算
(8+10j)
>>> x * y
(-9+38j)
>>> abs(x) # 内置函数abs()可用来计算复数的模
5.0
>>> x.imag # 虚部
4.0
>>> x.real # 实部
3.0
>>> (3 + 4j).imag
4.0
布尔类型bool
布尔类型bool是用来表示逻辑“是”、“非”的一种类型,它只有两个值,True和False。例如:
>>> 3 > 2
True
>>> 4 + 5 == 5 + 4
True
>>> a = -8
>>> a * 2 > a
False
参与数字运算时,True相当于1,False相当于
0.0+True 0+False
分数计算
Python标准库fractions中的Fraction对象支持分数及其运算。
>>> from fractions import Fraction
>>> x = Fraction(2, 7) # 创建分数对象
>>> y = Fraction(9, 17)
>>> x.numerator # 查看分子
2
>>> x.denominator # 查看分母
7
>>> x * y
Fraction(18, 119) # 支持分数之间的四则运算,自动进行通分
高精度计算
>>> 1 / 3 # 内置实数类型,精度有限,如何解决?
0.3333333333333333
标准库decimal中提供的Decimal类实现了更高精度实数的运算。
>>> from decimal import Decimal, getcontext
>>> Decimal(1) / Decimal(3) # 高精度实数运算
Decimal('0.3333333333333333333333333333')
>>> sum([Decimal('0.5'), Decimal('1.3'), Decimal('3.14')]) /3
Decimal('1.646666666666666666666666667')
>>> getcontext().prec = 50 # 设置更高精度,有效数字位数
>>> Decimal(1) / Decimal(3)
Decimal('0.33333333333333333333333333333333333333333333333333')
字符串和字节串
- 在Python中, 没有字符常量和变量的概念,只有字符串类型的常量和变量, 单个字符也是字符串。
- 使用单引号、双引号、三单引号、三双引号作为定界符(delimiter)来表 示字符串,并且不同的定界符之间可以互相嵌套。
- Python 3.x全面支持中文,中文和英文字母都作为一个字符对待,可以使 用中文作为变量名。
- 除了支持使用加号运算符连接字符串以外, Python字符串还提供了大量的 方法支持格式化、 查找、替换、排版等操作。
>>> x = 'Helloworld.'# 使用单引号作为定界符
>>> x = “Python is a great language.” # 使用双引号作为定界符,注意配对
>>> x = '''Tom said, "Let's go."''' # 不同定界符之间可以互相嵌套
>>> print(x)
Tom said, "Let's go."
>>> x = 'good ' + 'morning'# 连接字符串
>>> x
'good morning'
>>> x = 'good ''morning'# 连接字符串,仅适用于字符串常量
>>> x
'good morning'
>>> x = 'good '
>>> x = x + 'morning'# 字符串变量之间的连接可以使用加号
>>> x
'good morning'
对str类型的字符串调用其encode()方法进行编码得到bytes字节串,对bytes字节串调用其decode()方法并指定正确的编码格式进行解码得到str字符串。
>>> type('Helloworld')# 默认字符串类型为str
<class 'str'>
>>> type(b'Helloworld')# 在定界符前加上字母b表示字节串
<class 'bytes'>
>>> 'Hello world'.encode('utf8')# 使用utf8编码格式进行编码
b'Helloworld'
>>> '董付国'.encode('utf8') # 对汉字进行编码
b'\xe8\x91\xa3\xe4\xbb\x98\xe5\x9b\xbd'# 单下划线表示最后一个正确计算的表达式的值
>>> _.decode('utf8')
'董付国'
>>> '董付国'.encode('gbk')
b'\xb6\xad\xb8\xb6\xb9\xfa'
>>> _.decode('gbk')# 对bytes字节串进行解码
'董付国’
注意:编码和解码要对应,否则出现乱码
如何判断用户输入的是英文字符?如何判断输入的是汉字?
>>>ord("A")
65
>>>ord("汉")
27721
>>>hex(ord("汉"))
'0x6c49'
汉字的Unicode编码从\u4E00到\u9FA5(可以用来判断中文)
列表、元组、字典、集合
Python内置对象
- Python是动态类型语言, 变量不用申明类型, 系统自动推断
- 整数对应的类型为int,包括二进制0b、八进制0o和十六进制0x
- 小数对应的类型为float,不精确存储, 不能直接比较是否相等
- 布尔对应的类型为bool,对应的值为True和False
- 复数对应的类型为complex,对应实部real和虚部imag
- Python语言中没有字符的概念, 所有字符都被看做字符串
- 序列list、tuple、dict和set,是容器类型,可以存放任何数据,对于学好 Python来说,至关重要