yield

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

冒泡算法要求:给定一个列表 [13,22,6,99,11] 通过程序实现让他们可以从小到大排序。

思路:让相邻的两个数互比大小,存在大数就放在右边。

我的实现:

#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='lilon'li= [33,11,88,77,44,345,223,113,555,23,3]PRintliprint"**************************8"#定义冒泡函数,计算排序,最大数放在右面defmaopao():#循环,从1开始,例如range(1,5) 1,2,3,4 注意没有5forninrange (1,len(li)):#循环,从0开始到 例如range(5-1 4) range(5-2 3) range(5-3 2) range(5-4 1)forminrange(len(li)-n):#给num1赋值 li[m]num1 =li[m]#给num2赋值 li[m+1]num2 = li[m+1]#比较num1 num2ifnum1 >num2:#通过临时变量temp交换li[m] 和 li[m+1]temp =num1

li[m]=num2

li[m+1] =tempprintliprintlipass#定义一个主函数defmain():

maopao()#限制程序入口if__name__=="__main__":

main()

详说修改配置文件的方法默认配置

globallog127.0.0.1local2

daemon

maxconn256log127.0.0.1local2 info

defaults

logglobalmode http

timeout connect 5000ms

timeout client 50000ms

timeout server 50000ms

option dontlognull

listen stats :8888stats enable

stats uri/admin

stats auth admin:1234frontend oldboy.org

bind0.0.0.0:80option httplog

option httpclose

option forwardfor

logglobalacl www hdr_reg(host)-i www.oldboy.org

use_backend www.oldboy.orgifwww

backend www.oldboy.org

server100.1.7.9 100.1.7.9 weight 20 maxconn 3000原配置文件

修改需求

1、查

输入:www.oldboy.org

获取当前backend下的所有记录2、新建

输入:

arg={'bakend':'www.oldboy.org','record':{'server':'100.1.7.9','weight': 20,'maxconn': 30}

}3、删除

输入:

arg={'bakend':'www.oldboy.org','record':{'server':'100.1.7.9','weight': 20,'maxconn': 30}

}

需求

我的实现#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='lilon'importosimportjson#定义好一个函数,用来做查找deffetch(ha):

backendlist=ha#先准备一个列表,在后面用来加入查到的backend字段下的server信息serverinfo =[]#print "backend %s" %backendlist#使用with的方式打开文件,可以自动的关闭文件,减少我们出错误的可能with open ("oldboy.conf","r")as obj:"""#灵活添加flag,使用flag做一个开关,匹配到了相关的backend就把flag设置为True,

直到遇到了backend开头的其他的字段,就把flag设置为False,

中间的就是我们需要的信息,使用列表的append()方法就可以添加了"""flag=False#循环,一次一行,处理大文件必须的方式forlineinobj:ifline.strip() =="backend %s"%backendlist:

flag=Truecontinue#灵活性代码 startswitch方法 匹配开头是backend的行ifflagandline.strip().startswith("backend"):

flag=False

break"""#当我们确认了flag是True,

意味着上面已经找到了相关的backend,

而且把flag设置为了True了,

所以我们现在可以通过append()方法来把相关的server info

