2018.3.21学习笔记(生成器、迭代器、反射)
2018-03-21 05:03 冒牌权限 阅读(75) 评论(0) 收藏 举报生成器
#!/usr/bin/env python # -*- coding:utf-8 -*- def shengcheng(): print('a') yield 1 print('b') yield 2 print('c') yield 3 r = shengcheng()#仅仅创建一个生成器 print(r) ret = r.__next__() print(ret) ret = r.__next__() print(ret) ret = r.__next__()#可以看出似乎yield具有保存执行状态的功能,否则为什么每次执行是往下 print(ret)
迭代器
#!/usr/bin/env python # -*- coding:utf-8 -*- def xrange(n): start = 0 while True: if start > n - 1: return yield start start += 1 ##########以上为生成器########## #########通常用for来迭代######## for i in xrange(10): print(i) #迭代器只是一个概念一个原理,不是具体的某一段代码。。。额,我是这么认为的
反射
#!/usr/bin/env python # -*- coding:utf-8 -*- #反射就是根据字符串的形式去对象中操作其成员 #getattr(对象,成员名)寻找 #hasattr(对象,成员名)判断是否存在 #setattr(对象,成员名,值)设置 #delattr(对象,成员名)删除 #下面以模块(对象)和函数(成员)为例,尝试一下getattr() inp = input('请输入要导入的模块名:')#很明显用户输入的是字符串 mokuai = __import__(inp)#导入名为用户输入的字符串的那个模块 inp_func = input('请输入要执行的函数:') getattr(mokuai,inp_func)()#getattr()获得要执行的函数,后面再加个括号来执行这个函数
利用反射和__import__()写一个原理性的web框架
#!/usr/bin/env python # -*- coding:utf-8 -*- inp = input('请输入URL后半段:') mods,funcs = inp.split('/') import_mods = __import__('test.' + mods,fromlist = True) if hasattr(import_mods,funcs): print(getattr(import_mods,funcs)()) else: print('404')
浙公网安备 33010602011771号