Day 20
今日内容概要
- 常见内置函数
- 可迭代对象
- 迭代器对象
- for循环内部原理
- 异常捕获
- 生成器对象
今日内容详细
1.常见内置函数
内置函数:提前定义好可以直接使用的函数
1.abs() #求绝对值
print(abs(-99))#99
2.all()与any() #判断容器类型中所有数据值对应的布尔值是否为True
2.1.all()只有所有数据值都是True结果才会True
print(all([1,2,3]))#True
print(all([1,2,3,0]))#False
2.2any()只要有一个数据值为True结果才是True
print(any([1,2,3]))#True
print(any([0,0,0]))#False
3.bin() oct() hex() #十进制转其他进制
print(bin(10))#0b1010 十>>二
print(oct(10))#0o12 十>>八
print(hex(10))#0xa 十>>十六
4.int()#类型转换 其他进制转十进制
print(int(0b1010))
print(int(0o12))
print(int(0xa))
5.bytes()#类型转换类似于编码(encode)解码(decode)
编码:
res=bytes('张三','utf8')
print(res)#b'/xe5/xbc/xa0/xe4/xb8/x89'
解码:
res1=str(res,'utf8')
print(res1)#张三
6.callable()#判断某个变量是否可以加括号调用
'call在IT中翻译为调用 调用就是加个()'
name='jason'
def index():
print('from index')
print(callable(name))#False 该变量名不能加括号调用
print(callable(index))#True 该变量名可以加括号调用
7.chr() ord() #依据ASCII码表实现字符与数字的转换
print(chr(65))#A
print(ord('A'))#65
8.dir()#获取对象内部可以通过句点符获取的数据
print(dir(str))
9.divmod()#获取除完之后的整数与小数部分
eg:一个网页我有898个数据,每页展示10个,需要展示多少页
num,more=divmod(898,10)
if more:#如果整除不了说明有余数
num+=1#则让num自增1
print('总页数:%s'%num)#总页数:900
*重点*
10.enumerate()#枚举
eg:要求循环打印处数据值 并有相应的索引值
list=['jason','kevin','cat']
for i,j in enumerate(list,1):#把i后面循环出来的数据一个一个交给变量j。从1开始(默认不写就是从0开始)
print(i,j)#1 jason 2 kevin 3 cat
11.eval() exec()#能够识别字符串中python代码并执行
eg:
res='print(123)'
print(res)#print(123)
eval(res)#123 相当于把引号拿掉
'eval和exec用法相同 区别就是第一个只能识别简单结构,后面的可以识别复杂结构'
12.hash()#返回一串随机的数字(哈希值)#需字符串型式
print(hash('张三'))
print(hash('123'))
13.help()#查看帮助信息
help(len)#会返回len的注释、介绍、使用方式。(帮助手册)
*重点*
14.isinstance()#判断某个数据是否属于某个数据类型
print(isinstance(123,int))#True
print(isinstance(123,str))#False
15.pow()#幂指数
print(pow(2,3))#8 求2的8次方
16.round()#四舍五入(不太准)
print(round(98.3))#98
2.可迭代对象
1.什么是迭代?
迭代就是更新换代,每次迭代都需要基于上一次
eg:软件版本更新
2.代码演示
不属于迭代:
while True:
print('嘿嘿嘿')
属于迭代:#因为每次打印n都是基于上一次的n+1得来的结果
n = 0
while n < 10:
print(n)
n += 1
3.如何判断可迭代对象
'''
内置有__iter__方法的都叫可迭代对象
1.什么是内置? 通过句点符能直接点出来的东西就叫内置
2.__xxx__ 针对双下划线开头双下划线结尾的方式统一读作双下xxx
'''
# int # 整型不是可迭代对象
# float # 浮点型不是可迭代对象
# bool # 布尔值不是可迭代对象
# 函数名 # 函数名不是可迭代对象
# str # 字符串是可迭代对象
# list # 列表是可迭代对象
# dict # 字典是可迭代对象
# tuple # 元组是可迭代对象
# set # 集合是可迭代对象
# f #文件对象是可迭代对象
可迭代对象:
字符串、列表、字典、元组、集合、文件对象(本身就是可迭代对象)
不是迭代对象:
整型、浮点型、布尔值、函数名
'可迭代对象能支持for循环取值'
3.迭代器对象
'''
作用:
迭代器对象给我们提供了一种不依赖于索引取值的方式,有了迭代器对象我们才能对字典、集合这些无序类型循环取值
'''
1.如何判断迭代器对象:
内置有__iter__和__next__的对象都称之为迭代器对象
2.可迭代对象与迭代器对象的关系:
可迭代对象调用__iter__方法后就会变成迭代器对象
迭代器对象调用__iter__方法无论多少次还是迭代器对象本身
3.迭代器对象迭代取值:
res = 'cat'.__iter__() # res已经是迭代器对象
print(res.__next__()) # c
print(res.__next__()) # a
print(res.__next__()) # t
print(res.__next__()) # 没有了直接报错
dict={'name':'张三','pwd':123}.__iter__()
print(dict.__next__())#name
print(dict.__next__())#pwd
print(dict.__next__())#没有了报错
eg:不使用for循环 依次打印出列表所有值
l1=[1,2,3,4,5]
#1.将列表变成迭代器对象
res=l1.__iter__()
#2.定义一个计数器
count=0
#3.编写while循环
while count<len(l1):
#4.循环取值
print(res.__next__())
count+=1
4.补充说明
4.1.迭代器的反复使用
l1=[1,2,3]
print(l1.__iter__().__next__())#1
print(l1.__iter__().__next__())#1
print(l1.__iter__().__next__())#1
#每次使用都是产生了新的迭代器对象
l2=[1,2,3]
res=l2.__iter__()
print(res.__iter__().__next__())#1
print(res.__next__())#2
print(res.__next__())#3
#每次使用都是用一个迭代器对象
4.2.针对双下方法#不建议 没有标识度
l=[1,2,3]
res=l.__iter__() 可以简写为 iter(l)
res.__next__() 可以简写为 next(res)
4.3.迭代器对象特殊的地方
print(range(4))#range(0,4) (python2是直接全打印出来)
res=range(4).__iter__()#range是一个可迭代对象 只有赋值接收后才可以变成迭代器对象
print(res.__next__())#0
print(res.__next__())#1
print(res.__next__())#2
print(res.__next__())#3
可迭代对象、迭代器对象 通过打印操作无法直接看出内部数据的情况,这是在帮助我们节省内存,相当于工厂,要一个数据就给我们造一个出来
4.for循环内部原理
语法结构
for 变量名 in 可迭代对象:
for循环体代码
1.for会自动将in后面的数据调用__iter__()变成可迭代器对象
2.之后每次循环调用__next__()取值
3.最后没有值时__next__()会报错,for能自动处理错误让循环正常结束
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/273689.html