zoukankan      html  css  js  c++  java
  • python 之 函数(嵌套调用、名称空间与作用域、函数对象)

    5.36 命名关键字

    什么是命名关键字参数? 格式:在*后面参数都是命名关键字参数 特点: 1 必须被传值 2 约束函数的调用者必须按照key=value的形式传值 3 约束函数的调用者必须用我们指定的key名

    def foo(x,y,*,z):
         print(x,y,z)
     foo(1,2)           # z必须被传值
     foo(1,2,3)         # z必须以key=value的形式传值
     foo(1,2,aaa=3)     #必须以 z 传值
     foo(1,2,z=3)       # 1 2 3

    5.4 函数嵌套调用

    函数的嵌套调用:在函数内又调用了其他函数

    def max2(x,y):
         if x > y:
             return x
         else:
             return y
    ​
     def max3(x,y,z):
         res1=max2(x,y)
         res2=max2(res1,z)
         return res2
    ​
     print(max3(11,199,2))

    5.5 函数名称空间与作用域

    5.51 名称空间

    名称空间:存放名字与值绑定关系的地方

    名称空间分为三类:

    1 内置名称空间:存放Python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效

    2、全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件执行期间被删除则失效

    x=1
    def func():     
        name='egon'
    del func
    a = 10
    def fun():
       print(a)
    fun()
    print(a)

    3、局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放于局部名称空间),在函数调用时临时生效,函数结束则失效

    def fun():   
        a = 10    
        print(a)
    fun() 
    print(a)    # a已经不存在了.. 

    加载顺序:内置名称空间 ----》全局名称空间 -----》局部名称空间 查找名字:局部名称空间 ----》全局名称空间 -----》内置名称空间

    5.52 作用域

    全局作用域:包含的是内置名称空间与全局名称空间的名字 特点: 1、在任何位置都能够访问的到 2、该范围内的名字会伴随程序整个生命周期

    局部作用域:包含的是局部名称空间的名字 特点: 1、只能在函数内使用 2、调用函数时生效,调用结束失效

    5.6 函数对象

    5.61 函数对象的作用

    1、可以被引用

    x=1
     y=x
     def bar():
         print('from bar')
     f=bar
     f()

    2、func可以当作参数传给x

     def bar(x):
         print(x)
         x()
     bar(func)
     def bar():
         print('from bar')
    ​
     def wrapper(func): #func=bar
         func() #bar()
    ​
     wrapper(bar)

    3、func还可以当作返回值

    def bar(x): # x=func
         return x #return func
     res=bar(func) #res=func
     print(res)
     res()

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

    def get():
         print('from get')
     def put():
         print('from put')
     l=[get,put]
     l[0]()

    5.62 函数对象应用

    利用函数作容器类型元素实现注册:
    def auth():
        print('登陆。。。。。')
    def reigster():
        print('注册。。。。。')
    def search():
        print('查看。。。。')
    def transfer():
        print('转账。。。。')
    def pay():
        print('支付。。。。')
    ​
    dic={
        '1':auth,
        '2':reigster,
        '3':search,
        '4':transfer,
        '5':pay
    }
    def interactive():
        while True:
            print("""
            1 认证
            2 注册
            3 查看
            4 转账
            5 支付
            """)
            choice=input('>>: ').strip()
            if choice in dic:
                dic[choice]()
            else:
                print('非法操作')
    ​
    interactive()

    5.7 闭包函数

    定义在函数内部的函数, 并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

    闭:指的是定义在函数内部的函数 作用域关系 在函数定义阶段就规定死了,与调用位置无关

     def outter():
         x=2
         def inner():
             print(x)
         return inner
    ​
     f=outter()     #f=inner
     f()

    5.71 为函数体传值的方式

    方式一:将值以参数的形式的传入

    import requests
    def get(url):
        response=requests.get(url)
        if response.status_code == 200:
            print(response.text)
    get('https://www.baidu.com')

    方式二:以闭包函数的方式调用

    import requests
    import time
    def outter(url): #url='https://www.baidu.com'
        def get():
            response=requests.get(url)
            if response.status_code == 200:
                print(response.text)
        return get
    baidu=outter('https://www.baidu.com')
    baidu()
    print('=====================>')
    time.sleep(3)
    baidu()
  • 相关阅读:
    js面向对象编程-高级内容
    (转)js中的hasOwnProperty和isPrototypeOf方法
    Bootstrap_表单
    Bootstrap_表格
    Bootstrap_排版
    Bootstrap_网格系统
    Bootstrap_CSS概览
    redis的搜索组件 redis-search4j
    有哪些值得学习的spring boot开源项目?
    国内最火的10款Java开源项目,都是国人开发,CMS居多
  • 原文地址:https://www.cnblogs.com/mylu/p/11000436.html
Copyright © 2011-2022 走看看