>>> 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)