- Python 数据类型
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
- type() 和 isinstance() 的区别
type()不会认为子类是一种父类类型isinstance()会认为子类是一种父类类型
class Father:
pass
class Child(Father):
pass
def main():
trueOrFalse = isinstance(Child(), Father)
print(trueOrFalse) # True
trueOrFalse = type(Child()) == Father
print(trueOrFalse) # False
if __name__ == "__main__":
main()
is和==的区别
is用于判断两个变量引用对象是否为同一个,既比较对象的地址。==用于判断引用变量引用对象的值是否相等,默认调用对象的 eq()
- Python 字符串
- Python 没有单独的字符类型,一个字符就是长度为 1 的字符串
- Python 字符串不能被改变,向一个索引位置赋值,比如 str[0] = ‘m’ 会导致错误
- String、List 和 Tuple
- String、List 和 Tuple 都是内置序列
- String 与 Tuple 不可变
- Tuple的核心特点是:不可变序列,访问和处理速度比 List 快
序列(sequence)是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间,这类似于 Java 中的数组。
String、List、Tuple 都可以使用如下语法 [ ] 进行操作:
str1 = "123456789"
print(str1[0]) # 1
str1[0] = 9 # Error
list1 = ["123", "456", "789"]
print(list1[0]) # 123
list1[0] = "000" # OK
tuple1 = ("123", "456", "789")
print(tuple1[0]) # 123
tuple1[0] = "000" # Error
- Set 、List 与 Dictionary
Set、List、Dictionary 都是内置可变序列。
- 集合是无序可变序列,基本功能是进行成员关系测试和删除重复元素,可以使用大括号
{ }或者set()函数创建集合
创建一个空集合必须用set()而不是{ },因为{ }是用来创建一个空字典。
实际上,集合底层是字典实现,集合的所有元素都是字典中的“键对象”,因此是元素是唯一的。
- 列表是有序可变序列,用于存储任意数目、任意类型的数据集合
- 字典是有序(Python3.6及以后)可变序列,字典当中的元素是通过键来存取的,而不是通过偏移下标存取,字典用
{ }标识
字典是一种映射类型,它是一个无序的键(key) : 值(value)的集合,键(key)必须使用不可变类型,而且在同一个字典中,键(key)必须唯一。
- 运算符
/与//
在不同的机器上浮点运算的结果可能会不一样,在整数除法中,除法/总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符//,//得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。
print(6 / 2) # 3.0
print(7 / 2) # 3.5
print(7 / 2.0) # 3.5
print(7 // 2) # 3
print(7 // 2.0) # 3.0
print(divmod(10, 5)) # (3, 1) -> (商, 余数)
- 常见数学函数
abs(-3.2) # 3.2 取绝对值
round(3.4666, 2) # 3.47 四舍五入,这里的 2 代表舍入到小数点后的位数
max(1, 9, 5.2, 3) # 9 取最大值
min(1, 9, 5.2, 3) # 1 取最小值
import math # 需要导入 math 模块使用以下函数
math.ceil(-3.2) # -3 向上取整
math.floor(-3.2) # -4 向下取整
math.fabs(-3.2) # 3.2 取绝对值,返回浮点型
math.pow(2, 3) # 8.0 2**3 运算后的值,返回浮点型
math.sqrt(9) # 3.0 开平方,返回浮点型
math.exp(1) # 2.718281828459045 返回e的1次幂
math.modf(2.3) # (0.2999999999999998, 2.0) 返回一个数的整数部分与小数部分,两部分的数值符号与该数相同,整数部分以浮点型表示
- 常见随机数函数
import random # 需要导入 random 模块使用以下函数
str1 = random.choice("python") # 从序列的元素中随机挑选一个元素
num1 = random.choice(range(10)) # 从 0 到 9 中随机挑选一个整数,range(10) 表示 [0, 10)
num2 = random.uniform(0, 2) # 随机生成一个实数,它在 [0, 2] 范围内
num3 = random.random() # 随机生成一个实数,它在 [0, 1) 范围内
num4 = random.randint(0, 2) # 随机生成一个整数,它在 [0, 2] 范围内
num4 = random.randrange(0, 10, 2) # 从指定范围内,按指定基数递增的集合 [0, 10) 中获取一个随机整数,集合元素值递增基数默认为1
# 也就是说从 [0, 2, 4, 6, 8] 集合中随机选一个整数
list1 = ["Python", "Java", "C#", "Go"]
list1 = random.shuffle(list1) # 将序列的所有元素随机排序,字符串、元组不可变类型不能使用
- 整数缓存问题
- 在 Python 解释器命令行中执行,Python 仅仅对比较小的整数对象进行缓存,范围为
[-5, 256] - 在 PyCharm 或者保存为文件执行,解释器做了一部分优化,范围是
[-5, 任意正整数]
-
与 C 和 JAVA 不一样,Python 不支持自增(
++)和自减(--)
-
运算符优先级
- 乘除优先加减
- 位运算、算术运算符 > 比较运算符 > 赋值运算符 > 逻辑运算符
- Python3 中的 Unicode
Python3 一开始就支持Unicode,并且把系统默认编码设置为UTF-8,这可以避免很多编码问题,将文本字符和二进制数据区分得更清晰,分别用 str 和 bytes 表示。
- 使用内置函数
ord()可以把字符转换成对应的Unicode码 - 使用内置函数
chr()可以把十进制数字转换成对应的字符
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>> str1 = "我和我的祖国"
>>> bytes1 = str1.encode()
>>> bytes1
b'\xe6\x88\x91\xe5\x92\x8c\xe6\x88\x91\xe7\x9a\x84\xe7\xa5\x96\xe5\x9b\xbd'
>>> bytes1.decode()
'我和我的祖国'
>>> ord('我')
25105
>>> chr(25105)
'我'
- 字符串拼接
可以使用+将多个字符串拼接起来,例如:
>>> "aa" + "bb" + "cc"
'aabbcc'
- 如果
+两边都是字符串,则拼接字符串 - 如果
+两边都是数字,则进行加法运算 - 如果
+两边数据类型不同,则抛出异常
使用字符串拼接符 +,会生成新的字符串对象,因此不推荐使用 + 来拼接大量的字符串,推荐使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。
strs = []
for i in range(10):
strs.append("python ")
print("".join(strs))
- 字符串驻留机制
字符串驻留:
- 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中
- Python 支持字符串驻留机制,对于符合标识符规则的字符串(
仅包含下划线、字母 和 数字)会启用字符串驻留机制
>>> a = "codedancing"
>>> b = "codedancing"
>>> a is b
True
>>> a = "@codedancing"
>>> b = "@codedancing"
>>> a is b
False
>>> a = "Py"
>>> b = "Torch"
>>> (a + b) is "PyTorch" # a + b 会产生新字符串
False
本文深入解析Python中的数据类型,包括不可变数据如数字、字符串、元组,以及可变数据如列表、字典、集合。详细阐述了type()与isinstance()的区别,is与==的运用,以及Set、List与Dictionary的特性。同时介绍了Python中的运算符、数学函数、随机数函数,并探讨了整数缓存问题、Unicode支持和字符串操作技巧。
1476

被折叠的 条评论
为什么被折叠?



