python块级作用域和函数作用域
python块级作用域和函数作用域
(1)#Python中无块级作用域: #java/c# 不可以执行下面代码 #python/javascript 可以执行 if 1 == 1: name = 'python' print(name) for i in range(10): name = i print(name) (2)#Python中以函数为作用域: def func(): name = 'python' func() print(name) name = 'python' def f1(): name = 'linux' print(name) f1() (3)#python作用域链,由内往外找,直到找不到报错 name = 'python' def f1(): name = 'a' def f2(): name = 'b' print(name) f2() f1() (4)#python的作用域在执行之前已经确定 name = 'python' def f1(): print(name) def f2(): name = 'linux' f1() f2() (5)#在函数未执行之前作用域已经确定了 name = 'python' def f1(): print(name) def f2(): name = 'linux' return f1 f2() (6)#列表解析 li = [x+100 for x in range(10)] li = [x+100 for x in range(10) if x > 6] print(li) li = [ lambda : x for x in range(10)] #li列表 #li列表中的元素:[函数,函数,函数....] #函数在没有执行前,内部代码部执行 #li[0],函数 #函数() #返回值是??? print(li) ret = li[0]() print(ret) (7)上面的表达式就相当于下面 l1 = [] for i in range(10): def f1(): return i l1.append(f1) ret = l1[0]() print(ret) ret1 = l1[1]() print(ret1) (8)# 只要执行了就能拿到值 l1 = [] for i in range(10): def f1(x=i): return x l1.append(f1) ret = l1[0]() print(ret) ret = l1[1]() print(ret) ret = l1[2]() print(ret)