Python常用内置对象

Python
140
0
0
2024-06-29

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等价于整数1False等价于整数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内置对象
  1. Python是动态类型语言, 变量不用申明类型, 系统自动推断
  2. 整数对应的类型为int,包括二进制0b、八进制0o和十六进制0x
  3. 小数对应的类型为float,不精确存储, 不能直接比较是否相等
  4. 布尔对应的类型为bool,对应的值为True和False
  5. 复数对应的类型为complex,对应实部real和虚部imag
  6. Python语言中没有字符的概念, 所有字符都被看做字符串
  7. 序列list、tuple、dict和set,是容器类型,可以存放任何数据,对于学好 Python来说,至关重要