Python函数基础全面解析

目录

1. 函数目的

2. 函数定义

3. 函数声明

4. 函数调用

5. 函数形参

6. 函数实参

7. 函数返回值

8. 函数的参数类型

9. 匿名函数

10. 闭包

11. 装饰器

12. 内置函数


1. 函数目的

函数是Python编程中的基本构建块,它们的主要目的是:

  • 代码重用:避免重复编写相同的代码

  • 模块化:将复杂问题分解为更小、更易管理的部分

  • 抽象:隐藏实现细节,只暴露必要的接口

  • 组织代码:使代码更清晰、更易于维护

# 没有函数的情况
print("欢迎,张三!")
print("今天是2023年10月15日")

print("欢迎,李四!")
print("今天是2023年10月15日")

# 使用函数改进
def greet(name):
    print(f"欢迎,{name}!")
    print("今天是2023年10月15日")

greet("张三")
greet("李四")

2. 函数定义

在Python中,使用def关键字定义函数:

def function_name(parameters):
    """可选的文档字符串"""
    # 函数体
    # 可以包含return语句
    return value

实例:

def calculate_area(length, width):
    """计算矩形的面积"""
    area = length * width
    return area

3. 函数声明

在Python中,函数声明和定义是同时完成的(即使用def语句时既声明又定义了函数)。Python没有单独的声明步骤。

# 函数声明和定义同时完成
def say_hello():
    print("Hello, World!")

4. 函数调用

定义函数后,可以通过函数名加括号来调用它:

# 定义函数
def greet(name):
    print(f"Hello, {name}!")

# 调用函数
greet("Alice")  # 输出: Hello, Alice!
greet("Bob")    # 输出: Hello, Bob!

5. 函数形参

形参(形式参数)是函数定义时括号中声明的变量:

def add_numbers(a, b):  # a和b是形参
    return a + b

形参的特点:

  • 只在函数内部有效

  • 在函数被调用时接收实参的值

  • 可以有默认值(称为默认参数)

6. 函数实参

实参(实际参数)是调用函数时传递给函数的值:

result = add_numbers(5, 3)  # 5和3是实参
print(result)  # 输出: 8

传递实参的方式:

位置参数:按位置顺序传递

def describe_pet(animal, name):
    print(f"I have a {animal} named {name}.")

describe_pet("dog", "Buddy")

关键字参数:按参数名传递

describe_pet(name="Buddy", animal="dog")

混合使用:先位置参数,后关键字参数

describe_pet("dog", name="Buddy")

7. 函数返回值

使用return语句从函数返回一个值:

def square(number):
    return number * number

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

特点:

  • 可以返回任意类型的值

  • 可以返回多个值(实际上是返回一个元组)

  • 如果没有return语句,函数返回None

多值返回示例:

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

user_name, user_age = get_user_info()

8. 函数的参数类型

Python函数支持多种参数类型:

必需参数:调用时必须提供的参数

def greet(name):  # name是必需参数
    print(f"Hello, {name}!")

默认参数:有默认值的参数

def greet(name, message="Hello"):  # message有默认值
    print(f"{message}, {name}!")

greet("Alice")  # 使用默认message
greet("Bob", "Hi")  # 覆盖默认值

可变长度参数

*args:接收任意数量的位置参数,作为元组

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

print(sum_numbers(1, 2, 3))  # 输出: 6

**kwargs:接收任意数量的关键字参数,作为字典

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

print_info(name="Alice", age=25, city="New York")

仅关键字参数

def create_user(name, *, age, city):
    print(f"{name}, {age}, {city}")

create_user("Alice", age=25, city="NY")  # 正确
create_user("Bob", 30, "LA")  # 错误,age和city必须作为关键字参数

9. 匿名函数

匿名函数(lambda函数)是没有名称的小型函数,使用lambda关键字创建:

# 语法
lambda arguments: expression

示例:

# 普通函数
def square(x):
    return x * x

# 等效的lambda函数
square = lambda x: x * x

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

常见用途:

作为参数传递给高阶函数

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

简单的条件判断

max_value = lambda a, b: a if a > b else b
print(max_value(5, 3))  # 输出: 5

10. 闭包

闭包是由函数及其相关引用环境组合而成的实体:

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

closure = outer_function(10)
print(closure(5))  # 输出: 15
print(closure(20))  # 输出: 30

闭包的特点:

  • 内部函数可以访问外部函数的变量

  • 即使外部函数已经执行完毕,内部函数仍然可以记住这些变量

  • 常用于装饰器和函数工厂

实用示例:

def power_factory(exponent):
    def power(base):
        return base ** exponent
    return power

square = power_factory(2)
cube = power_factory(3)

print(square(4))  # 输出: 16
print(cube(3))    # 输出: 27

11. 装饰器

装饰器是修改其他函数功能的函数,它们提供了一种简洁的语法来使用高阶函数:

基本装饰器:

def my_decorator(func):
    def wrapper():
        print("函数执行前")
        func()
        print("函数执行后")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()
# 输出:
# 函数执行前
# Hello!
# 函数执行后

带参数的装饰器:

def repeat(num_times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(num_times=3)
def greet(name):
    print(f"Hello {name}")

greet("Alice")
# 输出:
# Hello Alice
# Hello Alice
# Hello Alice

12. 内置函数

Python提供了许多有用的内置函数,以下是一些常用的:

输入输出

print("Hello, World!")  # 输出到控制台
name = input("请输入你的名字: ")  # 从控制台获取输入

类型转换

int("123")   # 字符串转整数 → 123
float("3.14")  # 字符串转浮点数 → 3.14
str(123)     # 整数转字符串 → "123"
list((1,2,3)) # 元组转列表 → [1, 2, 3]

数学运算

abs(-5)      # 绝对值 → 5
round(3.14159, 2)  # 四舍五入 → 3.14
pow(2, 3)    # 幂运算 → 8 (等价于 2**3)

序列操作

len([1, 2, 3])  # 获取长度 → 3
max([1, 2, 3])  # 最大值 → 3
min([1, 2, 3])  # 最小值 → 1
sum([1, 2, 3])  # 求和 → 6
sorted([3, 1, 2])  # 排序 → [1, 2, 3]
reversed([1, 2, 3])  # 反转 → [3, 2, 1] (返回迭代器)

其他实用函数

help(print)    # 查看帮助文档
dir([])        # 查看对象的所有属性和方法
globals()      # 返回全局符号表
locals()       # 返回局部符号表

掌握这些函数基础概念是成为Python程序员的重要一步。函数不仅能帮助你组织代码,还能让你的程序更加模块化、可重用和易于维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值