• 函数嵌套-名称空间与作用域-函数对象-闭包函数



    一、可变长度参数*的应用场景

    def sum2(*args): #args=(1,2,3)
    res=0
    for num in args:
    res+=num
    return res

    print(sum2(1,2,3,4,5,6,7))

    ** 的应用场景
    def auth(name,pwd,**kwargs):
    print(name)
    print(pwd)
    print(kwargs)

    auth(name='egon',pwd='123',group='group1')

    二、命名关键字参数
    什么是命名关键字参数?
    格式:在*后面参数都是命名关键字参数
    特点:
    1 必须被传值
    1 约束函数的调用者必须按照key=value的形式传值
    2 约束函数的调用者必须用我们指定的key名
    使用方式auth(name="egon",pwd="123")
    :param args:
    :param kwargs:
    :return:
    """
    # print(args,kwargs)
    if len(args) !=0:
    print('必须用关键字的形式传参')
    return
    if 'name' not in kwargs:
    print('必须用指定的key名name')
    return
    if 'pwd' not in kwargs:
    print('必须用指定的key名pwd')
    return

    name=kwargs['name']
    pwd=kwargs['pwd']
    print(name,pwd)

    auth('egon','123')
    auth(name='egon',pwd='123') #约束函数的调用者必须用key=value的形式传值
    auth('egon',pwd='123')
    auth(name='egon',pwd='123')
    auth('egon',123)

    auth(x='egon',y='123')
    print(help(auth))

    三、函数的嵌套调用:在函数内又调用了其他函数
    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))

    四、函数的嵌套定义:在函数内又定义其他函数

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

    '''
    f1
    f2
    f3
    '''

    五、名称空间:存放名字与值绑定关系的地方
    二:名称空间分为三类

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


    2、全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件执行期间被删除则失效
    x=1
    def func():
    name='egon'

    del func

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

    func(1)

    重要特别注意:
    加载顺序:内置名称空间-》全局名称空间-》局部名称空间
    查找名字:局部名称空间-》全局名称空间-》内置名称空

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

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


    七、函数在python中是第一类对象?

    1、func可以被引用
    f=func

    2、func可以当作参数传给x
    def bar(x):
    print(x)
    x()
    bar(func)
    3、func还可以当作返回值
    def bar(x): # x=func
    return x #return func

    res=bar(func) #res=func
    # print(res)
    res()
    4 可以当中容器类型的元素
    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()
    l=[auth,reigster,search,interactive]
    print(l)

    八、闭包函数

    闭:指的是定义在函数内部的函数
    !!!作用域关系 在函数定义阶段就规定死了,与调用位置无关
    def outter():
    x=2
    def inner():
    # x=1
    print('from inner',x)

    return inner

    def foo():
    x=1111111111111111111111111111
    f()

    foo()

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

    def outter():
    name='egon'
    def inner():
    print('my name is %s' %name)

    return inner


    f=outter()

    了解:
    为函数体传值的方式
    方式一:将值以参数的形式的传入
    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'

    # 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')
    python=outter('https://www.python.org')

    baidu()
    baidu()
    python()
  • 相关阅读:
    线段树模板
    树状数组练习
    树状数组模板
    codeforce——思维dp
    fib博弈
    寒假总结
    相邻的数互质
    大数取模运算
    阶乘因式分解(一)
    1和0既非素数也非合数
  • 原文地址:https://www.cnblogs.com/zhaodafa/p/8665376.html
Copyright © 2020-2023  润新知