• 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'
  • 相关阅读:
    函数(五)——装饰器,递归调用,匿名函数
    函数(四)——装饰器
    函数(三)
    函数(二)
    函数(一)
    python基础(九)
    python基础(八)
    python基础(七)
    javaweb开发 idea ssm开发(二)
    PHP计算两个经纬度地点之间的距离
  • 原文地址:https://www.cnblogs.com/Meanwey/p/9741208.html
Copyright © 2020-2023  润新知