• 函数进阶


    一 、定义函数的三种方式

      1.空函数:可以快速帮助你构建项目框架,使项目框架清晰明了,应用频率非常高。

    def register():
        pass
    def login():
        pass
    def shopping():
        pass
    def pay():
        pass
    def func():
        pass
    

    2.无参函数:函数名括号内没有参数

    def func():
        print('from func')  # 无参函数

    3.有参函数:函数名括号内有参数

    def func1(x,y,*args,**kwargs):  #有参函数
        pass

    二、函数对象

      函数是第一类对象:函数名指向的值可以被当中的参数传递

      1、函数名可以被传

    def func():
        print('from func')
        print('func')
        print(id(func))
    f=func  #函数名可以被传递
    func()
    print(f)
    f()

    2.函数名可以被当作参数传递给其他函数

    def func():
        print('from func')
    def index(args):
        print(args)
        args()
        print('from index')
    # index(1)
    index(func)  

    3.函数名可以被当作函数的返回值

    def index():
        print('index')
    def func():
        print('func')
        return index
    res = func()
    print(res)#函数名可以被当作函数的返回值

    4.函数名可以被当作容器类型的参数

    def func():
        print('func')
    print(func())
    l =[1,2,func,func()]
    print(l)   # 函数名可以当做容器类型的参数

    三、函数的嵌套调用

    作用:在函数内部调用其他函数

       可以将复杂的逻辑简单化

    def my_max(a,b,):
        if a >b :
            return a
        return b
    def my_max4(a,b,c,d):  #比较四个数的大小
        res = my_max(a,b)
        res1 = my_max(res,c)
        res2 = my_max(res1,d)
        return res2
    print(my_max4(1,2,33,23))

    定义:写一个函数,该函数用户可以通过传参的不同控制函数执行不同的功能

    def outer():
        x = 1
        print('outer')
        def inner():
            print('inner')
            return inner
    res = outer()
    print(res)

    四、名称空间

    定义 :

        存放的是变量名和变量值的内存地址绑定关系的地方,也就是放名称的地方。

    要想访问一个变量的值,必须先去名称空间中拿到对应的名字才能访问变量的值。

    分类:

        1.内置名称空间:python解释器提前给你定义好的名字(已经存放到内置名称空间中了)

        2.全局名称空间:文件级别的代码

        3.局部名称空间:函数体内创建的名字都属于局部名称空间

    x = 1
    
    if 1 ==1 :
        y = 2
    
    # print(y)
    # while True:
    #     z = 3
    for i in [1,2,3]:
        print(i)
    print(i)
    
    def func():
        username = 'jason'
    print(x)
    func()

    生命周期:

        内置名称空间:

            只要python解释器已启动立马创建

            关闭python解释器的时候内置名称空间自动销毁

        全局名称空间:

              只要你右键运行py文件会自动创建

              py文件程序运行结束自动销毁

         局部名称空间:

                函数被调用的时候自动创建

                函数指向结束立即销毁

    五、名称空间的查找顺序

      名称的查找:

            1.需要先确定你当前在哪

            2.站在全局: 全局>>>>内置

            3.站在局部:局部>>>>全局>>>>内置

    
    
    #返回的是1

    def
    func(): x = 1 def index(): print(x) # 获取全局找x return index res = func() x = 999 res()

    """
    函数在定义阶段查找名字的顺序就已经固定了 不会因为函数的调用位置变化而改变(******)
    """


    
    
    x=111
    def outer():
        def inner():
            print('from inner',x)   #x返回的是222,因为222覆盖了111
        return inner
    f=outer()
    x = 222
    f()
    x=111
    def outer():
        def inner():
            print('from inner',x)  # 返回的是111
        return inner
    f=outer()
    def func():
        x=333
        f()
    func()

    六、作用域

      分类:

          全局作用域:内置名称空间  全局名称空间

          局部作用域: 局部作用域

    1.global 局部修改全局的变量

        global 在局部修改全局的不可变类型

    x = 1  # 不可变类型
    username = 'jason'
    def func():
        # x.append('嘿嘿嘿')
        global x,username  # 修改全局变量 而不是创建局部名称空间
        x = 999
        username = 'egon'
    func()
    print(x)
    print(username)

    2.nonlocal  局部修改局部

    def func():
        x = 1
        def index():
            nonlocal x
            x = 2
        index()
        print(x)
    func()

    总结:global:  局部修改全局 如果想修改多个 逗号隔开
       nonlocal:  局部修局部 如果想修改多个 逗号隔开

                

                

        

      

  • 相关阅读:
    poj2774
    GDOI2012 字符串
    poj3261
    poj1743
    bzoj 2565 manacher
    归档-ios
    学习
    ViewPager动态加载、删除页面
    android:ScrollView嵌套ListView的问题
    Android学习笔记进阶之在图片上涂鸦(能清屏)
  • 原文地址:https://www.cnblogs.com/panyi2019/p/11166639.html
Copyright © 2020-2023  润新知