python函数

一、函数的基本概念

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。使用函数可以提高代码的复用性和可读性。

在Python中,函数具有以下特点:

函数是第一类对象,可以赋值给变量、作为参数传递给其他函数、作为函数的返回值

函数定义使用def关键字

函数可以有参数和返回值

函数可以嵌套定义

二、函数的定义与调用

2.1 函数的定义

Python中函数定义的基本语法:

def 函数名(参数列表):
    """函数文档字符串(docstring)"""
    函数体
    [return 返回值]

示例:

def greet(name):
    """向指定的人打招呼"""
    return f"Hello, {name}!"

2.2 函数的调用

调用函数的语法:函数名(参数列表)

示例:

message = greet("Alice")
print(message)  # 输出: Hello, Alice!

2.3 文档字符串(docstring)

文档字符串是函数定义中的第一个字符串,用于描述函数功能,可以通过help()函数或__doc__属性查看。

print(greet.__doc__)  # 输出: 向指定的人打招呼
help(greet)  # 显示更详细的帮助信息

三、函数参数

3.1 位置参数

位置参数是最常见的参数类型,调用时必须按照定义的顺序传递参数。

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

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

3.2 关键字参数

关键字参数允许调用时指定参数名,不需要严格按照顺序传递。

result = add(b=5, a=3)  # 关键字参数,顺序可以调换
print(result)  # 输出: 8

3.3 默认参数

默认参数在定义时指定默认值,调用时可以不传递该参数,使用默认值。

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Bob"))  # 使用默认的greeting,输出: Hello, Bob!
print(greet("Bob", "Hi"))  # 提供greeting参数,输出: Hi, Bob!

注意:默认参数必须放在位置参数之后。

3.4 可变参数

可变参数允许传递任意数量的参数,分为两种:

3.4.1 *args - 接收可变数量的位置参数

*args会将传递的多个位置参数打包成一个元组。

def sum_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_numbers(1, 2, 3))  # 输出: 6
print(sum_numbers(10, 20, 30, 40))  # 输出: 100
3.4.2 **kwargs - 接收可变数量的关键字参数

**kwargs会将传递的多个关键字参数打包成一个字典。

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

print_info(name="Alice", age=30, city="New York")
# 输出:
# name: Alice
# age: 30
# city: New York

3.5 参数组合使用

参数可以组合使用,但顺序必须是:位置参数 → *args → 关键字参数 → **kwargs

def func(a, b, *args, c=0, **kwargs):
    print(f"a: {a}, b: {b}")
    print(f"args: {args}")
    print(f"c: {c}")
    print(f"kwargs: {kwargs}")

func(1, 2, 3, 4, c=5, d=6, e=7)
# 输出:
# a: 1, b: 2
# args: (3, 4)
# c: 5
# kwargs: {'d': 6, 'e': 7}

四、函数返回值

4.1 return语句

return语句用于从函数中返回值,结束函数执行。

def square(x):
    return x * x

result = square(5)
print(result)  # 输出: 25

4.2 多返回值

Python函数可以返回多个值,实际上是返回一个元组,然后自动解包。

def divide(a, b):
    quotient = a // b
    remainder = a % b
    return quotient, remainder  # 实际返回的是一个元组

q, r = divide(10, 3)
print(q, r)  # 输出: 3 1

4.3 无return语句的函数

如果函数没有return语句,或者return后没有值,函数将返回None。

def say_hello():
    print("Hello")

result = say_hello()
print(result)  # 输出: None

五、函数的高级特性

5.1 嵌套函数

在函数内部可以定义另一个函数,称为嵌套函数或内部函数。

def outer_function(x):
    def inner_function(y):
        return y * 2
    return inner_function(x) + 3

print(outer_function(5))  # 输出: 13 (5*2 + 3)

5.2 闭包

闭包是指内部函数引用了外部函数的变量,并且外部函数返回了内部函数。

def make_multiplier(n):
    def multiplier(x):
        return x * n  # 引用了外部函数的变量n
    return multiplier  # 返回内部函数

double = make_multiplier(2)
triple = make_multiplier(3)

print(double(5))  # 输出: 10
print(triple(5))  # 输出: 15

5.3 装饰器

装饰器是一种特殊的函数,用于修改其他函数的功能,在不改变原函数代码的情况下为函数添加新功能。

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"调用函数: {func.__name__}")
        result = func(*args, **kwargs)
        print(f"函数 {func.__name__} 调用结束")
        return result
    return wrapper

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

print(add(3, 5))
# 输出:
# 调用函数: add
# 函数 add 调用结束
# 8

5.4 匿名函数(lambda)

lambda函数是一种简洁的、单行的匿名函数,使用lambda关键字定义。

# 语法: lambda 参数: 表达式
square = lambda x: x * x
print(square(5))  # 输出: 25

# 常用于函数式编程中,如作为sorted函数的key参数
numbers = [(1, 3), (4, 1), (2, 5)]
sorted_numbers = sorted(numbers, key=lambda x: x[1])
print(sorted_numbers)  # 输出: [(4, 1), (1, 3), (2, 5)]

5.5 递归函数

递归函数是指在函数内部调用自身的函数,通常用于解决可以分解为相似子问题的问题。

def factorial(n):
    if n == 1:  # 基线条件(终止条件)
        return 1
    else:
        return n * factorial(n - 1)  # 递归调用

print(factorial(5))  # 输出: 120 (5*4*3*2*1)

注意:递归函数必须有明确的基线条件(终止条件),否则会导致无限递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值