加入到了列表里面"""ifflagandline.strip():

serverinfo.append(line.strip())ifserverinfo:returnserverinfo#定义一个函数,做增加defbackendadd(**dict_info):

fetch_list=[]

backend_title= dict_info.get("backend")

current_record_pre="server {server} weight {weight} maxconn {maxconn}"current_record= current_record_pre.format(**dict_info.get("record"))

fetch_list=fetch(backend_title)iffetch_list:ifcurrent_recordinfetch_list:passelse:

fetch_list.append(current_record)

with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:

flag=False

isWrite=TrueforlineinobjConf:ifline.strip() =="backend %s"%backend_title:

objTemp.write(line)

flag=Truecontinueifflag == Trueandline.strip().startswith("backend"):

flag=Falseifflag ==True:ifisWrite:fornew_lineinfetch_list:

temp="%s%s\n"%(""*8,new_line)

objTemp.write(temp)

isWrite=Trueelse:

objTemp.write(line)ifos.path.isfile("oldboy.bak"):

os.remove("oldboy.bak")

os.rename("oldboy.conf","oldboy.bak")

os.rename("conf.temp","oldboy.conf")returnTrueelse:

with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:forlineinobjConf:

objTemp.write(line)

objTemp.write("backend %s\n"%backend_title)

objTemp.write("%s%s\n"%(""*8,current_record))ifos.path.isfile("oldboy.bak"):

os.remove("oldboy.bak")

os.rename("oldboy.conf","oldboy.bak")

os.rename("conf.temp","oldboy.conf")returnTruedefdelitem(**dict_info):

fetch_list=[]

backend_title= dict_info.get("backend")

current_record_pre="server {server} weight {weight} maxconn {maxconn}"current_record= current_record_pre.format(**dict_info.get("record"))

fetch_list=fetch(backend_title)iffetch_list:ifcurrent_recordinfetch_list:

with open("oldboy.conf","r") as objConf, open("conf.temp","w") as objTemp:iflen(fetch_list) > 1:forlineinobjConf:ifline.strip() ==current_record:continueelse:

objTemp.write(line)else:forlineinobjConf:ifline.strip() =="backend %s"%backend_title:continueifline.strip() ==current_record:continueelse:

objTemp.write(line)ifos.path.isfile("oldboy.bak"):

os.remove("oldboy.bak")

os.rename("oldboy.conf","oldboy.bak")

os.rename("conf.temp","oldboy.conf")returnTrueelse:passelse:passpassdefbackup():

os.remove("oldboy.conf")

os.rename("oldboy.bak","oldboy.conf")#定义一个主函数defmain():

ha="buy.oldboy.org"dictItem={'backend':'buy.oldboy.org','record':{'server':'101.1.71.90 100.1.7.90','weight': 22,'maxconn': 3000}

}

userInput= int(raw_input("hi plese input your choice:\n 1.search \n 2.add \n 3.del \n"))ifuserInput == 1:print"you select search."#userInputSearch = raw_input("input a backend url")searchEnd =fetch(ha)ifsearchEnd:forlineinsearchEnd:printlineprint"search End!"else:print"sorry not found!"elifuserInput == 2:print"you select add."addEnd= backendadd(**dictItem)ifaddEnd:print"add successful"else:print"error!!!"elifuserInput == 3:print"you select del."delEnd= delitem(**dictItem)ifdelEnd:print"del successful"else:print"no file in their"ifos.path.isfile("oldboy.temp.conf"):

os.remove("oldboy.temp.conf")elifuserInput == 4:print"this is a super command"backup()else:print"sorry, i can not do that!!!"#限制程序入口if__name__=="__main__":

main()

lambda表达式学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:

#普通条件语句if1 == 1:

name='wupeiqi'else:

name='alex'#三元运算name ='wupeiqi'if1 == 1else'alex'

对于简单的函数,也存在一种简便的表示方式,即:lambda表达式#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'deffunc1(arg):returnarg + 1func2=lambdaa: a+1func3=lambdaa,b: a+bdeflambdax():

result= func1(100)printresult

result2= func2(1000)printresult2

result3= func3(100,211)printresult3#定义一个主函数defmain():

lambdax()pass#限制程序入口if__name__=="__main__":

main()

lambda存在意义就是对简单函数的简洁表示

map遍历序列,对序列中每个元素进行操作,最终获取新的序列

li = [11, 22, 33]

new_list= map(lambdaa: a + 100, li)

li = [11, 22, 33]

sl= [1, 2, 3]

new_list= map(lambdaa, b: a + b, li, sl)

#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'deffunc1(args):returnargs ** 128#定义一个主函数defmain():

li=[2,3,4]

l1= [1,2,3]

l2= [2,3,4]

l3= [3,4,5]printmap(lambdaa,b,c:a+b+c,l1,l2,l3)pass#限制程序入口if__name__=="__main__":

main()

filter对于序列中的元素进行筛选,最终获取符合条件的序列

li = [11, 22, 33]

new_list= filter(lambdaarg: arg > 22, li)#filter第一个参数为空,将获取原来序列

#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'li= [11,22,33,44]#定义一个主函数defmain():printfilter(lambdaa:a>33,li)pass#限制程序入口if__name__=="__main__":

main()

reduce用于累计操作,如累加,累乘等

#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'li= [1,2,3,4,5,6,7,8,9]#定义一个主函数defmain():printreduce(lambdaarg1,arg2:arg1*arg2,li)#限制程序入口if__name__=="__main__":

main()

yield暂时跳出了函数,但是下次可以继续使用,和continue要区分开

#!/usr/bin/env python#-*- coding: utf-8 -*-__author__='EchoRep'deffunc1():yield1yield2yield3defmrange(arg):

seed=0whileTrue:

seed= seed + 1ifseed >arg:returnelse:yieldseed#定义一个主函数defmain():foriinmrange(10):printi#限制程序入口if__name__=="__main__":

main()

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航