标签:
原理分解:
位置 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