news 2026/5/28 3:11:30

第 3 章 函数 知识点精讲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第 3 章 函数 知识点精讲

3.1def语句和参数

核心知识点

函数是组织好的、可重复使用的代码块,用于实现单一或相关联功能。

  • 定义:使用def关键字定义函数。
  • 调用:通过函数名加括号来执行函数。
  • 参数:在函数定义时放在括号内的变量,用于接收调用时传入的值。
  • 变元 (Argument):调用函数时传入的具体值。

语法

def function_name(parameter1, parameter2, ...): """文档字符串,描述函数功能""" # 函数体代码 return [expression] # 可选

示例

# 定义一个计算两数之和的函数 def add(a, b): """返回两个数的和""" result = a + b return result # 调用函数,传入变元 3 和 5 sum_result = add(3, 5) print(sum_result) # 输出: 8

3.2 返回值和return语句

核心知识点

return语句用于从函数中返回一个值,并结束函数的执行。一个函数可以没有return语句,或者有多个return语句。

示例

def square(x): return x * x print(square(4)) # 输出: 16 def is_even(n): if n % 2 == 0: return True else: return False print(is_even(5)) # 输出: False

3.3None

核心知识点

None是一个特殊值,表示 “没有值” 或 “空值”。它是NoneType类型的唯一值。

  • 如果一个函数没有return语句,或者return后没有表达式,它默认返回None

示例

def greet(): print("Hello") result = greet() print(result) # 输出: None def do_nothing(): return print(do_nothing()) # 输出: None

3.4 关键字参数和print()函数

核心知识点

关键字参数允许你通过参数名来传递值,而不是依赖于参数的顺序。这在函数有多个参数时特别有用。print()函数就是一个典型的例子。

示例

# 默认的 print() 调用 print("Hello", "World") # 输出: Hello World # 使用关键字参数 sep 和 end print("Hello", "World", sep="-", end="!\n") # 输出: Hello-World!

3.5 调用栈

核心知识点

调用栈(Call Stack)是计算机科学中存储有关程序中活跃函数的信息的栈。当一个函数被调用时,它的信息被压入栈顶;当函数执行完毕返回时,它的信息被弹出栈。

示例

def a(): print("进入函数a") b() print("离开函数a") def b(): print("进入函数b") c() print("离开函数b") def c(): print("进入函数c") print("离开函数c") a()

输出顺序:

进入函数a 进入函数b 进入函数c 离开函数c 离开函数b 离开函数a

调用栈变化:a入栈 ->b入栈 ->c入栈 ->c出栈 ->b出栈 ->a出栈。


3.6 局部和全局作用域

核心知识点

  • 局部作用域:在函数内部定义的变量,只能在该函数内部访问。
  • 全局作用域:在所有函数外部定义的变量,可以在整个程序中访问。

3.6.1 局部变量不能在全局作用域内使用

def my_func(): local_var = "我是局部变量" my_func() # print(local_var) # 错误!局部变量在外部不可见

3.6.2 局部作用域不能使用其他局部作用域内的变量

def func1(): var1 = 10 def func2(): # print(var1) # 错误!var1 是 func1 的局部变量 pass

3.6.3 全局变量可以在局部作用域中读取

global_var = "我是全局变量" def my_func(): print(global_var) # 可以读取全局变量 my_func() # 输出: 我是全局变量

3.6.4 名称相同的局部变量和全局变量

如果局部变量和全局变量同名,局部变量会在其作用域内 “遮蔽” 全局变量。

x = 100 # 全局变量 def my_func(): x = 10 # 局部变量,遮蔽了全局变量x print("局部x:", x) my_func() # 输出: 局部x: 10 print("全局x:", x) # 输出: 全局x: 100

3.7global语句

核心知识点

global语句用于在函数内部声明一个变量是全局变量,这样就可以在函数内部修改全局变量。

示例

x = 100 def modify_global(): global x # 声明x是全局变量 x = 200 # 修改全局变量x modify_global() print(x) # 输出: 200

3.8 异常处理

核心知识点

异常是程序运行时发生的错误。try...except语句用于捕获并处理异常,防止程序崩溃。

语法

try: # 可能会引发异常的代码 except ExceptionType: # 处理异常的代码

示例

try: num = int(input("请输入一个整数:")) print(10 / num) except ValueError: print("你输入的不是整数!") except ZeroDivisionError: print("除数不能为零!")

3.9 小程序: Zigzag

核心逻辑

编写一个函数,绘制一个类似锯齿形的图案。

示例代码
def zigzag(height): for i in range(height): if i % 2 == 0: print(' ' * i + '*') else: print(' ' * (height - 1 - i) + '*') zigzag(5)

输出:

* * * * *

3.10 小结

本章讲解了 Python 函数的核心概念:

  • 函数定义与调用def语句和函数调用。
  • 参数与返回值:如何向函数传递数据和从函数获取结果。
  • 特殊值与参数None值和关键字参数。
  • 执行流程与作用域:调用栈、局部作用域和全局作用域。
  • 作用域修改global语句的使用。
  • 错误处理try...except的基本用法。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 1:54:50

Prompt工程师过剩?2026年软件测试从业者必备的五大抗淘汰技能

从“工具使用者”到“策略定义者”的必然跃迁随着生成式AI的浪潮席卷全球科技行业,一个曾经炙手可热的新兴岗位——“提示工程师”(Prompt Engineer)——正悄然经历着市场预期的理性回调。过去两年,各大招聘平台上“Prompt Engine…

作者头像 李华
网站建设 2026/5/23 1:54:30

终极免费指南:5分钟搞定Windows网络性能测试

终极免费指南:5分钟搞定Windows网络性能测试 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3-win-builds项目提供了专为Windows系…

作者头像 李华
网站建设 2026/5/23 1:54:37

工业通信调试效率提升:Modbus工具解决工业自动化协议测试难题

工业通信调试效率提升:Modbus工具解决工业自动化协议测试难题 【免费下载链接】ModBusTcpTools 一个Modbus的C#开发示例,运用HslCommunication.dll组件库实现,包含了一个服务端的演示和一个客户端演示,客户端可用于进行Modbus测试…

作者头像 李华
网站建设 2026/5/23 1:54:35

OpenClaw健康检查:百川2-13B量化模型任务看板搭建

OpenClaw健康检查:百川2-13B量化模型任务看板搭建 1. 为什么需要健康检查系统 上周三凌晨两点,我被手机警报声惊醒——OpenClaw正在执行的自动化日报生成任务连续失败了7次。登录服务器查看日志时,发现根本原因是模型响应超时导致的操作链断…

作者头像 李华
网站建设 2026/5/23 1:54:35

RT-Thread与FreeRTOS核心差异及选型指南

1. RT-Thread与FreeRTOS核心差异解析作为一名在嵌入式领域摸爬滚打多年的工程师,我经常被问到RT-Thread和FreeRTOS该如何选择。这两种RTOS我都深度使用过,今天就从实际项目经验出发,聊聊它们的本质区别。先看内核架构这个最根本的差异。FreeR…

作者头像 李华