Day26 函数1
函数的基本写法
return的用法
什么时候用return
def add_features(feature1, feature2):total = feature1 + feature2print(f"{feature1} + {feature2} = {total}")add_features(10, 25)
#或def add_features(feature1, feature2):total = feature1 + feature2return total
print(add_features(10, 25))
#但def add_features(feature1, feature2):total = feature1 + feature2return total # 返回结果,供其他代码使用sum_result = add_features(10, 25)
double_sum = sum_result * 2 # 基于返回值计算新结果
print(double_sum) # 输出:70
# 正确做法:用 return 返回结果
def square(num):return num * num # 返回计算结果# 用返回值做后续操作
result = square(3)
total = result + 5 # 用平方结果(9)加5
print(total) # 输出:14# 错误尝试:用 print 代替 return
def square_with_print(num):print(num * num) # 只打印,不返回# 调用函数时,print 只是在屏幕上显示结果,不会把值交给变量
result = square_with_print(3) # 屏幕上会显示9,但 result 其实是 None
total = result + 5 # 报错!因为 None 不能和数字相加
# 正确做法:用 print 展示信息
def show_message():print("程序执行完毕!") # 直接显示提示show_message() # 输出:程序执行完毕!# 不合适的做法:用 return 代替 print
def show_message_with_return():return "程序执行完毕!" # 返回字符串,但不会自动显示show_message_with_return() # 调用后什么都不显示,因为 return 不会打印
- 想让结果被其他代码使用 → 必须用
return
- 只想在屏幕上看一眼结果 → 用
print
- 两者经常配合使用(先
return
结果,再print
变量查看)
return 的作用 | print 的作用 |
---|---|
把结果 “交给调用者”,供后续代码使用 | 把内容 “显示在屏幕上”,仅用于查看 |
函数遇到 return 会立刻结束 | print 执行后,函数会继续运行后面的代码 |
不主动显示结果(需要打印变量才能看到) | 直接在屏幕上显示结果 |
变量作用域
函数参数类型
位置参数:传递参数时不指定参数名,直接按照函数定义时的参数顺序传递值。
函数会根据参数的位置顺序来匹配值。如果顺序错了,结果也会出错
def describe_pet(animal_type, pet_name):print(f"我有一只 {animal_type},名字叫 {pet_name}。")# 位置参数:按顺序传递,第一个值给 animal_type,第二个给 pet_name
describe_pet("猫", "咪咪") # 输出:我有一只 猫,名字叫 咪咪。
关键字参数:传递参数时明确指定参数名(格式:参数名=值
),不需要严格按照顺序传递。
函数会根据参数名来匹配值,不用担心顺序错误。
def describe_pet(animal_type, pet_name):print(f"我有一只 {animal_type},名字叫 {pet_name}。")# 关键字参数:指定参数名,顺序可以调换
describe_pet(animal_type="狗", pet_name="旺财") # 输出:我有一只 狗,名字叫 旺财。
describe_pet(pet_name="旺财", animal_type="狗") # 输出相同,顺序不影响
默认参数:
收集位置参数:
收集关键字参数:
题目1:计算圆的面积
- 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 = π * radius² (可以使用 math.pi 作为 π 的值)
- 要求:函数接收一个位置参数 radius。计算半径为5、0、-1时候的面积
- 注意点:可以采取try-except 使函数变得更加稳健,如果传入的半径为负数,函数应该返回 0 (或者可以考虑引发一个ValueError,但为了简单起见,先返回0)。
题目2:计算矩形的面积
- 任务: 编写一个名为 calculate_rectangle_area 的函数,该函数接收矩形的长度 length 和宽度 width 作为参数,并返回矩形的面积。
- 公式: 矩形面积 = length * width
- 要求:函数接收两个位置参数 length 和 width。
- 函数返回计算得到的面积。
- 如果长度或宽度为负数,函数应该返回 0。
题目3:计算任意数量数字的平均值
- 任务: 编写一个名为 calculate_average 的函数,该函数可以接收任意数量的数字作为参数(引入可变位置参数 (*args)),并返回它们的平均值。
- 要求:使用 *args 来接收所有传入的数字。
- 如果没有任何数字传入,函数应该返回 0。
- 函数返回计算得到的平均值。
题目4:打印用户信息
- 任务: 编写一个名为 print_user_info 的函数,该函数接收一个必需的参数 user_id,以及任意数量的额外用户信息(作为关键字参数)。
- 要求:
- user_id 是一个必需的位置参数。
- 使用**kwargs 来接收额外的用户信息。
- 函数打印出用户ID,然后逐行打印所有提供的额外信息(键和值)。
- 函数不需要返回值
题目5:格式化几何图形描述
- 任务: 编写一个名为 describe_shape 的函数,该函数接收图形的名称 shape_name (必需),一个可选的 color (默认 “black”),以及任意数量的描述该图形尺寸的关键字参数 (例如 radius=5 对于圆,length=10, width=4 对于矩形)。
- 要求:shape_name 是必需的位置参数。
- color 是一个可选参数,默认值为 “black”。
- 使用 **kwargs 收集描述尺寸的参数。
- 函数返回一个描述字符串,格式如下:
- “A [color] [shape_name] with dimensions: [dim1_name]=[dim1_value], [dim2_name]=[dim2_value], …”如果 **kwargs 为空,则尺寸部分为 “with no specific dimensions.”