>>> a =10>>>deffunc1():...print(a)...>>> func1()10# 在函數內定義的變量是局部變量,只能在函數內使用>>>deffunc2():... b =100...print(b)...>>> func2()100>>>print(b)# Error,全局沒有b這個名字# 如果函數內和全局有相同的名字,函數內的名字將會遮蓋住全局的名字>>>deffunc3():... a ='hello world'...print(a)...>>> func3()
hello world
>>>print(a)# 全局變量a的值仍然是1010# 如果需要在函數內(局部)改變全局的值,可以使用global關鍵字>>>deffunc4():...global a
... a =1000...print(a)...>>>print(a)10>>> func4()1000>>>print(a)1000
# 階乘函數,例:5!=5*4*3*2*1 5!=5*4! ...deffunc(x):if x ==1:return1return x * func(x -1)if __name__ =='__main__':print(func(5))
# 指定序列對象進行快速排序from random import randint
defqsort(seq):'接受一個序列對象,返回排序結果'iflen(seq)<2:return seq
# 假設第1項是中間值
middle = seq[0]
smaller =[]
larger =[]# 遍歷後續項,比middle小的放到samller,比middle大的放到largerfor data in seq[1:]:if data < middle:
smaller.append(data)else:
larger.append(data)# 把3項數據拼接return qsort(smaller)+[middle]+ qsort(larger)if __name__ =='__main__':
nums =[randint(1,100)for i inrange(10)]print(nums)
result = qsort(nums)print(result)
生成器
生成器表達式:和列表解析有一樣的語法格式
>>>['192.168.1.%s'% i for i inrange(1,255)]#列表解析>>> ips =('192.168.1.%s'% i for i inrange(1,255))#生成器>>>print(ips)<generator object<genexpr> at 0x7f007b5b82b0>>>>for ip in ips:...print(ip)
生成器函數:本質上還是函數
生成器函數可以通過yield關鍵字返回很多中間值
>>>defmygen():...yield100... a =10+20...yield a
...yield'Hello World'...>>> mg = mygen()# 創建一個生成器對象>>>next(mg)# 從生成器對象中取值100>>>next(mg)30>>>next(mg)'Hello World'>>>next(mg)# 生成器對象無值可取的時候,返回StopIteration異常
Traceback (most recent call last):
File "<stdin>", line 1,in<module>
StopIteration
>>> mg = mygen()>>>for data in mg:...print(data)