zoukankan      html  css  js  c++  java
  • 2019.08.09学习整理

    2019.08.09学习整理

    函数对象

    函数是第一类对象,即函数可以被当做数据处理。

    1.函数对象的四大功能

    1.引用

    x = 'hello nick'
    y = x
    
    f = func
    print(f)
    
    <function func at 0x10af72f28>
    

    2.当作参数传给一个函数

    len(x)
    
    
    def foo(m):
        m()
    
    
    foo(func)
    from func
    

    3.可以当作函数的返回值

    def foo(x):
        return x
    
    
    res = foo(func)
    print(res)
    res()
    
    <function func at 0x10af72f28>
    
    from func
    

    4.可以当作容器类型的元素

    l = [x]
    
    function_list = [func]
    function_list[0]()
    
    from func
    

    函数嵌套

    1.函数的嵌套定义

    函数内部定义的函数,无法在函数外部使用内部定义的函数。

    def f1():
        def f2():
            print('from f2')
        f2()
    f1()
    

    from f2

    2.函数的嵌套调用

    def max2(x, y):
        if x > y:
            return x
        else:
            return y
    
    
    def max4(a, b, c, d):
        res1 = max2(a, b)
        res2 = max2(res1, c)
        res3 = max2(res2, d)
        return res3
    
    
    print(max4(1, 2, 3, 4))
    

    4

    名称空间和作用域

    1.名称空间

    名称空间(name spaces):在内存管理那一章节时,我们曾说到变量的创建其实就是在内存中开辟了一个新的空间。但是我们一直在回避变量名的存储,其实在内存中有一块内存存储变量名与变量间的绑定关系的空间,而这个空间称为名称空间。

    1.1内置名称空间

    内置名称空间:存放Pyhton解释器自带的名字,如int、float、len

    生命周期:在解释器启动时生效,在解释器关闭时失效

    1.2全局名称空间

    全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间,如下面代码中的x、func、l、z

    生命周期:在文件执行时生效,在文件执行结束后失效

    x = 1
    
    def func():
        pass
    
    l = [1, 2]
    
    if 3 > 2:
        if 4 > 3:
            z = 3
    

    1.3局部名称空间

    局部名称空间:用于存放函数调用期间函数体产生的名字,如下面代码的f2

    生命周期:在文件执行时函数调用期间时生效,在函数执行结束后失效

    def f1():
        def f2():
            print('from f2')
        f2()
    
    f1() 
    

    2.作用域

    域指的是区域,作用域即作用的区域。

    全局作用域:全局有效,全局存活,包含内置名称空间和全局名称空间。

    2.1全局作用域

    # 全局作用域
    x = 1
    
    
    def bar():
        print(x)
    
    
    bar()
    1
    

    2.2 局部作用域

    # 局部作用域
    def f1():
        def f2():
            def f3():
                print(x)
            x = 2
            f3()
        f2()
    
    
    f1()
    2
    

    2.3 注意点

    # 作用域注意点
    x = 1
    
    
    def f1():  # 定义阶段x=1
        print(x)
    
    
    def f2():
        x = 2
        f1()
    
    
    f2()
    1
    

    2.4 函数对象+作用域应用

    # 作用域应用
    def f1():
        def inner():
            print('from inner')
        return inner
    
    
    f = f1()  # 把局部定义的函数放在全局之中
    
    
    def bar():
        f()
    
    
    bar()
    from inner
    
  • 相关阅读:
    annotation:@Override出现The method of type must override asuperclass解决方案
    把Object对象转换成XML格式的数据
    把用SQL查询的分页对象转化为内容为Object的分页对象
    java实现webservice实例
    把Excel表中的数据导入sql service数据库的语句
    把汉字串转成对应的汉语拼音
    JDBC连接mySQL数据库流程及其原理
    oracle将多列进行合并
    源码分析 | ClickHouse和他的朋友们(13)ReplicatedMergeTree表引擎及同步机制
    源码分析 | ClickHouse和他的朋友们(1)编译、开发、测试
  • 原文地址:https://www.cnblogs.com/zhangmingyong/p/11329304.html
Copyright © 2011-2022 走看看