python内部函数和比外部函数快_Python:如何允许“内部函数”更改多个“外部函数”中的非局部变量...

假设我有一个函数,它在函数中的不同位置重复了大量代码,我可以执行以下操作:def foo():

def bar():

# do some stuff

bar()

# do some other stuff

bar()

我可以在bar内“读取”在foo范围内的变量,此外,如果需要编辑它们,我可以这样做:

^{pr2}$

问题

现在假设我有几个函数,foo_1,foo_2,foo_3等等,所有这些函数都有相同的bar代码行。在每个foo_i内定义bar会很单调(更不用说每次我想更改bar)会很单调,但是下面的操作并不起作用,因为nonlocal似乎是在定义函数的范围内工作,而不是在其中调用函数:def bar():

nonlocal var1, var2 # SyntaxError: no binding for nonlocal 'var1' found

# do some stuff

def foo_1():

# stuff involving var1 and var2

bar()

# do some other stuff

bar()

潜在解决方案

解决这个问题的一种方法是传入所有需要更改的变量,然后再返回它们。像这样:def bar(var1, var2):

# do some stuff

return var1, var2

def foo_1():

# stuff involving var1 and var2

var1, var2 = bar(var1, var2)

# do some other stuff

var1, var2 = bar(var1, var2)

我的问题

上述解决方案存在一些问题:它比简单的bar()更为冗长(尤其是当变量较多时)

实际上,在每个foo_i中定义bar并没有多大的改进,因为假设我之前刚刚在bar中访问了一个变量,现在我决定编辑它。我不仅需要更改函数,而且还需要更改调用它的所有地方(因为现在我必须返回一个额外的变量)。在

有没有更好的方法来实现上述目标?在

