python之路day4
1很多人的努力都是浅尝辄止的
2.很多牛逼的人还在努力
3.半年会后牛逼的转身
冒泡算法:
for n in range(1,len(li)): for m in range(len(li) -n) : num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = temp print li
ha 配置思路
#!/usr/bin/env python #-*- coding:utf-8 -*- # powered by xiaobing #查,加,删 #定义读的函数 import os,json def fetch(backend): #打开文件ha with open('ha') as obj: flag = False fetch_list = [] #按行读取文件,每次只读取一行 for line in obj: #建个空列表,为后续将backend 下的值存储用 #如果这行内容等于 backend 参数值,就设置个flage值为True,认为找到了要找的代码块,然后跳出这个循环,读取代码块的下一行内容 if line.strip() == "backend %s" % backend: flag = True continue #如果这个flag = True 说明已找到代码块,然后将这行内容加入到空列表fetch_list if flag and line.strip(): fetch_list.append(line.strip()) #如果这个flag = True 说明已找到代码块并且又遇到了backend开头的代码,则说明后面的内容已无关,不需要继续循环 if line.strip().startswith("backend") and flag: break return fetch_list def add_ha(dict_info): #获取要添加的 backend值 backend_title = dict_info.get("backend") current_title = "backend %s" % backend_title #要添加的backend 的server记录 server_record_dict = dict_info.get("record") current_record = "server %s %s weight %s maxconn %s" %(server_record_dict.get("server"),server_record_dict.get("server"),server_record_dict.get("weight"),server_record_dict.get("maxconn")) #获取当前这个backend记录下的server列表 serverlist = fetch(backend_title) #判断这个新增backend 是否存在 if serverlist: #增加server记录 #打开旧文件,并打开新文件 with open('ha') as read_obj,open('ha_new',w) as write_obj: #设置是否已经读取的标识 flag = False #设置是否写入新记录的标识 has_write_flage = False #读取文件,按行读取 for line in read_obj: #如果读取行到了要写入的backend行,就设置读取标识为Ture,并跳出本次循环,读取下一行 if line.strip() == current_title: flag = True continue #如果已读取到写入行,并且读取到了新的backend记录,就设置 if flag and line.strip().startswith("backend"): flag = False if flag: if not has_write_flage: for new_line in serverlist: write_obj.write("%s %s \n" %(" "*8,new_line)) else: has_write_flage=True else: write_obj.write(line) else: #增加backend并添加记录 #打开文件写入新记录,同时打开旧文件和新文件 with open('ha') as read_obj,open('ha_new','w') as write_obj: for line in read_obj: write_obj.write(line) write_obj.write("\n") write_obj.write(current_title+"\n") write_obj.write("%s %s \n" %(" "*8,current_record) ) #os.rename('ha','ha.bak') #os.rename('ha_new','ha') s = '{"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}' read_input=json.loads(s) add_ha(read_input) fetch("www.oldboy.org")
lambda 简化函数
学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示
#处理简单函数
#自动return
#!/usr/bin/env python #-*- coding:utf-8 -*- # powered by xiaobing def func1(arg): return arg+1 result = func1(100) print result func2 = lambda a:a+1 result = func2(1000) print result
map函数
l1=[1,2,3] l2=[3,4,5] l3=[4,5,6] print map(lambda a1,a2,a3:a1+a2+a3,l1,l2,l3)
filter() 过滤只符合条件的数据
l4 = [1,44,55,22,11,33] print filter(lambda a:a>33,l4)
reduce() 对于序列内所有元素进行累计操作
l5 = [1,2,3,4,5,6,7,8,9,10] print reduce(lambda a1,a2:a1+a2,l5)
map 所有元素操作
filter 过滤,获取指定元素集合
reduce ,累计操作
yield
记住上一次操作,下次在执行时,继续执行
#!/usr/bin/env python #-*- coding:utf-8 -*- # powered by xiaobing ''' def func1(): yield 1 yield 2 yield 3 for i in func1(): print i ''' def mrange(arg): seed = 0 while True: seed = seed +1 if seed >10 : return else: yield seed for i in mrange(10): print i
装饰器:
装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。
场景:如果一个python程序已经有500个函数了,但突然老板要求我们要增加登陆验证,只有通过验证的才能执行,而且不要用户更改调用方式。
#!/usr/bin/env python #-*- coding:utf-8 -*- # powered by xiaobing def wrapper(func): if login("xiaobing"): return func else: print '未认证' def login(user): if user == 'xiaobing': return True else: print 'error name ' @wrapper def home(): print 'home' @wrapper def shop(): print 'shop' def over(): print 'over' #home = wrapper(home) home() shop()