Python day8
#三元运算 # a = 20 # b = 10 # if a > b: # c = 5 # else: # c = 10 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c = 5 if a>b else 10 # print(c) #命名空间 #局部命名空间 #全局命名空间 #内置命名空间 def my_max(a,b): c = a if a > b else b return c m = my_max(5,8) #加载顺序 硬盘上——内存里 #内置-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载) a = 5 b = 8 def my_max(): c = a if a > b else b return c # m = my_max() # print(m) #作用域 #命名空间+作用域是分不开的 #两种 #全局作用域:全局命名空间、内置命名空间 #局部作用域:局部命名空间 def func(): return max(1,2,3) # print(func()) def max(a,b,c): return 2 # print(max(1,2,3)) #站在全局看: #使用名字: # 如果全局有:用全局的 # 如果全局没有:用内置的 #为什么要有作用域的概念: #为了函数内的变量不会影响到全局 # def max(): # a = 10 # b = 20 # # a = 2 # b = 3 # my_max(30,50) #函数的嵌套调用 def f1(): print('f1') def f2(): a = 10 f1() #函数的嵌套 #为了保护内部函数,确定内部函数只能在外部函数中被调用 def animal(): def tiger(): print('bark') print('eat') tiger() # animal() #函数名的本质 def func(): print('func') print(func) # print(func) # f = func # print(f) # f() # # l = [f] # print(l) # #l[0] == f # l[0]() #可以用作函数的参数 def func(): print('func') def func2(f): print(f) f() print('func2') # func2(func) #可以作为函数的返回值 def func(): print('func') def func2(f): print('func2') return f fu = func2(func) # print(fu) # fu() #==>func() # print(fu) # print(func) #如果我想在全局使用内部的函数 def func(): print('func') # print(func) # f = func # l = [f] # f1 = l[0] #== f # print(f1) # print(f) # print(func) # func() # f() #f1() #函数名做参数 # def func(): # print('func') # def func2(f): # f() # func2(func) #函数的名字可以做返回值 def func(): def func2(): print('hello') return func2 # f2 = func() # f2() # f = func def heiheihei(): ha = 10 heng = 20 def inner(): print(ha) print(heng) inner() # heiheihei() #作用域: #小范围的可以用大范围的 #但是大范围的不能用小范围的 #范围从大到小(图) #在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的 #如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。 #如果都没有,报错 #作用域链 x = 1 def heihei(): # x = 'h' def inner1(): # x = 'i1' def inner2(): print(x) inner2() inner1() # heihei() #闭包函数:内部函数,包含了对外部作用域中变量的引用 def hei(): x = 20 def inner(): ''' 闭包函数 ''' print(x) #闭包 #1.闭 内部的函数 #2.包 包含了对外部函数作用域中变量的引用 #闭包的常用形式 def hei(): x = 20 def inner(): print(x) #局部的 return inner # i = hei() # i() #全局 from urllib.request import urlopen # def index(): # url = "http://www.cnblogs.com/Eva-J/articles/7125925.html" # return urlopen(url).read() # index() def index(): url = "http://www.cnblogs.com/Eva-J/articles/7125925.html" def inner(): return urlopen(url).read() print(inner.__closure__) return inner # u = "http://www.cnblogs.com/Eva-J/articles/7125925.html" get = index() print(get()) #作用域: #小范围的可以用大范围的 #但是大范围的不能用小范围的 #范围从大到小(图) #在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的 #如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。 #如果都没有,报错 a = 20 b = 50 def haha(): x = 1 y = 2 print(globals()) #全局作用域中的名字 print(locals()) #局部作用域中的名字 # haha() # print(globals()) #全局作用域中的名字 # print(locals()) #全局的局部还是全局 a = 10 def heiheihei(): global a a = 20 # heiheihei() # print(a) def f(): a = 3 def f1(): a = 1 def f2(): nonlocal a # 1.外部必须有这个变量 # 2.在内部函数声明nonlocal变量之前不能再出现同名变量 # 3.内部修改这个变量如果想在外部有这个变量的第一层函数中生效 a = 2 f2() print('a in f1 : ', a) f1() print('a in f : ',a) f() # def f1(a): # print(a) # def f(): # print(11111) # a = 2 # f1(None) def f(): a = 3 def f1(): a = 1 def f2(): nonlocal a a = 2 f2() print('a in f1 : ', a) f1() print('a in f : ',a) f() print(1)