开发者

python的函数形参和返回值你了解吗

开发者 https://www.devze.com 2022-12-13 10:05 出处:网络 作者: https://blog.csdn.net/ljsykf/a
目录函数的返回值函数的参数不可变参数和可变参数+=函数http://www.cppcns.com的参数缺省参数多值参数元组和字典的拆包总结函数的返回值
目录
  • 函数的返回值
  • 函数的参数
    • 不可变参数和可变参数
    • +=
  • 函数http://www.cppcns.com的参数
    • 缺省参数
    • 多值参数
    • 元组和字典的拆包
  • 总结

    函数的返回值

    一个函数执行后可以返回多个返回值

    def measure():
        print('测量开始。。。。')
        temp=39
        wetness=50
        print("测量结束")
        #元组--可以包含多个数据,因此可以使用元组一次返回多个值
        return (temp,wetness)
    result=measure()
    print(result)
    

    运行结果:

    测量开始。。。。

    测量结束

    (39, 50)

    def measure():
        print('测量开始。。。。')
        temp=39
        wetness=50
        print("测量结束")
        #元组--可以包含多个数据,因此可以使用元组一次返回多个值
        return (temp,wetness)
    #如果函数返回的类型是元组,同时希望单独的处理元组中的元素
    #可以使用多个变量,一次接收函数的返回结果
    #使用多个变量接收结果时,变量的个数应该和元组的元素个数一致
    gl_temp,gl_wetness=measure()
    print(gl_temp)
    print(gl_wetness)
    

    运行结果:

    测量开始。。。。

    测量结束

    (39, 50)

    交换两个变量的值

    a=6
    b=100
    #使用其他变量
    c=a
    a=b
    b=c
    #不使用其他变量
    a=a+b
    b=a-b
    a=a-b
    #python专有
    a,b=b,a
    print("a的值为 %d"%a)
    print("b的值为 %d"%b)
    

    函数的参数

    不可变参数和可变参数

    在函数内部,针对参数使用赋值语句,不会改变调用函数时传递的实参的值

    无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用

    def demo(num,num_list):
        print("函数内部")
        #在函数内部,针对参数使用赋值语句,形参的引用发生了变化,但是实参的引用没变
     www.cppcns.com   num=200
        num_list=[1,2,3]
        print(num)
        print(num_list)
        print("函数内部代码完成")
    gl_num=99
    gl_list=[2,3,4]
    demo(gl_num,gl_list)
    print(gl_num)
    print(gl_list)
    

    运行结果:

    函数内部

    200

    [1, 2, 3]

    函数内部代码完成

    99

    [2, 3, 4]

    如果传递的参数是可变类型,在函数内部,使用方法修改了数据的内容,同样会影响到外部的数据

    def demo(num_list):
        print("函数内部")
        num_list.append([1,2,3])
        print(num_list)
        print("函数内部代码完成")
    
    gl_list=[2,3,4]
    demo(gl_list)
    print(gl_list)
    

    运行结果:

    函数内部

    [2, 3, 4, [1, 2, 3]]

    函数内部代码完成

    [2, 3, 4, [1, 2, 3]]

    +=

    在python中,列表变量调用+=本质上在执行列表变量的extend方法,不会修改变量的引用

    def demo(num,num_lst):
        print("函数开始")
        num+=num
        num_lst+=num_lst
        print(num)
        print(num_lst)
        print("函数结束")
    gl_num=9
    gl编程客栈_list=[1,2,3]
    demo(gl_num,gl_list)
    print(gl_num)
    print(gl_list)
    

    运行结果:

    函数开始

    18

    [1, 2, 3, 1, 2, 3]

    函数结束

    9

    [1, 2, 3, 1, 2, 3]

    函数的参数

    缺省参数

    定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数

    调用函数时,如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的参数默认值

    (1)指定函数的缺省参数

    在参数后使用赋值语句,可以指定参数的缺省值

    def print_info(name,gender=True):
        gender_text="男生"
        if not gender:
            gender_text="女生"
        print("%s 是 %s"%(name,gender_text))
    

    (2) 提示

    缺省参数,需要使用最常见的值作为默认值

    如果一个参数的值不能确定,则不应该设置默认值,具体的数据在调用函数时,由外界传递

    (3) 缺省参数的注意事项

    1.缺省参数的定义位置

    必须保证带有默认值的缺省参数在参数列表的末尾

    2.调用多个缺省参数的函数

    在调用函数时,如果有多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系

    多值参数

    有时候可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数

    • python中有两种多值参数:

    参数名前增加一个* ,可以接收元组

    参数名前增加两个*,可以接受字典

    • 一般在给多值参数命名时,习惯使用以下两个名字:

    *args----存放元组参数

    **kwargs—存放字典参数

    def demo(*args,**kwargs):
        print(args)
        print(kwargs)
    demo(1,2,3,4,name="test1",age=14)
    

    运行结果:

    (1, 2, 3, 4)

    {'name': 'test1', 'age': 14}

    可以看到1,2,3,4被组成了一个元组

    name=&ldq编程客栈uo;test1”,age=14,被组成了一个字典

    #计算任意个数之和
    def sum_args(*args):
        sum=0
        for n in args:
            sum+=n
        return sum
    result=sum_args(1,2,3,4,6)
    print(result)
    

    元组和字典的拆包

    在调用带有多值参数的函数时,如果希望编程客栈

    将一个元组变量,直接传递给args

    将一个字典变量,直接传递给kwargs

    就可以使用拆包,简化参数的传递,拆包的方式是:

    在元组变量前,增加一个*

    在字典变量前,增加两个**

    #如果不拆包,将gl_args,gl_kwargs组成一个元组
    def demo(*args,**kwargs):
        print(args)
        print(kwargs)
    
    gl_args=(1,2,3,4)
    gl_kwargs={"name":"test1","age":12}
    demo(gl_args,gl_kwargs)
    

    运行结果:

    ((1, 2, 3, 4), {'name': 'test1', 'age': 12})
    {}
    

    如果不拆包,将gl_args,gl_kwargs组成一个元组,正确的传递方式应该是:demo(1,2,3,4,name=“test”,“age”=12)

    但是实参是元组和字典,需要将元素一个一个拆开,所以需要使用拆包

    正确的使用方式:

    def demo(*args,**kwargs):
        print(args)
        print(kwargs)
    gl_args=(1,2,3,4)
    gl_kwargs={"name":"test1","age":12}
    demo(*gl_args,**gl_kwargs)
    

    运行结果:

    (1, 2, 3, 4)

    {'name': 'test1', 'age': 12}

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!  

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号