【python之路40】Python 作用域

python的作用域与javaScript是一样的,参考:http://www.cnblogs.com/sunshuhai/p/9112578.html

一、python是以函数作为作用域的

if 1==1:
    xo = 123
print(xo) 
#输出:123
xo = "alex"
def f1():
    print(xo)
def f2():
    xo = "xxoo"
    f1()
f2()
#输出:alex

 二、python函数是有内层向外查找的

li=[]
for i in range(10):
    def f1():
        return i
    li.append(f1)
print(li)  #输出列表,列表内包含10个函数
print(li[0]()) #输出:9,
#为什么输出9呢?
#1、执行完for循环函数只是写入内存并没有被执行
#2、此时f1函数外部变量i的值为9,函数执行时首先去函数内部找i,找不到时则逐层向外查找

以上代码换为lambda表达式结果是一样的:

li=[]
for i in range(10):
    f1=lambda :i
    li.append(f1)
print(li)  #输出列表,列表内包含10个函数
print(li[0]()) #输出:9,

可以继续简化:

li=[]
for i in range(10):
    li.append(lambda:i)
print(li)  #输出列表,列表内包含10个函数
print(li[0]()) #输出:9,

三、支持列表特殊操作语法

 python支持列表特殊操作,如下面代码:

li = [x for x in range(10)]
print(li)  
#结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

开头的X可以支持表达式运算:

li = [x+10 for x in range(10)]
print(li)
#结果:[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

还可以支持条件语句:

li = [x+10 for x in range(10) if x > 5]
print(li)
#结果:[[16, 17, 18, 19]]
#循环x,判断x的值是否大于5,如果大于5则+10

 那么再看下面的代码:

li = [lambda: x for x in range(10)]
print(li)  #结果是:列表内存放着10个函数
print(li[0]()) #结果是:9
#循环每x,并返回lambda:x
原文地址:https://www.cnblogs.com/sunshuhai/p/9112961.html