常见内置函数 可迭代对象 迭代对象 for循环的本质
- 常见内置函数
- 内置函数:
- abs() 求绝对值
- 2.all() 与 any() 判断容器内所数据值对应的布尔值是否为true
- 3.bin() oct() hex() 十进制转其他进制
- 4.int() 类型转换 其他进制转十进制
- 5.bytes() 类型转换
- 6.callable() 判断某变量是否可以加括号调用
- 7.chr() ord() 依据ASCII表实现字符与数字的转换
- 8.dir() 获取对象内部可以通过句点符获取的数据
- 9.divmod() 获取除法之后的整数和余数
- 10.enumerate() 枚举
- 11.aval() exec() 能够识别字符串中python代码并进行
- 12.hash() 返回一串随机的数字(哈希值)
- 13.help() 查看帮助手册
- 14.isinstance() 判断某个数据是否属于某个数据类型
- 15.pow() #幂指数
- 16.round() #四舍五入 可以自行搜索相关知识
- 可迭代对象
- for循环的本质
常见内置函数
内置函数:
提前定义好的 直接食用即可
abs() 求绝对值
abs() 求绝对值
print(abs(-99)) #99
2.all() 与 any() 判断容器内所数据值对应的布尔值是否为true
print(all([1,2,3,4,5,0])) #false
print(all([1,2,3,4,5])) #true
any() 所有数据值只要有一个为True 结果为true
print(any([1,2,3,4,5,0])) #true
print(any([1,2,3,4,5])) #true
3.bin() oct() hex() 十进制转其他进制
print(bin(10)) # 0b1010
print(oct(10)) # 0o12
print(hex(10)) # 0xa
4.int() 类型转换 其他进制转十进制
print(int(0b1010)) #10
print(int(0o12)) #10
print(int(0xa)) #10
5.bytes() 类型转换
res = bytes('现在有多苦 将来就有多轻松', 'utf8'))
print(res)
res1 = bytes(res,'utf8')
print(res1)
6.callable() 判断某变量是否可以加括号调用
name = 'jason'
def inex():
print('from index')
print(callable(name)) #False
print(callable(index)) #True
7.chr() ord() 依据ASCII表实现字符与数字的转换
print(chr(65)) # A 65~90
print(chr(97)) # a 97~122
print(ord('A')) #65
print(ord('a')) #97
8.dir() 获取对象内部可以通过句点符获取的数据
print(dir(str)
9.divmod() 获取除法之后的整数和余数
real_num, more = divmod(872, 10)
if more:
real_num += 1
print('总页数:%s'%real_num)
# 总页数:88
10.enumerate() 枚举
name_list = ['john', 'joe', 'jojo']
需求:循环打印出数据值并且对应的索引值
for i, j in enumerate(name_list, 1): #默认从0开始 可以自定义
print(i, j)
# 1 john
# 2 joe
# 3 jojo
11.aval() exec() 能够识别字符串中python代码并进行
res = 'print(123)'
eval(res)
exec(res)
res1 = 'for i in range(10):print(i)'
eval(res1) 不能识别复杂代码
exec(res1) 能识别复杂代码
12.hash() 返回一串随机的数字(哈希值)
print(hash('john')
#5666322728606613251
13.help() 查看帮助手册
14.isinstance() 判断某个数据是否属于某个数据类型
print(isinstance(123,int)) #True
print(isinstance(123,str)) #False
15.pow() #幂指数
print(pow(2,3)) #8
16.round() #四舍五入 可以自行搜索相关知识
print(round(2.675))
# 2.67
# 除非对精确度没什么要求,否则尽量避开用round()函数
按我们的想法返回结果应该是 2.68,可结果却是 2.67,为什么?
这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串 1 和 0 后可能是无限位数的,机器已经做出了截断处理。那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离 2.67 要更近一点点,所以保留两位小数时就近似到了 2.67。
可迭代对象
如何理解迭代
是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。 每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
迭代代码演示
# 不属于迭代的情况
n = 0
while n < 10:
print(n)
# 属于迭代的情况
n = 0
while n < 10:
print(n)
n += 1
如何判断可迭代对象
内置有__iter__方法的都叫做可迭代对象
1.内置是什么意思 通过具句点符直接能点出来的东西都叫内置
2.next 针对双下划线开头双下划线结尾的读法 统一读作双下XXX(双下next)
可迭代对象有字符串 列表 字典 元组 集合 文件对象 是可迭代对象 整型 浮点型 布尔值 函数名 不是可迭代对象
可迭代对象能够支持for循环去值 并且提供了一种不依赖索引取值的方式
iterable
迭代器对象
作用
迭代器对象给我们提供了一种不依赖于索引取值的方式
因为有迭代器对象的存在 我们才能对字典、集合这些无序类型循环取值
如何判断迭代器对象
内置有__iter__ 和__next__ 的对象都称为迭代器对象
可迭代对象和迭代器对象的关系
可迭代对象调用__iter__就会变成迭代器对象
迭代器对象调用__iter__方法无论多少次还是迭代器对象本身
迭代器对象取值
l1 = [1, 2, 3, 4, 5]
# l1 并没有 __next__ 方法 因为它是可迭代对象
res = l1.__iter__() # 使用__iter__将可迭代对象转化为迭代器对象 并赋值给res
print(res.__next__()) # 1 使用__next__就可以取出下一个数据
# 不使用for循环 依次打印列表中所有数据
l1 = [1, 2, 3, 4, 5]
res = l1.__iter__()
n = 0
while n < len(l1):
print(res.__next__())
n += 1
# 运行结果
# 1
# 2
# 3
# 4
# 5
l1 = [1, 2, 3, 4, 5]
print(l1.__iter__().__next__()) # 1 每次都是产生一个新的迭代器对象
print(l1.__iter__().__next__()) # 1
print(l1.__iter__().__next__()) # 1
print(l1.__iter__().__next__()) # 1
print(l1.__iter__().__next__()) # 1
res = l1.__iter__()
print(res.__iter__().__next__()) # 1 产生迭代器对象后 无论调用几次__iter__还是本身
print(res.__iter__().__next__()) # 2
print(res.__iter__().__next__()) # 3
print(res.__iter__().__next__()) # 4
print(res.__iter__().__next__()) # 5
可迭代对象的特点
当迭代对象无法看到内部数据执行打印操作时
print(range(10)) # range(0,10)
相当于一个工厂需要数据时才一个个取出,节省内存空间
for循环的本质
语法结构
for 变量名 in 可迭代对象:
for循环代码体
1.for循环 会自动将后面的可迭代对象调用__iter__转换为迭代器对象
2.之后每次循环调用__next__方法
3.最后没有值__next__会报错 for循环能过自动处理该错误 让循环自动结束 既之后要学到的异常捕获