1分钟读懂:Python自定义函数实战用法,代码量直接减半

36 阅读3分钟

202512301220248841

你是不是也有过这样的经历? 写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、不可变对象修改(如 intstr
x = 1  
def func():  
    global x  # 函数内直接修改会报错(视为局部变量),需用 global 声明:
    x += 1    # 合法,修改全局变量  
2、可变对象修改(如 listdict
# 在函数内,对可变对象修改,可通过方法(append、extend )修改,无需 global。
# 因为,变量指向的对象未变,仅对象内容修改 

x = [1]  
def func():  
    x.append(2)  # 合法,修改列表内容  

闭包(Closure)

定义

闭包是嵌套函数中,内层函数引用外层函数变量,且外层函数返回内层函数的结构。

特点

  1. 外层函数执行完,其变量仍被内层函数保留。
  2. 闭包返回的是函数,而非具体值。

示例


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. 延迟计算(如参数复用 ):多次调用闭包函数可固定部分参数,简化代码。
  2. 隐藏状态(如计数器 ):外层函数变量作为 “状态” 被内层函数维护。

-------- 写在最后 --------

关注我,每天1分钟,轻松懂 Python

我的同名公众号正在连载《FastAPI 开发实战》、《Python 核心技术》、《职场》。


点赞 :如果觉得有收获,点赞支持一下吧!

分享 :分享给身边同样对Python感兴趣的朋友!

关注我 :不要错过每一篇 Python 实战内容!


#Python #FastAPI #API #Web开发 #程序员 #编程教程 #效率提升