博主:命运之光
专栏:Python程序设计
一切皆对象
3种对象
对象含义
对象属性
内置对象可以直接使用,不需要导入
标准库对象需要导入之后才能使用
如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 " # 字符串赋值
变量的理解:
注意:引用和对象分离
在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
标识符是编程语言中允许作为名字的有效字符串集合。在命名标识符的时候, 要遵循如下命名规则:
>>> 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'
>>> 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
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是用来表示逻辑“是”、“非”的一种类型,它只有两个值,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')
>>> 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
>>> type(b'Helloworld')# 在定界符前加上字母b表示字节串
>>> '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(可以用来判断中文)