函数根据 有没有参数 以及 有没有返回值 ,可以 互相结合,一共有 4种 组合方式
定义函数时,是否接受参数,或者是否返回结果,是根据 实际功能 需求 来决定的!!!
def measure():
"""测量温度、湿度"""
print("测量开始....")
temp = 38
wetness = 50
print("测量结束....")
# 元组可以包含多个数据,因此可以返回多个值
# 如果函数返回类型为元组,小括号可以省略
# return (temp, wetness)
return temp, wetness
result = measure()
print(result)
# 需要单独处理温度或者湿度
print(result[0])
print(result[1])
# 如果函数返回类型是元组,同时希望单独处理元组中的元素
# 可以使用多个变量,一次接受函数的返回结果
# 注意:使用多个变量接受返回结果时,变量的个数应该与元组的个数保持一致
gl_temp, gl_wetness = measure()
print(gl_temp)
print(gl_wetness)
面试题:交换两个数字
题目要求
a = 6
b = 100
# 解法一:使用其他变量
c = a
a = b
b = c
print(a)
print(b)
# 解法二:不使用其他变量
a = a + b
b = a - b
a = a - b
print(a)
print(b)
# 解法三:Python专有 利用元组
a, b = b, a
print(a)
print(b)
问题1:在函数内部,针对参数使用 赋值语句,会不会影响调用函数时传递的 实参变量
答案:不会!!!
def demo(num, num_list):
print("函数内部的代码")
# 函数内部,针对参数使用赋值语句,不会修改到外部的实参变量
num = 100
num_list = [1, 2, 3]
print(num)
print(num_list)
print("函数执行完成")
gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
问题2:如果传递的参数是 可变类型,在函数内部,使用 方法 修改了数据内容,同样会影响到外部的数据
def demo(num_list):
print("函数内部的代码")
# 使用方法修改列表的内容
num_list.append(9)
print(num_list)
print("函数执行完成")
gl_list = [1, 2, 3]
demo(gl_list)
print(gl_list)
面试题:+=
def demo(num, num_list):
print("函数开始")
# num = num + num
num += num
# 列表变量使用 + 不会做相加再赋值的操作
# num_list = num_list + num_list
# 而本质上是在调用列表的extend 方法
num_list += num_list
# num_list.extend(num_list)
print(num)
print(num_list)
print("函数完成")
gl_num = 9
gl_list = [1, 2, 3]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
gl_list = [6, 3, 9]
# 默认按照升序排序
gl_list.sort()
print(gl_list)
# 如果需要降序排序,需要执行reverse参数
gl_list.sort(reverse=True)
print(gl_list)
指定函数的缺省参数
def print_info(name, gender=True):
"""
:param name: 姓名
:param gender: 性别 True 男 False 女
"""
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s" % (name, gender_text))
# 假设班上的男生居多
# 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值
print_info("小明")
print_info("老王")
print_info("小妹", False)
提示
缺省参数的注意事项
1)缺省参数的定义位置
def print_info(name, gender=True, title):
2)调用带多个缺省参数的函数
def print_info(name, title="普通员工", gender=True):
"""
:param title: 职位
:param name: 姓名
:param gender: 性别 True 男 False 女
"""
gender_text = "男生"
if not gender:
gender_text = "女生"
print("[%s]%s 是 %s" % (title, name, gender_text))
# 假设班上的男生居多
# 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值
print_info("小明")
print_info("老王")
print_info("小妹", gender=False)
定义支持多值参数的函数
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo(1, 2, 3, 4, 5, name="小明", age=18)
提示:多值参数 的应用会经常出现在网络上一些大牛开发的框架中,知道多值参数,有利于我们能够读懂大牛的代码
多值参数案例( 计算任意多个数字的和)
需求
1、定义一个函数 sum_numbers,可以接收 任意多个参数
2、功能要求:将传递的所有数字累加,并返回累加结果
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)
元组和字典的拆包(了解即可)
def demo(*args, **kwargs):
print(args)
print(kwargs)
# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "张三", "age": 19}
# 会把gl_nums和gl_dict传递给第一参数args
# demo(gl_nums, gl_dict)
# 拆包语法,可以简化元组/字典变量的传递
demo(*gl_nums, **gl_dict)
特点
代码特点
代码示例
def sum_number(num):
print(num)
# 递归的出口,当满足某个条件时,不再执行函数
if num == 1:
return
# 字典调用自己
sum_number(num - 1)
print("完成 %d" % num)
sum_number(3)
需求
代码示例
def sum_numbers(num):
# 1、出口
if num == 1:
return 1
# 2、数字的累加
temp = sum_numbers(num-1)
return temp + num
result = sum_numbers(3)
print(result)
提示:递归是一个 编程技巧,初次接触递归会感觉有些吃力!,在处理 不确定的循环条件 时,格外有用,例如:遍历整个文件目录的结果