你是不是也有过这样的经历? 写Python代码时,同样的逻辑在不同地方复制粘贴了无数遍... 调试时要修改一个功能,得在十几个地方重复同样的修改... 看着别人简洁优雅的代码,自己的却像一锅乱炖?
今天,我将带你彻底搞懂自定义函数。我们从最简单的函数定义开始,一步步揭开高效编程的秘密!
每天1分钟,轻松懂 Python
这是一份有基础、有深度的 Python 核心技术手册
函数基础
函数的定义与结构
def 函数名(参数列表):
函数体
return 返回值 # 可选
动态类型参数:
# 无需显式声明类型,可接收任意类型(整数、列表、字符串等)。
def my_sum(a, b):
return a + b
print(my_sum(3, 5)) # 数值相加 → 8
print(my_sum([1,2], [3])) # 列表拼接 → [1,2,3]
参数默认值
def func(param=0):
print(param)
func() # 用默认值 → 0
func(5) # 传参覆盖 → 5
嵌套函数
定义:函数内部定义子函数,形成嵌套的结构。
作用 1:隐藏内部逻辑。控制子函数访问权限,保护隐私(如数据库配置 )
def connect_db():
def get_db_config(): # 外部函数无法直接调用
return {'host': 'localhost', 'port': 3306}
config = get_db_config()
# 模拟连接数据库...
return 'Connected'
作用 2:优化执行效率。子函数逻辑仅外部函数调用时执行,避免重复检查。
def factorial(n):
def inner_factorial(x):
if x == 1: return 1
return x * inner_factorial(x-1)
# 先校验输入
if not isinstance(n, int) or n < 1:
raise ValueError('Invalid input')
return inner_factorial(n)
函数变量的作用域
局部变量:函数内定义,仅函数内有效,执行完销毁。
全局变量:文件顶层定义,函数内可访问,但修改需用 global 声明。
#################### global 关键字
MIN_VALUE = 1
MAX_VALUE = 10
def validation_check(value):
global MIN_VALUE # 声明使用全局变量
MIN_VALUE = 2 # 修改全局变量
if value > MAX_VALUE:
raise ValueError('Validation failed')
validation_check(5)
print(MIN_VALUE) # 2(全局变量已修改)
#################### nonlocal 关键字
# 修改外层函数变量需用 nonlocal 声明(避免与局部变量冲突 )。
def outer():
x = 1
def inner():
nonlocal x
x = 2 # 修改外层函数的 x
inner()
print(x) # 2
outer()
1、不可变对象修改(如 int、str )
x = 1
def func():
global x # 函数内直接修改会报错(视为局部变量),需用 global 声明:
x += 1 # 合法,修改全局变量
2、可变对象修改(如 list、dict )
# 在函数内,对可变对象修改,可通过方法(append、extend )修改,无需 global。
# 因为,变量指向的对象未变,仅对象内容修改
x = [1]
def func():
x.append(2) # 合法,修改列表内容
闭包(Closure)
定义
闭包是嵌套函数中,内层函数引用外层函数变量,且外层函数返回内层函数的结构。
特点
- 外层函数执行完,其变量仍被内层函数保留。
- 闭包返回的是函数,而非具体值。
示例
def nth_power(exponent):
def inner(base):
return base ** exponent
return inner
square = nth_power(2) # exponent=2 被保留
cube = nth_power(3) # exponent=3 被保留
print(square(4)) # 4²=16
print(cube(2)) # 2³=8
应用场景
- 延迟计算(如参数复用 ):多次调用闭包函数可固定部分参数,简化代码。
- 隐藏状态(如计数器 ):外层函数变量作为 “状态” 被内层函数维护。
-------- 写在最后 --------
关注我,每天1分钟,轻松懂 Python
我的同名公众号正在连载《FastAPI 开发实战》、《Python 核心技术》、《职场》。
点赞 :如果觉得有收获,点赞支持一下吧!
分享 :分享给身边同样对Python感兴趣的朋友!
关注我 :不要错过每一篇 Python 实战内容!
#Python #FastAPI #API #Web开发 #程序员 #编程教程 #效率提升