前言:本文介绍了Python函数的基本概念和使用方法。主要内容包括:1)函数定义与调用,通过def关键字创建可重复使用的代码块;2)参数传递方式,包括位置参数、关键字参数、默认参数和可变参数;3)返回值处理,支持单值和多值返回;4)函数嵌套与变量作用域,区分局部变量和全局变量;5)匿名函数lambda的简洁语法。文章还强调了参数顺序、变量作用域修改等注意事项,为Python函数编程提供了全面的基础指导。

一、函数核心定义

封装可重复执行的代码块,调用时执行,减少冗余。

1.基础格式

def 函数名(参数):
    函数体(执行代码)
    return 返回值  # 可选

2.基础案例

# 无参数、无返回值
def hello():
    print("hello world")

hello()

# 有参数、有返回值
def add(a, b):
    return a + b

res = add(3, 5)
print(res)

二、函数参数

1. 位置参数(必传,按顺序匹配)

def func(a, b):
    print(a, b)

func(1, 2)  # 正确,a=1,b=2
# func(1)  # 错误,少传参数

2. 关键字参数(可打乱顺序,指定参数名)

def func(a, b):
    print(a, b)

func(b=2, a=1)  # 正确,顺序可乱

3. 默认参数(可传可不传,有默认值)

def func(a, b=3):
    print(a + b)

func(2)      # 正确,b用默认值3,结果5
func(2, 4)   # 正确,覆盖默认值,结果6

4. 可变参数(不确定参数个数)

# *args:接收多个位置参数,返回元组
def func(*args):
    print(args)

func(1, 2, 3)  # 输出 (1,2,3)

# **kwargs:接收多个关键字参数,返回字典
def func(**kwargs):
    print(kwargs)

func(name="张三", age=20)  # 输出 {'name':'张三','age':20}

三、函数返回值

def add(a, b):
    return a + b  # 返回计算结果,终止函数

res = add(3, 4)
print(res)  # 7

# 无return,默认返回None
def func():
    print("test")

res = func()
print(res)  # None

# 多个返回值,用逗号分隔,返回元组
def func():
    return 1, 2, 3

a, b, c = func()
print(a, b, c)

四、函数调用与嵌套

1. 函数调用

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

# 直接调用
print(add(5, 3))
# 嵌套调用(函数内调用另一个函数)
def calc(a, b):
    return add(a, b) - sub(a, b)

print(calc(5, 3))

2. 函数嵌套(多层)

def outer():
    print("outer")
    def inner():
        print("inner")
    inner()  # 内部调用

outer()

五、局部变量与全局变量

# 局部变量(函数内定义,仅函数内可用)
def func():
    x = 10
    print(x)

func()
# print(x)  # 错误,外部无法访问

# 全局变量(函数外定义,全局可用)
x = 10
def func():
    print(x)

func()
print(x)

# global关键字(函数内修改全局变量)
x = 10
def func():
    global x
    x = 20

func()
print(x)  # 输出20

六、匿名函数(lambda,简化简单函数)

适用于简单逻辑,一行完成,无需def定义。

# 格式:lambda 参数: 表达式(返回值)
add = lambda a, b: a + b
print(add(3, 5))  # 8

# 配合内置函数使用(常用)
lst = [(1, 3), (2, 1), (3, 2)]
lst.sort(key=lambda x: x[1])  # 按元组第二个元素排序
print(lst)

七、注意

  • 位置参数必须在关键字参数前面

  • 默认参数必须在普通参数后面

  • 局部变量无法直接修改全局变量,需用global

  • return后函数立即终止,后续代码不执行

  • 匿名函数仅能写一个表达式,逻辑复杂用普通函数

更多推荐