python 之 函数 2

发布时间:2019-06-11 21:26:24编辑:auto阅读(1789)

    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()

关键字