• (五)函数


    函数的return:

    1.函数里如果没有return,会默认返回一个None

    2.函数如果return多个对象,那么会把多个对象封装成一个元组返回

    3.函数遇到return,就结束了,后面的语句将不执行。

    函数的作用:

    1.减少重复代码

    2.方便维护,更易扩展

    3.保持代码一致性

    函数的参数

    形参与实参

    def test(a,b):
        print(a,b)
    test(1,2)

    a,b为形参 1,2为实参 形参只有在被调用时才分配内存,在调用结束时即刻释放所分配的内存,因此形参只有在函数内部有效

    参数的几种类型

    ①位置参数,必须一一对应,缺一不行多一也不行 

     test(1,2,3)

    ②关键字参数,无须一一对应,缺一不行多一也不行 

    test(y=1,x=3,z=4)

    ③默认参数,可传可不传

    def test(a,b,c=1):
        print(a,b,c)
    test(1,2)
    结果:1 2 1

    ④参数组

    def test(x,*args,**kwargs):  //*args是无命名参数,放在左边,最终会做成元组;**kwargs是有命名参数(键值对),放在右边,最终会做成字典
        print(x)
        print(args)
        print(kwargs)
    test(1,2,3,4,5,a = 1,b = 2)
    test(1,*[2,3,4],**{'a':1})
    结果:1
       (2, 3, 4, 5)
       {'a': 1, 'b': 2}
       1
       (2, 3, 4)
       {'a': 1}

    大原则:位置参数必须在关键字参数的左边,*args就是把多余的位置参数放在一个元组里,**kwargs就是把关键字参数放在一个字典里

    全局变量与局部变量(全局变量变量名大写;局部变量变量名小写)

    无global关键字的情况:优先读取局部变量,能读取全局变量,但无法对全局变量重新赋值

    name = 'xulan'  //全局变量
    def test():
        print(name)
    test()
    结果:xulan
    name = 'xulan'
    def test():
        name = 'aaa'  //局部变量
        print(name)
    test()
    结果:aaa
    name = 'xulan'
    def test():
        name = 'aaa'
        print(name)
    test()
    print(name)
    结果:aaa
       xulan

    但是对于可变类型,可以对内部元素进行操作

    name = ['a','b']
    def test():
        name.append('c')
        print(name)
    test()
    print(name)
    结果:['a', 'b', 'c']
       ['a', 'b', 'c']

    有global关键字的情况:变量本质上就是全局的那个变量,可读取可赋值

    name = ['a','b']
    def test():
        global name
        name = 123
        print(name)
    test()
    print(name)

    结果:123
       123

    函数的嵌套(#为执行顺序)

    NAME = 'ABC'         #1
    def a():
        name = 'a'       #3
        print(name)      #4
        def b():
            name = 'b'   #6
            print(name)  #7
        b()              #5
        print(name)      #8
    a()                  #2

    结果: a b a
    name = 'ABC'         
    def a():
        name = 'a'      
        def b():
            global name
            name = 'b'   
        b()              
        print(name)      ---- a,这里不是b,b()函数改变的是全局变量,这里还是a()函数的局部变量name = 'a'
    print(name) ---- ABC 
    a()
    print(name) ---- b
    结果:ABC
       a
       b

    nonlocal,指定上一级变量,如果没有就继续往上直到找到为止

    name = 'ABC'
    def a():
        name = 'a'
        def b():
            nonlocal name
            name = 'b'
        b()
        print(name)    ----b,a()函数中的局部变量被b()函数修改
    print(name)  ---- ABC
    a()
    print(name)  ---- ABC,全局变量并未修改

    结果:ABC
       b
       ABC

     函数的作用域

    函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系

    name='aaa'
    def foo():
        name='bbb'
        def bar():
            name='ccc'
            def tt():
                print(name)
            return tt()
        return bar()
    foo()
    结果:ccc

     高阶函数

    函数接收的参数是一个函数名,或返回值中包含函数,这样的函数称为高阶函数

    def test(n):
        print(n)
    def aaa(name):
        print('my name is %s'%name)
    test(aaa)
    test(aaa('xulan'))
    结果:<function aaa at 0x0000000000A77048>
       my name is xulan
       None --因为aaa函数没有返回值,所以这里为None
    def test1():
        print('from test1')
    def test2():
        print('from test2')
        return test1()
    res = test2()
    print(res)
    结果:from test2
       from test1
       None --因为test1函数没有返回值,所以这里为None
  • 相关阅读:
    chrome浏览器(block)屏蔽http文件下载,如何解除?
    node项目无法编译
    Google的60款开源项目
    王兴:真正的高手,都在苦练基本功
    Flink SQL 写 hudi
    Python3 bytes函数
    Python中Base64编码与解码
    Python 类的__setitem__(),__getitem()__,__delitem__()方法
    Python queue(队列)
    Ubuntu20.04设置远程桌面连接
  • 原文地址:https://www.cnblogs.com/xulan0922/p/9136647.html
Copyright © 2020-2023  润新知