标签:
原理分解:
位置 1 2 3 4 5 ----------------------------------------------> 数据 111 22 78 33 55 两两比较,值大者向右换位 # 循环1 111与22比较,111大,与22互换位置 数据 22 111 78 33 55 111与78比较,111大,与78互换位置 数据 22 78 111 33 55 111与33比较,111大,与33互换位置 数据 22 78 33 111 55 111与55比较,111大,与55互换位置 数据 22 78 33 55 111 # 循环2 22与78比较,78大,位置不变 数据 22 78 33 55 111 78与33比较,78大,与33位置互换 数据 22 33 78 55 111 78与55比较,78大,与55位置互换 数据 22 33 55 78 111 111与78比较,111大,位置不变 数据22 33 55 78 111 # 循环 3 22与33比较,33大,位置不变 数据22 33 55 78 111 33与55比较,55大,位置不变 数据22 33 55 78 111 55与78比较,78大,位置不变 数据22 33 55 78 111 # 循环 4 22与33比较,33大,位置不变 数据22 33 55 78 111 33与55比较,55大,位置不变 数据22 33 55 78 111 # 循环 5 22与33比较,33大,位置不变 数据22 33 55 78 111
2 16 12 18 8 -3 索引标志,减少互换位置
2 16 12 18 8 -3 ---------------------------------------------> 6 5 4 3 2 1
实例:伪造Web框架的路由系统
反射:基于字符串的形式去对象中(模块)中操作其成员
getattr,delattr,setattr,hasattr
扩展:导入模块
import xxx from xxx import ooo obj = __import__("xxx") obj = __import__("xxx.oo.xxx", fromlist=True)
实例:
# commons.py def login(): print(‘登录页面‘) def logout(): print(‘退出页面‘) def home(): print(‘主页面‘)
常规调用:
import commons def run(): inp = input(‘请输入要访问的url‘) if inp == ‘login‘: commons.login() elif inp == ‘logout‘: commons.logout() elif inp == ‘home‘: commons.home() else: print(‘404‘) run()
反射调用:
# index.py import commons def run(): inp = input(‘请输入要访问的url: ‘) # inp字符串类型“login” # 反射:利用字符串的形式去对象(默认)中操作(寻找/检查/删除/设置)成员 if hasattr(commons, inp):# 判断是否存在 # 存在,执行操作,打开页面在 func = getattr(commons, inp) func() else: # 不存在,返回404 print("404") run()
标签:
原文地址:http://www.cnblogs.com/liangdalong/p/5581296.html