Python基础(16)--函数的参数和返回值

如果函数内部处理的数据不确定,就可以将外界的数据以参数的形式传递到函数内部
如果希望一个函数执行完成后,向外界汇报执行结果,就可以增加函数的返回值

函数的返回值

在程序开发中,有时希望一个函数执行结束后告诉调用者结果,以便调用者针对具体结果做后续处理
返回值是函数完成工作后,最后给调用者的一个结果
在函数中使用return关键字可以返回结果
调用函数一方,可以使用变量来接收函数的返回结果
元组可以包含多个数据, 因此可以使用元组让函数一次返回多个值

def measure():
    """测量温度和湿度"""
    print("测量开始")
    temp = 39
    wetness = 50
    print("测量结束")

    # 元组可以包含多个数据, 因此可以使用元组让函数一次返回多个值
    # return (temp, wetness)  # 小括号可以省略
    return temp, wetness


result = measure()
print(result)

# 如果函数返回的类型是元组,同时希望单独的处理元组中的元素,可以使用多个变量,一次接收函数的返回结果
# 使用多个变量接收结果时,变量的个数应该和元组中元素的个数保持一致
gl_temp, gl_wetness = measure()
函数的参数

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

def demo(num, num_list):
    print("*" * 50 + "\n函数内部的代码")
    # 在函数内部,针对参数使用赋值语句,不会修改到外部的实参变量
    num = 100
    num_list = [1, 2, 3]
    print(num)
    print(num_list)
    print("函数执行完成\n" + "*" * 50)

gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)

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

def demo1(num_list):
    print("^" * 50 + "\n函数内部的代码")
    # 使用方法修改列表的内容
    # 如果传递的参数是可变类型,在函数内部,使用方法修改了数据的内容,同时会影响到外部的数据
    num_list.append(9)
    print(num_list)
    print("函数执行完成\n" + "^" * 50)

gl_list = [4, 5, 6]
demo1(gl_list)
print(gl_list)

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

def demo2(num, num_list):
    print("<" * 50 + "\n函数内部的代码")
    num += num
    print(num)
    # 列表变量使用+不会做相加再赋值的操作, 本质上是调用列表的extend方法
    num_list += num_list
    num_list.extend(num_list)
    print(num_list)
    print("函数执行完成\n" + "<" * 50)

gl_num = 99
gl_list = [4, 5, 6]
demo2(gl_num, gl_list)
print(gl_num)
print(gl_list)
函数的缺省参数

定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数
调用函数时,如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的参数默认值
函数的缺省参数,将常见的值设置为参数的缺省值,从而简化函数的调用
对列表排序的方法:

# 带有默认值的缺省参数必须在参数列表末尾
# 在调用函数时,如果有多个缺省参数,需要指定参数名

def print_info_sort():
    gl_list = [6, 4, 9]
    # 默认按照升序排序
    gl_list.sort()
    # 如果需要降序排序,需要执行reverse参数
    gl_list.sort(reverse=True)
    print(gl_list)

print_info_sort()

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

def print_info(name, gender=True):
    """
    假设班上男生居多
    :param name:班上同学的姓名
    :param gender: True男生 False女生
    :return:
    """
    gender_text = "男生"
    if not gender:
        gender_text = "女生"
    print("%s是%s" % (name, gender_text))


print_info("小明")
print_info("小美", False)

注:

  • 缺省参数需要使用最常见的值作为默认值
  • 如果一个参数的值不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递
  • 带有默认值的缺省参数必须在参数列表末尾
  • 在调用函数时,如果有多个缺省参数,需要指定参数名
多值参数

多值参数指一个函数能够处理的参数个数是不确定的,这个时候就可以使用多值参数
python中有两种多值参数:

  1. 参数名前增加一个"*"可以接收元组
  2. 参数名前增加两个"*"可以接受字典

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

  • *args 存放元组参数
  • **kwargs 存放字典参数
def demo(num, *nums, **person):
    print(num)
    print(nums)
    print(person)

demo(1)
print("-" * 50)
demo(1, 2, 3, 4, 5)
print("-" * 50)
demo(1, 2, 3, 4, 5, name="小明", age=18)
print("-" * 50)

数字累加案例:

def sum_numbers(*args):
    num = 0
    print(args)
    # 循环遍历
    for n in args:
        num += n
    return num


result = sum_numbers(1, 2, 3, 4)
print(result)
元组和字典的拆包

在调用带有多值参数的函数时,如果希望:

  • 将一个元组变量直接传递给args
  • 将一个字典变量直接传递给kwargs

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

  • 在元组变量前增加一个*
  • 在字典变量前增加两个*
def demo3(*args, **kwargs):
    print(args)
    print(kwargs)
# 需要将一个元组变量/字典变量传递给函数对应的参数
gl_nums = (1, 2, 3)
gl_xiaoming = {"name":"小明", "age":18}
# 会把num_tuple 和 xiaoming 作为元组传递个args
# demo3(gl_nums, gl_xiaoming) 不拆包会都传递给第一个参数
demo3(*gl_nums, **gl_xiaoming)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值