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

Python学习笔记(三)

文章目录

  • Python函数详解
    • 基本概念
    • 定义函数
    • 函数调用
    • 参数类型
      • 1. 位置参数
      • 2. 默认参数
      • 3. 关键字参数
      • 4. 可变参数
    • 返回值
    • 函数作用
    • 函数中的变量
      • 作用域规则
    • 递归函数
    • Lambda函数
    • 函数注解
    • 装饰器
    • 文档字符串
    • 其他重要概念
      • 闭包
      • 生成器函数
      • 高阶函数

Python函数详解

基本概念

函数是Python中组织和重用代码的基本方式,它是一段具有特定功能的、可重复使用的代码块。

定义函数

使用def关键字定义函数:

def function_name(parameters):
    """函数文档字符串"""
    # 函数体
    return value

函数调用

result = function_name(arguments)

参数类型

1. 位置参数

按照定义顺序传递的参数

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

2. 默认参数

参数有默认值,调用时可省略

def greet(name="World"):
    print(f"Hello, {name}!")
a = input() //输入“world”
greet(a)  
    

输出:
Hello, world!

3. 关键字参数

调用时指定参数名,可不按顺序

def person_info(name, age):
    print(f"{name} is {age} years old")

person_info(age=25, name="Alice")

4. 可变参数

  • *args:接收任意数量的位置参数(元组)
  • **kwargs:接收任意数量的关键字参数(字典)
def print_info(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)

返回值

函数使用return返回值,可返回多个值(实际上是元组)

def calculate(a, b):
    return a+b, a-b, a*b

sum_result, diff_result, prod_result = calculate(10, 5)

("return" 这个概念起源于计算机科学,最初用于指示一个函数执行完毕并将结果返回给调用它的地方。在编程语言中,我们可以通过使用 "return" 关键字来返回函数的执行结果。当函数执行到 "return" 语句时,它会立即停止执行并将指定的结果返回给调用者。这使得我们可以在程序中使用函数来执行特定的操作,并在需要的时候获取到函数执行的结果进行后续处理。因此,"return" 在编程中扮演着非常重要的角色,用于控制函数的执行流程和提供结果输出。)

函数作用

  1. 代码重用:避免重复编写相同代码
  2. 模块化:将复杂问题分解为小功能块
  3. 提高可读性:通过有意义的函数名使代码更易理解
  4. 便于维护:修改只需在函数内部进行

函数中的变量

作用域规则

  • 局部变量:函数内部定义的变量,只在函数内有效
  • 全局变量:函数外部定义的变量,函数内需用global声明才能修改
  • 非局部变量:嵌套函数中,用nonlocal声明外层函数的变量

nonlocal 是 Python 中的一个关键字,用于在​​嵌套函数​​中声明一个变量既不是当前函数的局部变量,也不是全局变量,而是属于外层(非全局)作用变量。它允许内层函数修改外层函数中定义的变量。
nonlocal 只能在嵌套函数中使用。 如果外层函数没有对应的变量,会抛出 SyntaxError。

x = 10  # 全局变量

def outer():
    y = 20  # 非局部变量
    
    def inner():
        nonlocal y # 声明 y 是外层函数的变量
        global x  #用于声明修改全局变量
        z = 30  # 局部变量
        y += 1   # 修改外层函数的变量
        x += 1

Python 的变量查找遵循 ​​LEGB 规则​​(Local → Enclosing → Global → Built-in),nonlocal 的优先级介于 Local 和 Enclosing 之间。

递归函数

函数调用自身来解决问题,必须包含:

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

Lambda函数

匿名函数,用于简单操作,语法:lambda 参数: 表达式

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

# Lambda等价形式
square = lambda x: x ** 2

# 常用场景
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))

上述常用场景代码解释

函数注解

Python 3的类型提示功能(不强制类型检查):

def add(a: int, b: int) -> int:
    return a + b

装饰器

修改或增强函数功能的工具:

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"函数 {func.__name__} 执行时间: {end-start:.2f}秒")
        return result
    return wrapper

@timer
def long_running_function():
    time.sleep(2)

代码解释

文档字符串

函数的说明文档,可通过help()__doc__访问:
Python函数的说明文档的访问方式

def add(a, b):
    """
    计算两个数的和
    
    参数:
        a (int/float): 第一个加数
        b (int/float): 第二个加数
        
    返回:
        int/float: 两个数的和
        
    示例:
        >>> add(2, 3)
        5
    """
    return a + b

其他重要概念

闭包

函数记住并访问其词法作用域的能力:

def outer_func(x):
    def inner_func(y):
        return x + y
    return inner_func

closure = outer_func(10)
print(closure(5))  # 输出15

生成器函数

使用yield返回值的特殊函数:

def count_up_to(max):
    count = 1
    while count <= max:
        yield count
        count += 1

counter = count_up_to(5)
for num in counter:
    print(num)

高阶函数

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

def apply_operation(func, x, y):
    return func(x, y)

result = apply_operation(lambda a, b: a * b, 3, 4)

相关文章:

  • Active Directory 域服务
  • <C#>在 .NET 开发中,依赖注入, 注册一个接口的多个实现
  • react从零开始的基础课
  • 【VSCode配置】运行springboot项目和vue项目
  • 精准测试背后的关键技术:电机试验平台(北重数控滑台设计专业)
  • STM32 模块化开发指南 · 第 2 篇 如何编写高复用的外设驱动模块(以 UART 为例)
  • 程序化广告行业(77/89):融资、并购与上市全景洞察
  • UE的AI判断队伍归属的机制:IGenericTeamAgentInterface接口
  • 基础数学:线性代数与优化理论
  • 机器学习 从入门到精通 day_04
  • 分治-归并系列一>翻转对
  • 移动端六大语言速记:第14部分 - 数据库操作
  • 产品开发过程模型
  • 宝塔面板面试内容整理-服务重启
  • 对接日本金融市场数据全指南:K线、实时行情与IPO新股
  • myeclise导入项目并运行
  • vs中版本号如何自动生成,解放双手?
  • 低代码开发能否取代后端?深度剖析与展望-优雅草卓伊凡
  • 蓝桥杯第十五届真题——握手问题
  • 案例分析:东华新径,拉动式生产的智造之路
  • 个人能否做网站/百度seo优化
  • 上海松江做网站公司/平台如何做推广
  • 万网域名优惠口令/临沂seo排名外包
  • wordpress调整语言/seo云优化软件破解版
  • 免费的小网站/seo产品推广
  • 网站专题效果图怎么做/seo职业培训班