Python3 函数详解
                           
天天向上
发布: 2025-03-14 22:45:50

原创
448 人浏览过

函数是程序设计中的基本构建块,在 Python 中,函数用于组织可重用的代码片段。Python 提供了非常灵活的函数定义与调用方式。


1. 函数的定义与调用

1.1 定义函数

使用 def 关键字来定义函数,后跟函数名和参数列表。函数体包含在缩进块中。

基本语法

def function_name(parameters):
    # 函数体
    return value

示例 1:定义一个简单的加法函数

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

result = add(3, 5)
print(result)  # 输出 8

1.2 调用函数

调用函数时,只需使用函数名并传入适当的参数。

add(2, 4)  # 调用函数并传入参数

2. 函数参数

2.1 位置参数(Positional Arguments)

函数的参数按照位置顺序传递。

def greet(name, age):
    print(f"Hello {name}, you are {age} years old.")

greet("Alice", 25)  # 位置参数

2.2 默认参数(Default Arguments)

在定义函数时,可以为参数设置默认值。如果调用时未传入对应的参数,将使用默认值。

def greet(name, age=30):
    print(f"Hello {name}, you are {age} years old.")

greet("Bob")  # 使用默认值 age=30
greet("Charlie", 40)  # 使用传入的值 age=40

2.3 可变参数(Variable-Length Arguments)

  • *args:用于接收任意数量的位置参数。args 是一个元组,包含所有传递的位置参数。
  • **kwargs:用于接收任意数量的关键字参数。kwargs 是一个字典,包含所有传递的键值对参数。

示例 1:使用 *args

def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3))  # 输出 6
print(sum_all(5, 10, 15, 20))  # 输出 50

示例 2:使用 **kwargs

def greet(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

greet(name="Alice", age=25, location="New York")
# 输出:
# name: Alice
# age: 25
# location: New York

2.4 参数传递的顺序

调用函数时,参数的传递顺序为:位置参数 -> 默认参数 -> 可变参数

def example(a, b=2, *args, c=3, **kwargs):
    print(a, b, args, c, kwargs)

example(1, 4, 5, 6, c=10, d=20)
# 输出:
# 1 4 (5, 6) 10 {'d': 20}

3. 返回值(Return Values)

函数可以使用 return 语句返回一个值,也可以返回多个值。没有 return 语句时,函数默认返回 None

3.1 返回单个值

def square(x):
    return x * x

result = square(4)
print(result)  # 输出 16

3.2 返回多个值

返回多个值时,Python 会将它们打包成一个元组。

def get_user_info():
    return "Alice", 25  # 返回一个元组

name, age = get_user_info()  # 解包元组
print(name, age)  # 输出 Alice 25

4. 局部变量与全局变量

4.1 局部变量

在函数内定义的变量是局部变量,作用范围仅限于函数内部。

def local_variable():
    x = 10  # 局部变量
    print(x)

local_variable()  # 输出 10
# print(x)  # 会报错,因为 x 是局部变量,函数外不可访问

4.2 全局变量

在函数外定义的变量是全局变量,作用范围为整个程序。

x = 20  # 全局变量

def global_variable():
    print(x)

global_variable()  # 输出 20

修改全局变量

如果在函数内想要修改全局变量,需要使用 global 关键字:

x = 10

def modify_global():
    global x
    x = 20

modify_global()
print(x)  # 输出 20

5. 匿名函数(Lambda 函数)

Lambda 函数 是一种快速定义小函数的方式,通常用于函数式编程中。它使用 lambda 关键字,通常用于简单的、一次性的函数。

5.1 基本语法

lambda 参数: 表达式

示例 1:Lambda 函数加法

add = lambda x, y: x + y
print(add(3, 5))  # 输出 8

示例 2:排序中的 lambda 函数

pairs = [(1, 2), (3, 1), (5, 4)]
pairs.sort(key=lambda x: x[1])
print(pairs)  # 输出 [(3, 1), (1, 2), (5, 4)]

6. 高阶函数

高阶函数是接受函数作为参数或返回函数的函数。在 Python 中,map()filter()reduce() 是常见的高阶函数。

6.1 map() 函数

map() 函数接受一个函数和一个可迭代对象,将函数应用到可迭代对象的每一个元素。

numbers = [1, 2, 3, 4]
squared = map(lambda x: x ** 2, numbers)
print(list(squared))  # 输出 [1, 4, 9, 16]

6.2 filter() 函数

filter() 函数根据给定的函数和可迭代对象,过滤出返回值为 True 的元素。

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers))  # 输出 [2, 4, 6]

6.3 reduce() 函数

reduce() 函数将一个二元函数应用于序列的每一项,将结果汇总为一个值。它位于 functools 模块中。

from functools import reduce

numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 输出 24

7. 函数的作用域

  • 局部作用域:在函数内部定义的变量,只能在函数内部访问。
  • 全局作用域:在函数外部定义的变量,可以在整个程序中访问。
  • 内建作用域:Python 内置的名称空间,例如 print()len() 等。

总结

  • 函数定义:使用 def 关键字定义函数,支持多种参数类型(位置参数、默认参数、可变参数)。
  • 返回值:通过 return 返回值,支持返回单个或多个值。
  • 作用域:区分局部变量与全局变量,通过 global 关键字修改全局变量。
  • Lambda 函数:用于定义简单的匿名函数。
  • 高阶函数:接受函数作为参数并返回函数的函数,如 map()filter()reduce()

函数是 Python 编程的核心工具之一,灵活掌握函数的用法,可以让你的代码更加简洁且高效。更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *