python day17
异常捕获补充(了解)
try: 被监测的代码 except 错误类型 as e: ... else: 被监测的代码不报错的时候执行 finally: 无论是否报错最终都会执行 # 断言(了解) name = 'jason' assert isinstance(name,str) # 主动报异常 raise 错误类型
for循环本质
d = {'name':'jason','pwd':123,'hobby':'read'} res = d.__iter__() # StopIteration while True: try: print(res.__next__()) except StopIteration as e: break for i in d: print(i)
迭代取值与索引取值对比
迭代取值
优点:不依赖于索引的一种取值方式
缺点:取值的顺序永远都是固定的从左往右 无法重复获取
索引取值
优点:可以重复获取
缺点:需要提供有序容器类型才能取值(不是一种通用的方式)
生成器对象
生成器其实就是自定义迭代器 定义阶段就是一个普通函数 def my_ge(): print('first') yield(111,222,333) print('second') 当函数体内含有yield关键字 那么在第一次调用函数的时候 并不会执行函数体代码 而是将函数变成了生成器(迭代器) 调用函数:不执行函数体代码 而是转换为生成器(迭代器) res = my_ge() ret = res.__next__() #每执行一个__next__代码往下运行到yield停止 返回后面的数据 print(ret) ret = res.__next__() #再次执行__next__接着上次停止的地方继续往后 遇到yield再停止 print(ret)
自定义range功能
yield传值(了解)
print(res1.__next__())
print(res1.__next__())
print(res1.__next__())
迭代器对象 生成器对象 我们都剋看成是“工厂”
只有我们索要数据的时候工厂才会加工出“数据”
上述方式就是为了节省空间
求和
def add(n, i): return n + i
调用之前是函数 调用之后是生成器
def test(): for i in range(4): yield i g = test() # 初始化生成器对象 for n in [1, 10]: g = (add(n, i) for i in g) """ 第一次for循环 g = (add(n, i) for i in g) 第二次for循环 g = (add(10, i) for i in (add(10, i) for i in g)) """
res = list(g)
print(res)
常见内置函数
# 1.abs() 绝对值 # print(abs(123)) # print(abs(-123)) # 2.all() any() # l = [11,22,33,0] # print(all(l)) # 所有的元素都为True结果才是True # print(any(l)) # 所有的元素只要有一个为True结果就为True # 3.bin() oct() hex() 进制数 # print(bin(123)) # print(oct(123)) # print(hex(123)) # 4.bytes() str() # res = 'lbw牛逼' # res1 = bytes(res,'utf8') # print(res1) # res2 = str(res1,'utf8') # print(res2) # res1 = res.encode('utf8') # print(res1) # res2 = res1.decode('utf8') # print(res2) # 5.callable() 是否可调用(能不能加括号运行) # s1 = 'jason' # def index(): # pass # print(callable(s1),callable(index)) # False True # 6.chr() ord() # print(chr(65)) # 根据ASCII码转数字找字符 # print(ord('A')) # 65 # 7.complex() 复数 # print(complex(123)) # (123+0j) # 8.dir() 查看当前对象可以调用的名字 # def index(): # pass # print(dir(index)) # print(index.__name__) # 9.divmod() # print(divmod(101,10)) """总数据100 每页10条 10页""" """总数据99 每页10条 10页""" """总数据101 每页10条 11页""" # num,more = divmod(233,10) # if more: # num += 1 # print('总共需要%s页'%num) # 10.eval()只能识别简单的语法 exec()可以识别复杂语法 都是将字符串中的数据内容加载并执行 # res = """ # 你好啊 # for i in range(10): # print(i) # """ # res = """ # print('hello world') # """ # eval(res) # exec(res) # 11.isinstance() 判断是否属于某个数据类型 # print(isinstance(123,float)) # False # print(isinstance(123,int)) # True # 12.pow() # print(pow(4,3)) # 13.round() # print(round(4.8)) # print(round(4.6)) # print(round(8.5)) # 14.sum() # l = [11,22,333,44,55,66] # print(sum(l))