Python基础-----函数

一、函数的定义方式

def 函数名([参数]):
    '''函数文档'''
    代码块
    return 返回值(可以返回多个值,各种类型均可,最终以元组形式存放并返回)
    上述格式就是python中函数的基本定义方式,其中def为关键字,参数可有可无,但是括号必须有
中间的注释内容为函数文档,用于说明该函数的作用以及参数。
1、返回值数=0,则返回None;
2、返回值数=1,返回指定的对象;
3、返回值数>1,将多个返回值存放至元组进行返回。
函数执行过程中遇到return语句则函数即刻执行结束

二、函数的特性

1、可重复性
2、可拓展性
3、代码的简洁性

三、过程

即没有返回值的函数即为过程(即没有return),默认返回None

四、函数的参数

1、形参
形参变量只有在调用时才分配内存单元,调用结束后即刻释放内存单元,即形参只在函数内部有效
函数调用结束返回主调函数后则不可再使用该形参变量;
2、实参
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的值,在进行函数调用时,他们都
必须有确定的值,以便将这些值传给形参。因此应预先用赋值、输入等方式使参数获得确定值。
例如:

        def calc(x,y):
            res = x ** y
            return res
        c = calc(a,b)
        print(c)

该例中,x y为形参,a b为实参

3、位置参数和关键字参数
1)位置参数
位置参数传值时,需按照位置以及参数数量进行传值

 def test(x,y,z):
     num = x + y + z
     return  num
c = test(1,2,3)
     print(c)
>>> 6
 2)关键字参数
   关键字参数传值时,可以不按照位置进行传值,但是也必须传入同样数量的参数

                def test(x, y, z):
                    num = x + y + z
                    return num
                c = test(y = 1,x =  2,z = 3)
                print(c)
                >>> 6
4、默认参数
    即为在定义函数的时候就讲参数指定好了
        def test(x, y, z = 10):
            num = x + y + z
            return num
        c = test(y=1, x=2)
        print(c)
        >>> 13
    5、参数组(任意参数)
        参数组即为加上*args或者**kwargs
        1)其中*args表示传入列表
            def test(x,*args):
                print(x)
                print(args)
            test(1,2,3,4,5)
            >>> 1
                (2,3,4,5)
        又如:
            def test(x,*args):
                print(x)
                print(args)
            test(1,[2,3,4,5])
            >>> 1
                ([2,3,4,5])
        若想将上述传入的列表中的每个元素均取出来而不是作为一体的话,可以在调用的时候在列表前加*
            def test(x, *args):
                print(x)
                print(args)
            test(1, *[2, 3, 4, 5])
            >>> 1
                (2,3,4,5)
        上述一个*可传入列表等,但是依旧以位置参数进行处理,只是将args表示的值整体处理
        2)**kwargs表示传入字典
            但是传入的参数必须以关键字参数进行传值
            def test(x,**kwargs):
                print(x)
                print(kwargs)
            test(1,y =2,z = 3)
            >>> 1
                {'x':2,'y':3}
            或者等同于:
            def test(x, **kwargs):
                print(x)
                print(kwargs)
            test(1, **{'x':2,'y':3})
            >>> 1
                {'x': 2, 'y': 3}
        3)上述两种情况结合一起,则定义的函数可以传入任何值(是以位置参数进行传递)
            def test(x,*args,**kwargs):
                print(x)
                print(args)
                print(kwargs)
            test(1,*[2,3,4],**{'a':5,'b':6})
            >>> 1
                (2,3,4)
                {'a':5,'b':6}

五、局部变量与全局变量
在子程序中定义的变量成为局部变量,在程序的一开始定义的变量成为全局变量
当局部变量与全局变量同名时,在定义局部变量的子程序内,局部变量起作用;在其他
地方全局变量起作用。(命名上:一般全局变量名用大写表示,局部变量用小写表示)
一般用global来定义全局变量。如果函数内无global关键字,优先读取局部变量
若无局部变量则只能读取全局变量,且无法对全局变量重新赋值,对于可变类型如列表等
可以利用其内置方法对内部元素进行操作;如果函数中有global关键字,变量本质就是
全局的那个变量,可读取可赋值。

            name = 'alex'
            def chage_name():
                name = 'jerry'
                print('我是:',name)
            chang_name()
            print(name)
            >>> '我是: jerry'
                'alex'

上例中的name并没有被修改,只是直接调用函数内部的局部变量


            name = ['alex']
            def chage_name():
                name.append('jerry')
                print('我是:',name)
            chang_name()
            print(name)
            >>> '我是: ['alex','jerry']
                ['alex','jerry']

上例中随便函数内无局部变量,但是全局变量为列表等可变类型,则可以进行修改

        name = 'alex'
        def chage_name():
            global name
            name = 'jerry'
            print('我是:', name)
        chang_name()
        print(name)
        >>> '我是:jerry'
            'jerry'

上例中在函数中指定了全局变量,并对其进行了重新赋值
可以用nonlocal来指定局部变量,这样就可以对该变量的上一级变量进行修改

        name = 'alex'
        def chang_name1():
            name = 'tony'
            def change_name1_1():
                nonlocal name
                name = 'pony'
            change_name1_1()
        print(name)
        chang_name1()
        print(name)
        >>> 'alex'
            'pony'
            'alex'
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容