当前位置: 首页 > news >正文

Python入门(4):函数

目录

1  基本概念

1.1  函数的定义与调用

2  函数的参数

2.1  位置参数(Positional Arguments)

2.2  默认参数(Default Arguments)

2.3  关键字参数(Keyword Arguments)

**2.4 可变参数(*args 和 kwargs)

3  返回值与作用域

3.1  返回值(return)

3.2  变量的作用域

4  Lambda函数(匿名函数)

5  高阶函数与装饰器

5.1 高阶函数

5.2 装饰器(Decorator)

6  最佳实践与常见问题

说明:类型提示是非强制性和非限制性的


1  基本概念

        函数(Function) 是一段可重复调用的代码块,用于执行特定任务。通过函数,我们可以实现代码的模块化、复用和逻辑分离。

1.1  函数的定义与调用

# 定义一个简单的函数
def greet(name):
    """
    向用户打招呼的函数
    :param name: 用户名(字符串类型)
    :return: 无返回值(None)
    """
    print(f"Hello, {name}!")

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

关键点说明

  • def:定义函数的关键字。

  • greet:函数名,需遵循变量命名规则(小写字母+下划线)。

  • (name):参数列表,调用时需传入对应的值。

  • """docstring""":函数的文档字符串,用于说明功能(可通过help(greet)查看)。


2  函数的参数

2.1  位置参数(Positional Arguments)

        按参数定义的顺序传递值。

def add(a, b):
    """返回两个数的和"""
    return a + b

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

2.2  默认参数(Default Arguments)

        为参数提供默认值,调用时可省略。

def power(base, exponent=2):
    """计算base的exponent次方,默认平方"""
    return base ** exponent

print(power(3))      # 输出:9(使用默认exponent=2)
print(power(3, 3))   # 输出:27

注意:默认参数必须定义在非默认参数之后!

2.3  关键字参数(Keyword Arguments)

        通过参数名指定值,可忽略顺序。

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

describe_pet(name="Max")                 # 输出:I have a dog named Max.
describe_pet(animal_type="cat", name="Luna")  # 顺序无关

**2.4 可变参数(*args 和 kwargs)

  • *args:接收任意数量位置参数,存储为元组

  • **kwargs:接收任意数量关键字参数,存储为字典

def log_details(*args, **kwargs):
    """记录任意数量的位置参数和关键字参数"""
    print("Positional args:", args)      # 输出:(1, 2, 3)
    print("Keyword args:", kwargs)       # 输出:{'name': 'Alice', 'age': 25}

log_details(1, 2, 3, name="Alice", age=25)

3  返回值与作用域

3.1  返回值(return)

  • 函数通过return返回结果,若无return则返回None

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

def divide(a, b):
    """返回商和余数"""
    quotient = a // b
    remainder = a % b
    return quotient, remainder

q, r = divide(10, 3)  # q=3, r=1

3.2  变量的作用域

  • 局部变量:函数内定义的变量,仅函数内有效。

  • 全局变量:函数外定义的变量,需用global关键字修改。

count = 0  # 全局变量

def increment():
    global count  # 声明使用全局变量
    count += 1

increment()
print(count)  # 输出:1

4  Lambda函数(匿名函数)

        Lambda用于定义简单的单行函数,语法:lambda 参数: 表达式

lambda函数详解:Python扩展知识详解:lambda函数-CSDN博客

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

# Lambda等效
square = lambda x: x ** 2

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

# 常用场景:排序、map/filter等高阶函数
numbers = [1, 4, 2, 5]
sorted_numbers = sorted(numbers, key=lambda x: -x)  # 降序排序

5  高阶函数与装饰器

5.1 高阶函数

        接受函数作为参数或返回函数的函数。

def apply_operation(func, x, y):
    """应用传入的函数操作"""
    return func(x, y)

result = apply_operation(lambda a, b: a * b, 3, 4)  # 输出:12

5.2 装饰器(Decorator)

        装饰器用于扩展函数功能,而不修改原函数代码。

def log_time(func):
    """记录函数执行时间的装饰器"""
    def wrapper(*args, **kwargs):
        import time
        start = time.time()
        result = func(*args, **kwargs)  # 调用原函数
        print(f"Time taken: {time.time() - start:.2f}s")
        return result
    return wrapper

@log_time
def slow_function():
    import time
    time.sleep(2)

slow_function()  # 输出:Time taken: 2.00s

装饰器本质@log_time 等价于 slow_function = log_time(slow_function)


6  最佳实践与常见问题

  1. 单一职责原则:一个函数只做一件事。

  2. 避免全局变量:优先通过参数和返回值传递数据。

  3. 类型提示(Type Hints):Python 3.5+支持标注参数和返回类型。

# 类型提示:name: str 表示传输的参数是str类型
# -> str : 表示返回的参数是str类型
def greet(name: str) -> str:
    return f"Hello, {name}"

说明:类型提示是非强制性和非限制性的

  • 非强制性:Python解释器不会强制类型检查,即使传入错误类型也能运行
  • 非限定性:标注类型不会限制实际传入的类型,只是开发者的意图声明

相关文章:

  • WSN 经典定位算法
  • aerospike6.2.0集群部署
  • python 实现 Celery 任务队列系统
  • LXC 导入(Rockylinux,almalinux,oraclelunx,debian,ubuntu,openEuler,kail,opensuse)
  • 从全球首发到独家量产,远峰科技持续领跑数字钥匙赛道
  • 如何使用cpp操作香橙派GPIO --使用<wiringPi.h>
  • 数据治理的主题库是做什么的
  • pip安装timm依赖失败
  • C++进阶知识复习 1~15
  • Sentinel[超详细讲解]-5
  • 【ROS实战】04-自定义消息并实现ROS服务
  • Java 锁机制详解:用“厕所门”和“防盗门”轻松理解多线程同步
  • delphi intraweb 警告框
  • bluecode-数字增殖问题
  • CPU 4核8个逻辑处理器
  • 微服务集成测试 -华为OD机试真题(A卷、JavaScript)
  • 洛谷题单2-P5717 【深基3.习8】三角形分类-python-流程图重构
  • 页面加载过多图片导致卡顿——解决方案详解
  • 【蓝桥杯】单片机设计与开发,速成备赛
  • idea打包Plugin ‘org.springframework.boot:spring-boot-maven-plugin:’ not found
  • 世卫大会中国代表团:中国深入参与全球卫生治理,为构建人类卫生健康共同体贡献中国力量
  • 九江银行落地首单畜牧业转型金融业务,助推传统农业绿色智能
  • 83岁山水花鸟画家、书法家吴静山离世,系岭南画派代表人物
  • 魔都眼|邮轮港国际帆船赛启动,120名中外选手展开角逐
  • 光速晋级!2025年多哈世乒赛孙颖莎4比0战胜对手
  • 新闻1+1丨强对流天气频繁组团来袭,该如何更好应对?