跳到主要内容

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:把结果交回给程序继续使用,但不会显示
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,偏胖

练习

  1. 定义函数 max2(a, b),返回两个数中较大的那个(不许用内置 max)。
  2. 定义函数 is_even(n),判断 n 是否是偶数,返回 True/False。
  3. 定义函数 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 函数参数