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

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

一、递归函数

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

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

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

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

 示例:

# n的阶乘和 
def get_product(v):if v == 1:return 1else:return v * get_product(v - 1)def get_sum(n):if n == 1:return 1else:return get_sum(n-1) + get_product(n)print(get_sum(4)) # 输出4的阶乘和:33

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

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

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

示例:

x = 10   # 全局变量def func():y = 20   # 局部变量print(x)   # 可以访问全局变量xprint(y)   # 可以访问局部变量yfunc()
print(x)   # 可以在函数外部访问全局变量x
print(y)   # 报错,不能在函数外部访问局部变量y

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

示例:

def func():x = 10   # 局部变量print(x)   # 可以访问局部变量xfunc()
print(x)   # 报错,不能在函数外部访问局部变量x

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

示例:

def outer_func():x = 10   # 外部函数的变量def inner_func():nonlocal x   # 声明使用外部函数的变量xx = 20   # 修改外部函数的变量x的值print(x)   # 可以访问修改后的外部函数的变量xinner_func()print(x)   # 可以在外部函数中访问修改后的变量xouter_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中,装饰器是一种特殊的函数,用于修改其他函数的行为或功能。装饰器可以在不修改原函数源代码的情况下,对函数进行包装、修饰或扩展。装饰器通常用于添加额外的功能、验证输入参数、缓存结果等。

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

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

相关文章:

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

一、递归函数 在Python中,递归函数是指一个函数调用自身的过程。递归函数一般包括两个部分:基本情况和递归情况。 基本情况是指在递归过程中终止递归的条件。如果不满足基本情况,递归函数将进入递归情况,调用自身,并缩…...

Windows tasklist命令详解,Windows查看进程

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 tasklist 可以…...

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一 个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…...

深度剖析机构号矩阵系统:如何根据业务需求做出明智选择

在数字化营销的浪潮中,短视频平台如抖音、快手等已成为品牌传播和用户互动的重要渠道。为了更高效地管理这些平台的账号,机构号矩阵系统应运而生。本文将深度剖析机构号矩阵系统,并探讨如何根据业务需求做出明智的选择。 机构号矩阵系统概述…...

go语言的基础语法

基础语法 与python、vue等类似,go语言也分常量和变量等,常量用const(不可变)和变量var(可变)定义 常量 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型,值不可更改,表达式只支…...

Modbus转Ethernet/IP网关模块与汇川PLC通讯案例

Modbus转Ethernet/IP网关模块(XD-MDEP100)是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包,实现不同厂家的设备之间的数据交换和共享。在汇川P…...

【玩转python】入门篇day11-位运算

1、位运算语法 计算机中所有的数据都是以二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(、-、、/)都是叫位运算,相比在代码中直接使用(、-、、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。 …...

【Gitlab】记一次升级 Gitlab 后 API 失效的问题

背景 前段时间,因内部使用的 Gitlab 版本存在漏洞,需要进行升级,于是乎,将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后,今天,突然发现这个接口获取不到…...

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…...

python如何创建SQLite 数据库连接,如何将数据库存储在内存中?

嗨&#xff0c;大家好&#xff0c;我是兰若姐姐。今天给大家说下如何创建SQLite 数据库连接,并将数据库存储在内存中,这是一种临时的、私有的数据存储空间&#xff0c;一般用于以下情形&#xff1a; 什么都不说&#xff0c;先上代码&#xff1a; import sqlite3创建数据库连接…...

机器学习-20-基于交互式web应用框架streamlit的基础使用教程

参考简洁而优雅地展示你的算法和数据——streamlit教程(一) 原理介绍与布局控制 参考Streamlit 讲解专栏(二):搭建第一个应用 Streamlit 讲解专栏(三):两种方案构建多页面 Streamlit 讲解专栏(五):探索强大而灵活的 st.write() 函数 1 streamlit 1.1 运行原理 im…...

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述

3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 以下是文档的核心内容总结&#xff1a; UAV系…...

sqlalchemy_dm

1、参考文档&#xff1a; https://blog.csdn.net/njcwwddcz/article/details/126554118 https://eco.dameng.com/document/dm/zh-cn/pm/dmpython-dialect-package.html 2、生成工具 sqlalchemy2.0.0.zip 3、安装步骤 conda create --name kes --clone kes1 rz unzip sql…...

基于springboot+vue+uniapp的驾校预约平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

echarts实现3d柱状效果

代码如下&#xff0c;单个的调第一个方法&#xff0c;多个柱状的调第二个方法&#xff0c;具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…...

Flask校验

WTForms 是一个 Python 库&#xff0c;用于处理和验证 Web 表单。它提供了很多功能来简化表单处理&#xff0c;包括字段类型、验证器、错误消息等。在 WTForms 中&#xff0c;validate 机制是用于确保表单数据满足特定条件的关键部分。 1.验证器&#xff08;Validators&#x…...

web前端 Vue 框架面试120题(一)

面试题 1 . 简述Vue的MVVM 模式? 参考回答&#xff1a; MVVM 是 Model-View-ViewModel的缩写&#xff0c;即将数据模型与数据表现层通过数据驱动进行分离&#xff0c;从而只需要关系数据模型的开发&#xff0c;而不需要考虑页面的表现&#xff0c;具体说来如下&#xff1a;M…...

UniApp__微信小程序项目实战 实现长列表分页,通过 onReachBottom 方法上划分次加载数据

UniApp 实现长列表分页&#xff0c;通过 onReachBottom 方法上划分次加载数据 项目实战中比较常见&#xff0c;方便下次使用 文章目录 一、应用场景? 二、作用 三、使用步骤&#xff1f;          3.1 实现的整体思路&#xff1f;    …...

数据结构(功能受限的表-栈队列)

功能受限的表结构 一、栈和队列介绍 栈和队列是两种重要的线性结构&#xff0c;从数据结构角度&#xff0c;他们都是线性表&#xff0c;特殊点在于它们的操作被限制&#xff0c;也就是所谓的功能受限&#xff0c;统称功能受限的线性表 从数据类型角度&#xff0c;它们也可以是…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...