一、冒泡排序
第二種冒泡排序:
li = [89,22,63,11,43,2,47,21,1,97,73]
for a in range(len(li)-1):
for b in range(a+1,len(li)):
if li[a] > li[b]:
li[a],li[b]=li[b],li[a]
print li
列出來兩個序列,a是從第一個到倒數第二個,b是從第二個到倒數第一個,然後兩個序列的列表值做比較,大的換位置。
二、更改配置文件
1、查詢配置,原有文件中有此節點,將此節下的記錄列出來
def look_setup(site):
with open('G:\doc\setup.conf') as f:
li=[]
flag=False
for line in f:
lookline='backend %s' % site
if line.strip() == lookline:
flag=True
continue
if line.strip().startswith('backend'):
break
if flag and line.strip():
li.append(line.strip())
return li
此函數用來查詢,調用此函數:
retu=look_setup('www.oldboy.org')
print retu
2、增加一行記錄。
先判斷節點backend是否存在,如果存在,再判斷新節點是否已經存在,如果存在就不再添加,如果不存在則要添加;如果backend不存在,則把backend和記錄同時添加到文件末尾。
3、刪除一行記錄或backend節點
先判斷記錄是否存在,如果存在就刪除;判斷backend節點是否存在,存在則刪除。
三、lambda表達式
lambda表達式可以將簡易的函數用一行來表示,如:
def func(name):
return name * 2
下面一句,等同於上面兩句,可以直接調用func2函數。
func2=lambda name:name *2
func2=lambda **x:x
a={'wang':24,'zhi':42}
print func2(**a)
lambda用來處理簡單邏輯,自動return.
四、內置函數之序列操作系列
1、map 對序列中的每個元素進行操作,最終返回一個新的序列
>>> a=(14,35,63)
>>> print map(lambda x:x+50,a)
[64, 85, 113]
##a是列表或元組,遍歷a傳給前面的lambda的匿名函數,這兩個做爲map的兩個參數。
li=[23,89,1,1]
li2=[11,42,53,35]
print map(lambda a,b:a+b,li,li2)
li和li2兩個列表元素的數量要相等,否則會報錯。
2、filter 對序列中的元素進行篩選 ,返回符合條件的序列。
filter()函數爲過濾生成新列表,當在第一個功能函數內返回True時候,才把元素放到新列表中,否則過濾掉
li=[15,22,66,43]
def test(num):
if num>40:
return True
else:
return False
print filter(test,li)
##filter(function, sequence) 返回一個 sequence(序列),包括了給定序列中所有調用 function(item) 後返回值爲 true 的元素(如果可能的話,會返回相同的類型)。如果該 序列 (sequence)是一個 str, unicode 或者 tuple,返回值必定是同一類型,否則,它總是 list。
li=[23,89,False,'',0]
print filter(None,li)
如果filter的參數爲None, 則只取序列中爲True的數值。
3、reduce 對序列進行累計操作,最後返回一個值。
li=[11,42,53,35]
print reduce(lambda a,b:a+b,li)
五、yield生成器
def abc():
yield 2
yield 4
yield 7
>>> abc()
<generator object abc at 0x7f7f873a5640>
yield只有在循環調用時候,纔會生效,執行時yield能記錄上次循環執行的位置,下次循環直接從下一步開始:
def func(b):
a=0
while True:
a+=1
if a>b:
return
else:
yield a
此函數也只有在for循環調用時纔會打印。
六、裝飾器
在不用裝飾器的情況下,如果想給home函數增加功能,又不想改原home的代碼
def home():
print "Welcome to back"
可用以下方法:
def inclues(fun):
print "This is append"
return fun()
home=inclues(home)
以上方法雖然沒有home的原代碼,但是改變了接口的調用方式。
def inclues(fun):
print "This is append"
return fun
home=inclues(home)
home()
上面的方法就是在不改變源代碼 ,又不改變調用接口的情況下實現了添加新功能的需求。
這就是裝飾器的分解,
裝飾器方法如下:
def inclues(fun):
print "This is append"
return fun
@inclues
def home():
print "Welcome to back"
home()
裝飾器要放在函數的上面,函數纔可以調用。