zoukankan      html  css  js  c++  java
  • 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()就可以了
    
    
     
     
  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/yangli0504/p/8665553.html
Copyright © 2011-2022 走看看