#一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量 #先开出bbx空间将11传给bbx,然后往下执行又开出bby空间输出abc,结束bby,然后再将3传给bby最后输出33 def bbx(x):#11 def bby(y):#3 return x*y print('abc……') return bby x=bbx(11) print(x(3)) #result=bbx(11)(3) #print(result) #LEGB法则 #local本地函数 #encosing外围函数 #global全局 #builtin模块
'''#必选参数 #默认参数 c=0,必须写在后面 def test(a,b,c=0,*args):#可变参数 *args可变参数输出的是元组(11,),只能写在最后,因为它将从他开始直到最后的所有元素组成元组,我们可以传递一个元祖,但是他将此元组或列表组成元组的第一个元素,可以在传参是加一个*,此时会将元组或列表里的元素取出来在组成元组 print(a,b,c,args) tuple=('a','b','c') test(1,2,1,*tuple) def arr(a,b,**kw):# **ar 关键字参数{字典}以参数=值传参,或者**dicts(字典) print(kw) print(a,b) dicts={'c':3,'d':4} arr(1,2,c=3,d="4",**dicts) #变量的作用域 当全局变量和局部变量一样时,局部变量优先 a,b=1,2 def test2(): global a #表示在此函数中使用全局变量 a=10 print(a,b) def test1(): print(a) test2() test1() number=(1,2,3,4) sum=0 for n in number: sum=sum+n print(sum) print(n)''' #匿名函数 ***=lambda 参数:函数体 必须一句话写完 sum=lambda arg1,arg2:arg1+arg2 print(sum(1,2)) #也可以作为参数传进去 def add(a,b,fun): print(fun(a,b)) add(10,20,lambda arg1,arg2:arg1 + arg2) #filter过滤函数 filter(lambda x:x%3==0,arr)返回一个filter对象 arr=[2,3,6,7,9] print(list(filter(lambda x:x%3==0,arr))) #map 函数 也是一种循环 print(list(map(lambda x:x*2+1,arr))) #print(tuple(map(lambda x:x+1,arr))) print(list(map(lambda x,y:[str('x'),y],arr,arr))) #reduce from functools import reduce print(reduce(lambda x,y:x+y,arr)) #推导 print([x*2+10 for x in arr]) #求1-10中每个数的平方 print([x**2 for x in range(1,11)]) print([x for x in range(100) if x%3==0])