新手教程---python-函数(新添加)

一、递归函数

在Python中,递归函数是指一个函数调用自身的过程 。递归函数一般包括两个部分:基本情况和递归情况

基本情况是指在递归过程中终止递归的条件。如果不满足基本情况,递归函数将进入递归情况,调用自身,并缩小问题的规模。

注:递归函数又有一个出口(结束条件)!

递归的深度(函数的条用次数)默认为1000,通过sys模块可以改变递归深度。

示例:

复制代码
# n的阶乘和 
def get_product(v):
    if v == 1:
        return 1
    else:
        return v * get_product(v - 1)


def get_sum(n):
    if n == 1:
        return 1
    else:
        return get_sum(n-1) + get_product(n)


print(get_sum(4)) # 输出4的阶乘和:33

二、变量的作用域(global、nonlocal)

在Python中,变量的作用域指的是变量的可访问范围 。Python中有三种变量的作用域**:全局作用域(global)、局部作用域(local)和非局部作用域(nonlocal)**。

1、全局作用域(global):全局作用域是在整个程序中定义的变量可被访问的范围。在任何函数内部声明的变量,如果没有使用global关键字进行声明,那么该变量都是局部变量,只能在函数内部使用。而在函数外部声明的变量是全局变量,可以在整个程序中的任何地方访问。

示例:

python 复制代码
x = 10   # 全局变量

def func():
    y = 20   # 局部变量
    print(x)   # 可以访问全局变量x
    print(y)   # 可以访问局部变量y

func()
print(x)   # 可以在函数外部访问全局变量x
print(y)   # 报错,不能在函数外部访问局部变量y

2、局部作用域(local):局部作用域是在函数内部定义的变量可被访问的范围。在函数内部声明的变量只能在函数内部使用,无法在函数外部访问。

示例:

python 复制代码
def func():
    x = 10   # 局部变量
    print(x)   # 可以访问局部变量x

func()
print(x)   # 报错,不能在函数外部访问局部变量x

3、非局部作用域(nonlocal):非局部作用域是在嵌套函数中声明的变量可被访问的范围。当在一个函数内部再定义一个函数时,内部函数可以访问外部函数的变量,但不能修改该变量的值。如果需要在内部函数中修改外部函数的变量,可以使用nonlocal关键字进行声明。

示例:

python 复制代码
def outer_func():
    x = 10   # 外部函数的变量

    def inner_func():
        nonlocal x   # 声明使用外部函数的变量x
        x = 20   # 修改外部函数的变量x的值
        print(x)   # 可以访问修改后的外部函数的变量x

    inner_func()
    print(x)   # 可以在外部函数中访问修改后的变量x

outer_func()

总结:

  • 全局作用域中的变量可以在整个程序中任何地方访问。
  • 局部作用域中的变量只能在函数内部访问。
  • 非局部作用域可以在嵌套函数中访问外部函数的变量,并使用nonlocal关键字修改该变量的值。

三、闭包

在Python中,闭包是指函数对象可以访问并修改定义在其外部作用域内的变量的能力。具体来说,闭包可以在内部函数中引用外部函数的变量,即使外部函数已经执行完毕,这些变量仍然可以被内部函数访问和修改。

闭包的特点:

  • 内部函数可以引用外部函数的变量。
  • 外部函数的变量在外部函数执行完后仍然可以被内部函数访问和修改。
  • 内部函数可以作为外部函数的返回值返回或作为其他函数的参数传递。

示例:

复制代码
import random
def fun1():
    print("fun1")
    d0 = []

    def fun2():
        d0.append(random.randint(1, 20))
        print("fun2", d0)

    return fun2
# 不同的变量名存储的值不共用
r1 = fun1()
r1()
r1()
r1()
r1()  # fun2 [18, 4, 12, 2]
r2 = fun1()
r2()  # fun2 [13]

四、装饰器

在Python中,装饰器是一种特殊的函数,用于修改其他函数的行为或功能。装饰器可以在不修改原函数源代码的情况下,对函数进行包装、修饰或扩展。装饰器通常用于添加额外的功能、验证输入参数、缓存结果等。

下面是一个简单的装饰器示例:

python 复制代码
def decorator_function(original_function):
    def wrapper_function():
        print("Before executing the function")
        original_function()
        print("After executing the function")
    return wrapper_function

@decorator_function
def hello():
    print("Hello, world!")

hello()

在上面的示例中,decorator_function是一个装饰器函数,它接受一个函数作为参数,并返回一个修饰后的函数。wrapper_function是内部函数,包含了对原函数的修饰逻辑。@decorator_function表示将hello函数用decorator_function装饰。

当执行hello()时,实际执行的是wrapper_function。在执行original_function()之前和之后,打印了一些额外的信息。这样,我们就实现了在不修改hello函数源代码的情况下,给它添加了额外的功能。

这只是一个简单的装饰器示例,实际中装饰器还可以传递参数、支持多层装饰等。装饰器是Python中非常强大和灵活的特性,可以帮助我们优雅地扩展和修改代码功能。

相关推荐
神仙别闹2 分钟前
基于Python+Neo4j实现新冠信息挖掘系统
开发语言·python·neo4j
navyDagger3 分钟前
GAN生成对抗网络数学原理解释并实现MNIST数据集生产(附代码演示)
人工智能·python
没有梦想的咸鱼185-1037-16637 分钟前
【降尺度】ChatGPT+DeepSeek+python+CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
python·chatgpt·数据分析
berryyan10 分钟前
傻瓜教程安装Trae IDE用AI撰写第一个AKShare接口脚本
python·trae
灏瀚星空27 分钟前
从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念
笔记·python·学习·金融·概率论
Hellohistory32 分钟前
HOTP 算法与实现解析
后端·python
伊织code34 分钟前
cached-property - 类属性缓存装饰器
python·缓存·cache·装饰器·ttl·property·cached-property
无敌的牛41 分钟前
AVL树的介绍与学习
数据结构·学习
明明跟你说过1 小时前
深度学习常见框架:TensorFlow 与 PyTorch 简介与对比
人工智能·pytorch·python·深度学习·自然语言处理·tensorflow
搏博1 小时前
专家系统的基本概念解析——基于《人工智能原理与方法》的深度拓展
人工智能·python·深度学习·算法·机器学习·概率论