Python:第8天:函数(上)—— 把重复代码打包成“积木块”

📅 2026/6/19 1:35:02
Python:第8天:函数(上)—— 把重复代码打包成“积木块”
今日目标理解函数的作用代码复用、模块化学会定义和调用函数掌握带参数的函数给函数“喂”数据掌握带返回值的函数让函数“吐”结果理解return和print的区别理解局部变量和全局变量的区别 一、为什么要用函数不用函数的问题python# 计算三个圆的面积 r1 3 area1 3.14 * r1 * r1 print(f半径{r1}的圆面积: {area1}) r2 5 area2 3.14 * r2 * r2 print(f半径{r2}的圆面积: {area2}) r3 7 area3 3.14 * r3 * r3 print(f半径{r3}的圆面积: {area3})如果算100个圆代码会变得又臭又长而且如果要把圆周率从3.14改成3.14159得改100个地方。用函数解决问题pythondef calc_area(r): area 3.14 * r * r return area # 调用3次 print(calc_area(3)) print(calc_area(5)) print(calc_area(7))只需要把公式写一遍后面随时调用。这就是代码复用。 编程有一个重要原则叫DRYDont Repeat Yourself—— 不要重复自己。函数是实现DRY的核心工具。️ 二、定义和调用函数2.1 基本语法pythondef 函数名(): 函数内部要执行的代码def是关键字表示“定义”函数名后面要有括号()和冒号:函数体要缩进2.2 最简单的例子打招呼python# 定义函数 def say_hello(): print(你好欢迎来到Python世界) # 调用函数 say_hello() say_hello()运行结果text你好欢迎来到Python世界 你好欢迎来到Python世界 定义函数时不会执行代码只有调用时才会执行。就像你盖好了房子定义住进去才叫使用调用。2.3 函数必须先定义后调用python# 错误示例先调用后定义 greet() # 报错函数还没定义 def greet(): print(Hello)报错textNameError: name greet is not defined 三、带参数的函数输入函数通常需要接收一些数据才能工作这些数据叫参数。3.1 一个参数pythondef greet(name): print(f你好{name}) greet(张三) greet(李四)运行结果text你好张三 你好李四3.2 多个参数pythondef introduce(name, age, city): print(f我叫{name}今年{age}岁来自{city}。) introduce(小明, 18, 北京) introduce(小红, 20, 上海)运行结果text我叫小明今年18岁来自北京。 我叫小红今年20岁来自上海。 参数按位置一一对应第一个参数对应第一个值第二个对应第二个值。 四、带返回值的函数输出有些函数只负责做事比如打印但更多时候我们需要函数返回一个结果供后续使用。这时要用return。4.1return的基本用法pythondef add(a, b): result a b return result # 调用函数拿到返回值 sum1 add(3, 5) print(sum1) # 8 # 也可以直接用在表达式中 sum2 add(10, 20) 100 print(sum2) # 1304.2 没有return的函数返回什么如果没有return函数默认返回None代表“空”。pythondef say_hello(name): print(f你好{name}) result say_hello(张三) print(result) # None运行结果text你好张三 None4.3return和print的区别非常重要这是新手最容易混淆的两个概念returnprint作用把值传回给调用者把值显示在屏幕上给人看后续能否使用✅ 能被变量接收继续计算❌ 显示后就没了无法继续使用python# return结果可以继续使用 def add_return(a, b): return a b result add_return(3, 5) print(result * 2) # 16拿到了返回值继续乘以2 # print结果只能在屏幕上看一眼 def add_print(a, b): print(a b) result add_print(3, 5) print(result) # None函数没有返回拿不到值记住这个口诀print是给人看的return是给程序用的。 五、默认参数值有时候我们希望参数有一个“默认值”如果调用时没传这个参数就用默认的。pythondef greet(name, greeting你好): print(f{greeting}{name}) greet(张三) # 使用默认的你好 greet(李四, 早上好) # 使用自定义的早上好运行结果text你好张三 早上好李四 带默认值的参数必须放在最后面。def greet(greeting你好, name):这样写会报错。实际应用日期格式化pythondef format_date(year, month, day, separator-): return f{year}{separator}{month}{separator}{day} print(format_date(2025, 6, 18)) # 2025-6-18默认用- print(format_date(2025, 6, 18, /)) # 2025/6/18 print(format_date(2025, 6, 18, .)) # 2025.6.18 六、变量的作用域局部 vs 全局6.1 局部变量在函数内部定义的变量叫局部变量只能在函数内部使用。pythondef test(): x 10 # 局部变量 print(x) # 可以在函数内部访问 test() print(x) # 报错函数外部访问不到 x报错textNameError: name x is not defined6.2 全局变量在函数外部定义的变量叫全局变量可以在任何地方访问读取。pythonname 全局的小明 # 全局变量 def show_name(): print(name) # 函数内部可以读取全局变量 show_name() # 全局的小明 print(name) # 全局的小明函数外部也能访问6.3 在函数内部修改全局变量global如果在函数内部想修改全局变量需要用global声明。pythoncount 0 # 全局变量 def increment(): global count # 声明要修改全局变量 count 1 increment() increment() print(count) # 2⚠️尽量少用global。过度使用会让代码变得混乱你不知道哪个函数在哪改了全局变量。一个更好的做法是把值通过参数传进去通过return传出来。python# 推荐做法不修改全局变量而是返回新值 def increment(n): return n 1 count 0 count increment(count) count increment(count) print(count) # 2 七、综合示例简单计算器python# 第8天综合示例简单的四则运算函数 def add(a, b): return a b def subtract(a, b): return a - b def multiply(a, b): return a * b def divide(a, b): if b 0: return 错误除数不能为0 return a / b # 使用函数 print( 简单计算器 ) x 10 y 3 print(f{x} {y} {add(x, y)}) print(f{x} - {y} {subtract(x, y)}) print(f{x} × {y} {multiply(x, y)}) print(f{x} ÷ {y} {divide(x, y)}) # 测试除0情况 print(divide(10, 0))运行结果text 简单计算器 10 3 13 10 - 3 7 10 × 3 30 10 ÷ 3 3.3333333333333335 错误除数不能为0 八、新手常见错误及解决错误现象错误代码示例解决方法NameError: function not defined在函数定义之前调用把调用代码移到函数定义后面SyntaxError: invalid syntax忘了写冒号:def my_func():IndentationError函数体没有缩进在函数体内按Tab或4个空格函数返回None但不是预期结果函数里只有print没有return用return返回结果UnboundLocalError在函数内给全局变量赋值但没声明global加上global 变量名或用参数传递参数顺序写错introduce(北京, 小明)检查定义时的顺序或使用关键字参数错误演示忘记returnpythondef double(n): result n * 2 # 忘记写 return result value double(5) print(value) # None 今日总结今天你学会了函数的作用代码复用、模块化用def定义函数带参数的函数传递数据进去带返回值的函数用return把结果传出来return和print的区别重要默认参数值局部变量和全局变量的区别