• 函数复习之2


    1.函数对象复习

    2函数嵌套复习

    3名称空间与作用域

    4闭包函数

    1.函数对象复习

    #函数对象:函数是第一类对象,
    #特点:
    #1:可以被引用
    # def func():pass
    # f=func
    # print(f is func)
    #
    # x=1
    # y=x
    # print(x is y)
    #2:可以当做参数传给其他函数
    # def foo():
    #     print('from foo')
    # def bar(func):
    #     print(func)
    #     func()
    # bar(foo)
    
    
    #3:可以当做函数的返回值
    # def foo():
    #     print('from foo')
    # def bar(func):
    #     print(func)
    #     return func
    #
    # f=bar(foo)
    # print(f)
    #4:可以当做容器类型的一个元素
    def get():
        print('get')
    
    def put():
        print('put')
    
    def auth():
        print('auth')
    
    func_dic={
        'get':get,
        'put':put,
        'auth':auth
    }
    print(func_dic)
    def main():
        while True:
            cmd=input('>>: ').strip()
            if not cmd:continue
            # if cmd == 'get':
            #     pass
            # elif cmd == 'put':
            #     pass
            if cmd in func_dic:
                func_dic[cmd]()
    
    if __name__ == '__main__':
        main()

    2.函数嵌套

    函数嵌套调用
    # def my_max2(x,y):
    #     # if x > y:
    #     #     return x
    #     # else:
    #     #     return y
    #     return x if x > y else y
    #
    # # print(my_max2(1,2))
    # def my_max4(a,b,c,d):
    #     res1=my_max2(a,b)
    #     res2=my_max2(res1,c)
    #     res3=my_max2(res2,d)
    #     return res3
    # print(my_max4(1,2,3,4))
    
    #函数嵌套定义
    def f1():
        x=1
        def f2():
            def f3():
                pass
    
    # print(f1)
    f1()
    
    
    print(f2)
    print(x)

    3空间名称与作用域

    #名称空间:存放名字与值绑定关系的地方,名称空间分为三种
    #1 内置名称空间:会随着python解释器的运行而产生,解释器关闭则回收,存放python解释器自带的名字:
    #2 全局名称空间:执行python文件时产生,文件执行结束后回收,存放的文件级别定义的名字
    x=1
    y=2
    def f1():
        z=2
    class Foo:
        m=123
    if 3 > 2:
        n=3
    
    f1()
    #3 局部名称空间:只有在调用函数时才临时产生,在调用结束后就回收,存放的函数内部定义的名字
    
    
    #三类名称空间的加载顺序:1->2-->3
    #查找名字的顺序:3-->2--->1
    
    
    # x='global'
    # def f1():
    #     # x=1
    #     def f2():
    #         # x=2
    #         print('f2')
    #         def f3():
    #             # x=3
    #             print('f3',x)
    #         f3()
    #     f2()
    # # print(max)
    # # max=123123123123123
    #
    #
    # f1()
    # print(x)
    
    
    
    
    # def func():
    #     import time
    #     time.sleep(3)
    #     print('....')
    #
    # func()
    # print('zhu=[=====>')
    
    
    
    #作用域:域指的是范围
    
    #全局作用域:包含内置与全局名称空间的名字,文件执行时生效,执行结束失效
    #全局存活,全局有效
    
    #局部作用域:包含局部名称空间的名字,只在函数调用时生效,函数调用结束后失效
    #临时存活,局部有效
    
    
    
    #强调:作用域关系在函数定义阶段就已经固定了,与调用位置无关
    # x=1
    # def f1():
    #     # x=2
    #     def f2():
    #         # x=3
    #         print('f2',x)
    #     return f2
    #
    # f=f1()
    # f()
    
    # def bar():
    #     x='bar'
    #     f()
    #
    # bar()
    
    # global 与nonlocal
    # x=1
    # def func():
    #     global x
    #     x=2
    #
    # func()
    # print(x)
    
    
    # x=1
    # def f1():
    #     x=2
    #     def f2():
    #         nonlocal x
    #         x=10
    #     f2()
    #     print(x)
    #
    # f1()
    # print(x)

    4闭包函数

    #闭包函数:定义在函数内部的函数,该函数包含对外部作用域而非全局作用域的名字的引用,该函数就是闭包函数
    # x=1
    # def f1():
    #     y=222222
    #     def f2():
    #         print(y)
    #     return f2
    # f=f1()
    # print(f)#是f2的地址
    # print(f.__closure__)#查看是否是闭包函数
    # print(f.__closure__[0].cell_contents)#产看里面的内容

    爬虫两种方式:

    普通函数传参:

    # def index(url):
    #     return urlopen(url).read()
    # # print(index('http://www.baidu.com'))

    闭包函数:

    #方式二:将该函数做闭包函数
    def outter(url):
        # url='http://www.baidu.com'
        def index():
            return urlopen(url).read()
        return index
    
    # baidu=outter('http://www.baidu.com')
    # baidu()
  • 相关阅读:
    currentColor
    clip:rect()
    webkitAnimationEnd事件与webkitTransitionEnd事件
    正方体旋转demo
    由-webkit-transform-style:preserve-3d;所想
    设置网站的图标
    条件注释判断浏览器
    怎样动态地插入不会暴露给用户的JS文件
    IOC Unity
    C# 线程
  • 原文地址:https://www.cnblogs.com/1a2a/p/7419225.html
Copyright © 2020-2023  润新知