1.函数对象复习
2函数嵌套复习
3名称空间与作用域
4闭包函数
1.函数对象复习
#函数对象:函数是第一类对象, #特点: #1:可以被引用 # def func():pass # f=func # print(f is func) # # x=1 # y=x # print(x is y) #2:可以当做参数传给其他函数 # def foo(): # print('from foo') # def bar(func): # print(func) # func() # bar(foo) #3:可以当做函数的返回值 # def foo(): # print('from foo') # def bar(func): # print(func) # return func # # f=bar(foo) # print(f) #4:可以当做容器类型的一个元素 def get(): print('get') def put(): print('put') def auth(): print('auth') func_dic={ 'get':get, 'put':put, 'auth':auth } print(func_dic) def main(): while True: cmd=input('>>: ').strip() if not cmd:continue # if cmd == 'get': # pass # elif cmd == 'put': # pass if cmd in func_dic: func_dic[cmd]() if __name__ == '__main__': main()
2.函数嵌套
函数嵌套调用 # def my_max2(x,y): # # if x > y: # # return x # # else: # # return y # return x if x > y else y # # # print(my_max2(1,2)) # def my_max4(a,b,c,d): # res1=my_max2(a,b) # res2=my_max2(res1,c) # res3=my_max2(res2,d) # return res3 # print(my_max4(1,2,3,4)) #函数嵌套定义 def f1(): x=1 def f2(): def f3(): pass # print(f1) f1() print(f2) print(x)
3空间名称与作用域
#名称空间:存放名字与值绑定关系的地方,名称空间分为三种 #1 内置名称空间:会随着python解释器的运行而产生,解释器关闭则回收,存放python解释器自带的名字: #2 全局名称空间:执行python文件时产生,文件执行结束后回收,存放的文件级别定义的名字 x=1 y=2 def f1(): z=2 class Foo: m=123 if 3 > 2: n=3 f1() #3 局部名称空间:只有在调用函数时才临时产生,在调用结束后就回收,存放的函数内部定义的名字 #三类名称空间的加载顺序:1->2-->3 #查找名字的顺序:3-->2--->1 # x='global' # def f1(): # # x=1 # def f2(): # # x=2 # print('f2') # def f3(): # # x=3 # print('f3',x) # f3() # f2() # # print(max) # # max=123123123123123 # # # f1() # print(x) # def func(): # import time # time.sleep(3) # print('....') # # func() # print('zhu=[=====>') #作用域:域指的是范围 #全局作用域:包含内置与全局名称空间的名字,文件执行时生效,执行结束失效 #全局存活,全局有效 #局部作用域:包含局部名称空间的名字,只在函数调用时生效,函数调用结束后失效 #临时存活,局部有效 #强调:作用域关系在函数定义阶段就已经固定了,与调用位置无关 # x=1 # def f1(): # # x=2 # def f2(): # # x=3 # print('f2',x) # return f2 # # f=f1() # f() # def bar(): # x='bar' # f() # # bar() # global 与nonlocal # x=1 # def func(): # global x # x=2 # # func() # print(x) # x=1 # def f1(): # x=2 # def f2(): # nonlocal x # x=10 # f2() # print(x) # # f1() # print(x)
4闭包函数
#闭包函数:定义在函数内部的函数,该函数包含对外部作用域而非全局作用域的名字的引用,该函数就是闭包函数
# x=1 # def f1(): # y=222222 # def f2(): # print(y) # return f2 # f=f1() # print(f)#是f2的地址 # print(f.__closure__)#查看是否是闭包函数 # print(f.__closure__[0].cell_contents)#产看里面的内容
爬虫两种方式:
普通函数传参:
# def index(url): # return urlopen(url).read() # # print(index('http://www.baidu.com'))
闭包函数:
#方式二:将该函数做闭包函数 def outter(url): # url='http://www.baidu.com' def index(): return urlopen(url).read() return index # baidu=outter('http://www.baidu.com') # baidu()