(这感觉像是一个没有答案的问题,所以如果是重复的问题,我道歉。我还没找到任何东西。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis typehandler

建立TypeHandler 我们知道java有java的数据类型,数据库有数据库的数据类型,那么我们在往数据库中插入数据的时候是如何把java类型当做数据库类型插入数据库,在从数据库读取数据的时候又是如何把数据库类型当做java类型来处理呢?这…

java图片压缩不失真_软件分享 | Lit图片压缩

软件分享01软件名称Lit图片压缩02软件版本V1.2.0.01603软件简介Lit图片压缩app是一款免费简单好用的图片压缩工具,让图片在不失真的情况下,进行压缩和裁剪,轻松就能压缩成你想要的尺寸,并且原来的像素不失真,保持原画质…

从大型主机到个人计算机:机器人产业可以从pc普及革命中学到什么?

来源:大数据文摘出品自主化机器人已逐渐变得无处不在。自动吸尘器、自动割草机、会简单交互的小玩具,以及呼之欲出的自动驾驶汽车,都可以看作是一个能实现某种自动功能的机器人。一辈接着一辈,我们一直在期待出现《星球大战》中的…

【Poj1017】Packets

http://poj.org/problem?id1017 艰难啊 弄了很久咧 拍了几十万组,以后拍要多组数据 Solution 从大wangxiaofang 从大往小放,有空余的从大往小填 注意细节 Notice b<0的情况,还有就是当前填充完了,还剩一点给下一个(小一点的)填 Code // This file is made by YJinpeng&…

vb上传文件到MySQL_ASP.NET上传文件到数据库VB版

代码如下&#xff1a;敬请过目&#xff01;If Me.FileUpload1.PostedFile.ContentLength > 0 ThenDim cn As New Data.OleDb.OleDbConnectionDim dc As Data.OleDb.OleDbCommandDim para As Data.OleDb.OleDbParameterDim SQL, FileName As String连线字符串cn.ConnectionSt…

python爬虫框架论文开题报告范文_研究思路及框架--开题报告

三、研究的思路、论文框架本文采取文献研究、定性研究、定量研究、计量研究等研究方法&#xff0c;紧紧围绕“宁波对外贸易对产业结构升级的影响”这一主题展开&#xff0c;在研究国内外关于这方面的文献的基础上&#xff0c;深入分析在一个开放经济中宁波对外贸易可以通过哪些…

构建超级智能未来系统的三原则

《崛起的超级智能》作者&#xff0c;计算机博士刘锋前言&#xff1a;科技领域看不见的手在过去50年促使互联网从网状结构进化成为大脑模型&#xff0c;而人类群体智慧与机器群体智能通过这个互联网大脑架构形成人类前所未有的超级智能形式。在构建互联网大脑模型成熟状态的过程…

游戏“冰川滑行”设计稿(第一版)

名称&#xff1a;&#xff08;暂定&#xff09;冰川滑行 游戏类型&#xff1a;关卡式迷宫 基本规则&#xff1a;在迷宫中可以向上下左右方向移动&#xff0c;每次移动只能在碰到障碍物或到达无冰区停止&#xff1b;从入口进入&#xff0c;从出口离开为胜利。 地形种类&#xff…

mysql授予权限和撤销权限的关系_MySQL数据库常用的授予权限和撤销权限的命令讲解...

MySQL 赋予用户权限命令的简单格式可概括为&#xff1a;一、grant 普通数据用户&#xff0c;查询、插入、更新、删除 数据库中所有表数据的权利1 2 3 4grant select on testdb.* to common_user% grant insert on testdb.* to common_user% grant update on testdb.* to common…

spring的aop_Spring AOP 小结

1. AOP专业概述在软件行业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意思为&#xff1a;面向切面编程&#xff0c;通过预编译方法和运行期动态代理实现程序功能的统一维护的一种技术。要理解切面变成&#xff0c;就需要先理解什么是切面。用刀把一个西瓜…

【解析】工业机器人中的各类传感器技术应用

来源&#xff1a;中国机器人网前言工业机器人涉及到的传感器有哪些&#xff1f;2012年&#xff0c;美国提出“工业互联网”&#xff0c;2013年&#xff0c;德国提出“工业4.0”&#xff0c;2015年&#xff0c;中国提出“中国制造2025”。在工业物联网、AR、云计算等技术热潮下&…

java水果超市mysql_Java基础 | 项目实战之水果超市

传智播客线上平台博学谷启动项目实战&#xff0c;在学习过程中真正还原企业实际开发流程及团队配合&#xff0c;同时对所学知识最大化吸收项目启动准备01规定学习位置参加项目实战&#xff0c;学习位置不能小于当前标注的位置02项目分组本次Java基础参加项目实战的同学较多&…

android dp sp px_Android屏幕适配★★重点盘点★★

引言屏幕适配是 android 开发/面试 绕不开的一个问题。本文 将屏幕适配的知识要点完整展现给各位读者。正文大纲android需要做屏幕适配的原因基础知识点(★★★很重要★★★)屏幕适配攻略正文↓↓↓android需要做屏幕适配的原因关键字&#xff1a;android碎片化android面世以来…

AI与网络安全的未来:数据集与协同能力

来源&#xff1a;安全牛有关 AI 优势与风险的争论如今已成媒体日常&#xff0c;很多此类讨论都集中在潜在负面影响上&#xff0c;话题范围从工作自动化导致广泛失业到 AI 用于创建 “深度伪造” 视频。但另一方面&#xff0c;我们已经在享受 AI 自动化助手的正面效果所带来的种…

GIS-013-Cesium Terrain 数据生成

一、Python 1、修改Python脚本文件 if __name____main__: #sys.argv [F:\\000_Terrain\\T7-gdal2srtmtiles-demo.py, --cesium, --resume, -z, 0-8, -p, geodetic, F:\\50_GIS\\4000_Data\\world_raster\\Day.tif, F:\000_Terrain\\terrain_tiles] sys.argv [F:\\000_Terrain…

如何在linux下yum安装mysql_linux下使用yum安装mysql详解

1、安装客户端和服务器端确认mysql是否已安装&#xff1a;yum list installed mysql*rpm -qa | grep mysql*查看是否有安装包&#xff1a;yum list mysql*安装mysql客户端&#xff1a;yum install mysql安装mysql 服务器端&#xff1a;yum install mysql-serveryum install mys…

ucinet计算聚类系数大于1怎么办_聚类性能评估-ARI(调兰德指数)

注意&#xff1a;ARI取值范围为[-1,1]&#xff0c;值越大越好&#xff0c;反映两种划分的重叠程度&#xff0c;使用该度量指标需要数据本身有类别标记。用C表示实际的类别划分&#xff0c;K表示聚类结果。定义a 为在C中被划分为同一类&#xff0c;在K中被划分为同一簇的实例对数…

这才是未来真正的风口,一文看清13种硬科技投资趋势

来源&#xff1a;资本实验室如果非要说“风口”&#xff0c;那么在未来10年乃至20年&#xff0c;硬科技就是最大的风口。近期&#xff0c;由麻省理工学院创建的非盈利投资机构The Engine与投资研究机构Pitchbook联合发布了一份名为《2019硬科技图景》的研究报告。该报告将硬科技…

sleep(),wait(),yield(),notify()

sleep()&#xff0c;wait()&#xff0c;yield() 的区别 sleep方法和yield方法是Thread类的方法&#xff0c;wait方法是Object的方法。 sleep 方法使当前运行中的线程睡眼一段时间&#xff0c;进入不可运行状态&#xff0c;这段时间的长短是由程序设定的&#xff0c;不会释放锁标…

mysql 滚屏查看查询结果_MySQL_查询操作(select)

查询操作1、别名查询select id 序号,name名字from test_1209ryc;2、条件查询(between)select * from test_1209ryc where id between 2 and 5;3、条件查询(in)select * from test_1209ryc where id in(1,2,3);4、子查询select * from test_1209ryc where id in (select id from…