学习内容
函数的定义
参数的传递、不同场景如何使用参数与返回值、可选参数
函数变量的作用域——局部变量、全局变量
函数的定义(声明)
降低编程难度、增加代码复用
在 Python 中,定义函数使用**def 关键字**,最基础的结构如下:
# 模板结构
def 函数名 (参数列表):
"""函数文档字符串(可选,用于说明函数功能)"""
# 函数体(要执行的代码)
返回值
Python 函数基础涵盖函数定义语法、参数传递机制、返回值处理及可选参数设置。内容解析局部变量与全局变量的作用域区别,包括变量遮蔽现象及 global 关键字的使用。通过代码示例演示不同参数组合下的函数行为,展示封装思想与变量生命周期管理。
学习内容
函数的定义
参数的传递、不同场景如何使用参数与返回值、可选参数
函数变量的作用域——局部变量、全局变量
降低编程难度、增加代码复用
在 Python 中,定义函数使用**def 关键字**,最基础的结构如下:
# 模板结构
def 函数名 (参数列表):
"""函数文档字符串(可选,用于说明函数功能)"""
# 函数体(要执行的代码)
返回值
函数的调用: <函数值>(<实际赋值参数列表>)
Python 函数设计的核心思想之一:封装(Encapsulation)
对内隐藏细节、对外暴露接口
示例:
def calculate_area(radius):
"""计算圆的面积,对外暴露的接口是半径,返回面积"""
pi = 3.14159 # 内部细节,对外隐藏
return pi * radius ** 2
area = calculate_area(5)
print(area) # 输出约 78.53975
形式参数:简称'形参',函数定义(声明)时使用的参数。
实际参数:简称'实参',函数被调用时实际传入的参数。
示例:
# a 和 b 是形参
def fun(a, b):
print(a + b)
fun(5, 6) # 5 和 6 是实参
# 输出 11
不同场景下的函数定义:
# 输出 1-100 之间的和
# 无参数、无返回值
def fun1():
sum_val = 0
i = 1
while i <= 100:
sum_val += i
i += 1
print(sum_val)
fun1() # 输出:5050
# fun1() 直接打印 1-100 的和
# 计算 1-100 之间的和,并返回
# 无参数,有返回值
def fun2():
sum_val = 0
i = 1
while i <= 100:
sum_val += i
i += 1
return sum_val
print(fun2()) # 输出 5050
# print(fun2()) 接收返回值(1-100 的和)并打印
# 实现传入一个成绩,判断该成绩是否及格,并输出'及格'或'不及格'
def fun3(s):
if s >= 60:
print("及格")
else:
print("不及格")
fun3(60) # 输出:及格
# fun3(60) 判断 60 分并打印结果
# 实现传入一个成绩,判断该成绩是否及格,如果及格返回 True,否则返回 False
def fun4(s):
if s >= 60:
return True
else:
return False
print(fun4(60)) # 输出:True
# print(fun4(60)) 打印 fun4 返回的布尔值
# 模板结构
def 函数名 (非可选参数列表,可选参数=默认值):
# 函数体
return 返回值
默认参数可以让函数调用更灵活,不传该参数时使用默认值。
示例:
# 声明一个函数,可以计算两个数相加的和,默认第二个数的值为 5,也可以传入参数改变
def fun(a, b=5):
print(a + b)
fun(10) # 输出 15
fun(10, 20) # 输出 30
def greet(name, greeting="你好"):
"""带默认参数的问候函数(兼容 Python 3.5)"""
# 替换 f-string 为 format() 方法,适配 3.5 版本
return "{},{}!".format(greeting, name)
# 原代码(3.6+):f"{greeting},{name}!
# {} 是占位符,format() 方法会按顺序把括号里的参数(greeting、name)填充到占位符位置。
# 两种调用方式
print(greet("小明")) # 输出:你好,小明!
print(greet("小红", "早上好")) # 输出:早上好,小红!
在函数内部定义的变量,仅在函数内部有效,当函数退出时,变量将不再存在。
在函数之外定义的变量,在程序执行过程中有效。
全局变量在函数内部使用时,需要提前使用保留字 global 声明,语法:global <全局变量>。
示例 1:
# 全局变量
n = 5
# 定义函数:给函数起名 fun,指定它需要接收一个参数(形参 a)
def fun(a):
# a 和 b 是局部变量,因为是在函数内声明的
a = 10 # 这行代码会覆盖掉传进来的 a 的值
b = 15
print(a, b)
print(n)
# 调用函数:执行 fun 里的代码,并且把数字 1 传给函数的形参 a
fun(1) # 传 1,a 先=1,然后被改成 10
''' 输出
10 15
5
'''
分析:
n = 5 是在函数外定义的全局变量,在函数 fun 内部可以直接访问。a 是函数的形参,b 是在函数内部定义的变量,它们都是局部变量,只在函数内部有效。print(a, b) 时,会报 NameError,因为 a 和 b 是局部变量,函数执行结束后就被销毁了,外部无法访问。对上述红字的理解:
你可以把整个 Python 文件看作是一个大客厅(全局作用域),而函数 fun() 是客厅里的一个小卧室(局部作用域):
n = 5):放在大客厅里,所有人(整个文件)都能看到、能用;a 和 b):是放在小卧室里的东西,只有在卧室里(函数内部)能看到、能用;一旦走出卧室(函数执行结束),卧室会被'清空',里面的东西(a、b)就直接消失了。n = 5
def fun(a):
a = 10 # 卧室里的 a(局部)
b = 15 # 卧室里的 b(局部)
print(a, b) # ✅ 在卧室里,能看到 a、b,输出 10 15
print(n) # ✅ 在卧室里能看到客厅的 n,输出 5
fun(1)
print(a, b) # ❌ 走出卧室了,a、b 已经被销毁,客厅里根本没有这两个变量
示例 2:
n = 2
def fun(a, b):
n = a * b
print(n)
fun(5, 6)
print(n)
''' 输出
30
2
'''
分析:
n 的变量:
n = 2,定义在函数外。n,定义在函数 fun 内部,它会遮蔽(shadow)同名的全局变量。print(n) 输出的是局部变量 n 的值(30)。print(n) 输出的是全局变量 n 的值(2),因为函数内的 n 是局部变量,不会影响全局变量。修改全局变量
如果要在函数内部修改全局变量,需要使用 global 关键字声明:
n = 2
def fun(a, b):
global n
n = a * b
print(n)
fun(5, 6)
print(n) # 此时会输出 30,因为全局变量被修改了

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online