新手教程---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中非常强大和灵活的特性,可以帮助我们优雅地扩展和修改代码功能。

相关推荐
艾上编程20 小时前
第三章——爬虫工具场景之Python爬虫实战:学术文献摘要爬取,助力科研高效进行
开发语言·爬虫·python
明洞日记21 小时前
【数据结构手册008】STL容器完全参考指南
开发语言·数据结构·c++
Hi_kenyon21 小时前
FastAPI+VUE3创建一个项目的步骤模板(二)
python·fastapi
kingmax5421200821 小时前
《数据结构C语言:单向链表-链表基本操作(尾插法建表、插入)》15分钟试讲教案【模版】
c语言·数据结构·链表
拉普拉斯妖10821 小时前
DAY38 Dataset和DataLoader
python
AI科技星21 小时前
质量定义方程常数k = 4π m_p的来源、推导与意义
服务器·数据结构·人工智能·科技·算法·机器学习·生活
Michelle802321 小时前
24大数据 16-1 函数复习
python
dagouaofei1 天前
AI自动生成PPT工具对比分析,效率差距明显
人工智能·python·powerpoint
Fine姐1 天前
数据结构04——二叉树搜索树BST
数据结构
ku_code_ku1 天前
python bert_score使用本地模型的方法
开发语言·python·bert