命名空间与作用域 全局作用域: 内置名称空间 builtins 全局名称空间 文件中没有缩进的定义的名称 在这个文件的任何位置都可以使用 局部作用域: 局部名称空间 局部----------》全局-----------》内置 命名空间的查询:globals() locals() 函数嵌套: 嵌套调用 嵌套定义 函数定义时仅显示语法错误函数对象: 函数是第一类对象: 可以被当做变量来传递 可以被当做参数 可以被当做返回值 可以被当做容器的一个元素闭包:内部定义的函数,且包含对外部作用域名字的引用而不是全局作用域名字的引用 作用:闭包包含它的内存地址和自身引用的参数(自带干粮) 应用场景:专门爬某一网站的爬虫# print(f.__closure__) # 查看闭包f2的内存地址和它引用的外部参数的个数# print(f.__closure__[0].cell_contents) # 查看f2引用的外部参数的值
#嵌套定义:x = 9999999999def f1(): #x = 1 print(‘----------------‘,x) def f2(): x = 2 print(‘------------‘,x) def f3(): x= 3 print(‘------‘,x) f3() f2()f1() #嵌套调用def my_max(x,y): res = x if x > y else y return res def my_max1(a,b,c,d): res1 = my_max(a,b) res2 = my_max(res1,c) res3 = my_max(res2,d) return res3print(my_max1(1,20,3,4)) def foo(): print(‘from foo‘) return ‘aaa‘print(foo) # 打印函数内存地址 print(foo()) #打印函数运行结果和返回值 #函数可以被赋值f = fooprint(f)f()#把函数当成参数传递def bar(func): print(‘from bar‘) func() bar(foo)#把函数当成返回值def bar(func): return funcbar(foo)f = (bar(foo))f()print(bar) #把函数当做容器的一个元素def add(): print(‘-------------------add‘)def search(): print(‘--------------------search‘)cmd_dic={ ‘add‘:add, ‘search‘:search}def tell_msg(): msg = """ ********** search:查找 add:增加 *********** """ print(msg)def main(): tell_msg() m = input(‘please input your choice:‘) cmd_dic[m]() main()#闭包x =1def f1(x): def f2(): print(x) return f2f = f1(999999999999)f()print(f.__closure__) # 查看闭包f2的内存地址和它引用的外部参数的个数print(f.__closure__[0].cell_contents) # 查看f2引用的外部参数的值#闭包的应用#爬虫from urllib.request import urlopendef get(url): return urlopen(url).read() print(get(‘http://www.baidu.com‘)) #专门爬pythonfrom urllib.request import urlopen def get(url): def f2(): n = urlopen(url).read() print(n) return f2f = get(‘http://www.baidu.com‘)f()
时间: 2024-10-08 23:06:30