zoukankan      html  css  js  c++  java
  • 三元表达式,列表与字典推导式,函数对象,名称空间和作用域

    函数默认值的细节

    如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确认为当时变量存放的值

    a = 100

    def fn(num=a):

        print(num)  # 100

    a = 200

    fn()

    三元表达式

    用于简化If.... else...的语法结构

    1.只能解决if....else....结构,其他if分支结构不管

    2.一个分支提供一个结果;如果一个分支提供了多个结果,将多个结果通过元组返回

    a = int(input('a: '))

    b = int(input('b: '))

    res = a if a > b else b

    print(res)

    列表与字典推导式

    快速生成列表或字典的语法糖,且能在生成过程中添加简单的逻辑

    1.能被列表推导式推导的数据源必须在循环取值时可以得到一个值

    ls = [v for v in range(1, 6)]

    print(ls)  # [1, 2, 3, 4, 5]

    ls = ['奇数' if v % 2 != 0 else '偶数' for v in range(1, 6)]

    print(ls)  # ['奇数', '偶数', '奇数', '偶数', '奇数']

    能被字典推导式推导的数据源必须在循环取值时可以被解压赋值为两个值

    ls = [['A', 1], ('B', 2)]

    res = {k.lower(): v for k, v in ls}

    print(res)

    函数对象
    python中,所有变量存放的值只要是地址,我们就称之为对象

           -- 所有的变量都是用来存放地址的,所以都是对象

                   -- 存放整型的地址就是整型对象 | 存放函数的地址就是函数对象 | 存放文件的地址就是文件对象

     

     函数对象:存放函数地址的变量就是函数对象

    def fn(): pass

    my_fn = fn

    # my_fn | fn都存着函数地址,所以都是函数对象,函数对象的使用就是 函数对象() 来调用函数

    # 函数对象的应用场景

    # 1.函数对象()就是调用函数

    # 2.函数对象可以直接作为变量赋值给其他变量

    # 3.函数对象可以作为函数的参数

    # 4.函数对象可以作为函数的返回值

    # 5.函数对象可以作为容器类型的成员

    1. 函数对象()就是调用函数

    def fn1():

        pass

    fn1()

    1. 函数对象可以直接作为变量赋值给其他变量

     def fn2():

        pass

    my_fn = fn2

    print('>>>', my_fn, fn2)

    my_fn()

    1. 函数对象可以作为函数的参数

    def fn3(func):  # func = my_fn = fn2

        func()

    fn3(my_fn)

    4. 函数对象可以作为函数的返回值

    def fn4():

        return my_fn

    my_fn2 = fn4()

    5.函数对象可以作为容器类型的成员

    ls = [my_fn, my_fn2]   

    名称空间                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

    名称空间:就是名字与地址的对应关系,可以被Python解释器遍历查找,采用堆栈存储方式

    三种名称空间

    # Built-in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁

    # Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁

    # Local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁

    :文件中的if、while、for、with这些能产生缩减的关键字并不能产生名称空间

    # 加载顺序:Built-in > Global > Local

    函数嵌套定义

    概念:在一个函数内部定义另一个函数

    # 概念:在一个函数内部定义另一个函数

    def outer():

        print('outer run')

        a = 10

        # 函数对象(变量)与普通对象(变量)一样,在函数内部定义,随函数调用而产生,

        # 调用结束而销毁,所以只能在函数内部调用

        def inner():

            print('inner run')

        inner()

    outer()

    作用域

     作用域:变量(名字|对象)起作用的范围

    # 四种作用域

    # Built-in:内置作用域:作用所有文件的所有地方

    # Global:全局作用域:作用当前文件的所有地方

    # Enclosing:嵌套作用域:作用当前函数已内部被嵌套函数

    # Local:局部作用域:作用当前函数内部

     

    # 注:

    # 不同作用域之间名字不冲突,以达到名字的重用

    # 每个作用域优先使用自己作用域中的名字,没有再找更大的名称空间的名字,直到内置,还没有就报错

    # 查找顺序:Local > Enclosing > Global > Built-in

  • 相关阅读:
    如何将php数组或者对象传递给javascript
    js函数定时器,定时读取系统实时连接数
    采用highchart js+flot+rrd生成cpu、mem状态监控图
    jquery动态加载 去除js
    js控制href内容的连接内容的变化
    js动态控制table的tr,td增加及删除
    php生成PDF文件(FPDF)
    .NET 单点登录开源项目
    WF控制台工作流(2)
    WF控制台工作流(1)
  • 原文地址:https://www.cnblogs.com/komorebi/p/10775618.html
Copyright © 2011-2022 走看看