• 【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
  • 相关阅读:
    js静态成员和实例成员
    js构造函数
    js创建对象
    js演示面向对象
    JavaScript特点
    像素鸟游戏
    图片瀑布流
    微信聊天模拟
    飞机游戏动画特效
    SpringBoot 核心理论
  • 原文地址:https://www.cnblogs.com/sunshuhai/p/9112961.html
Copyright © 2020-2023  润新知