• Python之旅.第三章.函数


    一、命名关键字参数:

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

    def foo(x,y,*,z): #创建foo函数,z为命名关键字参数
    print(x,y,z)
    #foo(1,2,aaa=3) #报错,z为命名关键字参数,只能用用关键字z=值
    foo(1,2,z=3)
    ——————————————————————————————
    def auth(*args,name,pwd): #设定,name,pwd为命名关键字参数
    print(name,pwd)

    auth(pwd='213',name='egon') #输入关键字参输

    二、函数的嵌套:

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


    2、函数的嵌套定义:在函数内又定义其他函数
    def func1():            #定义func1函数
    print('from func1')
    def func2(): #func2=内存地址 #嵌套定义func2函数
    print('from func2')

    print(func2) #<function func1.<locals>.func2 at 0x0000024907A098C8> #输出func2函数名地址
    func2()

    func1()

    ——————————————————————————————————

    def f1(): #嵌套定义,调用f1执行,得出所有函数输出的值,全部被使用
    print('f1')
    def f2():
    print('f2')
    def f3():
    print('f3')
    f3()
    f2()
    f1()

    '''
    f1
    f2
    f3
    '''
    三、命名空间与作用域
    一:名称空间:存放名字与值绑定关系的地方
    x=1111111111

    def func():
    pass

    二:名称空间分为三类

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

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

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

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


    len='global' #调用f1,运行到f2方法输出len,从当前向外查找值,最后输出为global
    def f1():
    # len=1
    def f2():
    # len=2
    print(len)
    f2()

    f1()

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

    局部作用域:包含的是局部名称空间的名字
    特点:
    1、只能在函数内使用
    2、调用函数时生效,调用结束失效
    四、函数对象
    函数在python中是第一类对象?

    1、可以被引用
    def bar(): #创建bar函数
    print('from bar')

    f=bar #引用bar函数
    f()

    2、可以当中参数传入
    def bar(): #创建bar函数
    print('from bar')

    def wrapper(func): #func=bar #创建wrapper函数,设定参数func
    func() #bar()

    wrapper(bar) #把bar当做参数传入


    3、可以当做函数的返回值
    def bar(): #创建bar函数
    print('from bar')

    def foo(func): #func=<function bar at 0x00000225AF631E18> #创建foo函数,设定变量func,返回变量func
    return func #return <function bar at 0x00000225AF631E18>

    f=foo(bar) #f=<function bar at 0x00000225AF631E18> #把bar函数当做参数传入变量func,成为foo函数的返回值
    f()

    4、可以当中容器类型的元素
    def get(): #创建get 函数
    print('from get')

    def put(): #创建put函数
    print('from put')

    l=[get,put] #建立列表输入两个函数

    l[0]() #安索引调用get函数
    ——————————————————————————————————
    例:
    def func():
    print('from func')

    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
    }

    print(dic)
    dic['2']()

    def interactive():
    while True:
    print("""
    1 认证
    2 注册
    3 查看
    4 转账
    5 支付
    """)
    choice=input('>>: ').strip()
    if choice in dic:
    dic[choice]()
    else:
    print('非法操作')


    interactive()

    五、闭包函数
    1、闭包函数

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

    return inner #返回inner函数


    f=outter() #f=inner #把返回的嵌套定义函数赋予f,这样f就可以调用被嵌套定义的函数了
    f()

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

    def outter(): #定义函数outter,并定义变量name
    name='egon'
    def inner():
    print('my name is %s' %name) #定义函数inner,输出name

    return inner #返回函数inner


    f=outter() #把嵌套定义函数inner赋值给f

    了解:
    为函数体传值的方式
    方式一:将值以参数的形式的传入
    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 #定义函数outter,形参url
    def get():          #定义函数 get 根据网址,怕网址数据
    response=requests.get(url)
    if response.status_code == 200:
    print(response.text)

    return get #返回函数get


    baidu=outter('https://www.baidu.com') #把带实参百度地址的函数赋予baidu,以后只需要运行只需要运行baidu()就可以了
    python=outter('https://www.python.org') #把带实参python地址的函数赋予python,以后只需要运行只需要运行python()就可以了
    
    
     
     
  • 相关阅读:
    VS_VERSION_INFO
    ocx中调用ocx
    MFC注册窗口类以及FindWindow按窗口类名查询(避免用#32770获取窗口句柄)
    VS2010制作dll
    CComboBox自动匹配
    ado连接mysql和ORACLE
    正则表达式
    ocx 中使用CImage和CComPtr
    VC ADO “ParameterDirectionEnum”:“enum” 类型等 重定义问题 解决方案
    VC使用ADO连接远程oracle数据库
  • 原文地址:https://www.cnblogs.com/yangli0504/p/8665553.html
Copyright © 2020-2023  润新知