5.1 函数入门
什么是函数
函数就是给一段代码起个名字,打包起来,随叫随用。
其实你早就在用函数了:print()、input()、len() 都是 Python 内置的函数。这一章学习自己定义函数。
为什么需要函数
假设要在程序里 3 个地方打印同样的欢迎信息,没有函数就得复制粘贴 3 遍。一旦要改,得改 3 个地方,漏一个就出 bug。
函数解决的就是:同样的逻辑只写一次。
定义和调用
# 定义函数:def 函数名():
def say_hello():
print("=" * 20)
print("欢迎使用本系统")
print("=" * 20)
# 调用函数:函数名()
say_hello()
say_hello() # 想用几次调几次
def是 define(定义)的缩写,函数名的命名规则和变量一样- 冒号 + 缩进,和 if/for 的规矩一样
- 定义不执行,调用才执行。只写 def 不调用,什么都不会发生
参数:给函数传数据
括号里可以定义参数,让函数处理不同的数据:
def say_hello(name): # name 是参数
print(f"你好,{name}!")
say_hello("小明") # 你好,小明!
say_hello("小红") # 你好,小红!
多个参数用逗号隔开:
def introduce(name, age):
print(f"我叫{name},今年{age}岁")
introduce("小明", 18)
返回值:让函数交出结果
return 把结果返回给调用它的地方:
def add(a, b):
return a + b
result = add(3, 5) # 函数的返回值赋给 result
print(result) # 8
print(add(10, 20) * 2) # 60,返回值可以直接参与运算
print 和 return 的区别(新手必懂!)
print:把结果显示在屏幕上给人看,程序拿不到这个值return:把结果交回给程序继续使用,但不会显示
def add_print(a, b):
print(a + b) # 只是显示
def add_return(a, b):
return a + b # 交出结果
x = add_print(3, 5) # 屏幕显示 8
print(x) # None!函数没有 return,拿到的是"空"
y = add_return(3, 5) # 屏幕什么都不显示
print(y) # 8
💡 经验法则:函数尽量用
return交出结果,让调用者决定怎么处理(打印、存起来、继续计算)。
return 还会立刻结束函数:
def check_age(age):
if age < 0:
return "年龄不合法" # 提前返回,下面的代码不执行
return f"年龄是 {age}"
print(check_age(-5)) # 年龄不合法
print(check_age(18)) # 年龄是 18
综合例子
def calc_bmi(height, weight):
"""计算 BMI 指数并返回评价""" # 三引号写函数说明,是好习惯
bmi = weight / height ** 2
if bmi < 18.5:
return f"BMI {bmi:.1f},偏瘦"
elif bmi < 24:
return f"BMI {bmi:.1f},正常"
else:
return f"BMI {bmi:.1f},偏胖"
print(calc_bmi(1.75, 65)) # BMI 21.2,正常
print(calc_bmi(1.60, 70)) # BMI 27.3,偏胖
练习
- 定义函数
max2(a, b),返回两个数中较大的那个(不许用内置 max)。 - 定义函数
is_even(n),判断 n 是否是偶数,返回 True/False。 - 定义函数
total_price(price, count),返回总价,满 100 打 9 折。
点击查看答案
# 1
def max2(a, b):
if a > b:
return a
return b
# 2
def is_even(n):
return n % 2 == 0 # 比较表达式本身就是 True/False,直接返回
# 3
def total_price(price, count):
total = price * count
if total >= 100:
total *= 0.9
return total
print(max2(3, 7)) # 7
print(is_even(10)) # True
print(total_price(30, 4)) # 108.0
本章小结
def 函数名(参数):定义,函数名(实参)调用- 定义不执行,调用才执行
return交出结果并结束函数;没有 return 的函数返回 None- print 是给人看的,return 是给程序用的
下一节:5.2 函数参数