首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对self进行迭代是不是一种糟糕的做法?

对self进行迭代是一种糟糕的做法。在编程中,self通常用于表示当前对象的引用,而迭代是指遍历一个集合或序列的过程。在迭代过程中修改self可能导致意想不到的结果和错误。

首先,迭代通常是基于一个可迭代对象进行的,而不是单个对象。可迭代对象是指实现了迭代器协议的对象,它可以返回一个迭代器用于遍历元素。对self进行迭代可能会导致无法正确遍历整个集合或序列。

其次,修改self可能会破坏代码的可读性和可维护性。在迭代过程中修改self可能会导致代码难以理解和调试。此外,如果多个线程同时对self进行迭代和修改,可能会引发并发访问的问题,导致数据不一致或竞态条件。

为了避免对self进行迭代的问题,可以考虑以下几种替代方案:

  1. 使用其他变量进行迭代:可以使用一个临时变量来保存需要迭代的对象,然后对该变量进行迭代操作,而不是直接修改self。
  2. 使用生成器函数:可以定义一个生成器函数,通过yield语句逐个返回需要迭代的元素。生成器函数可以保持迭代状态,并且不需要修改self。
  3. 使用内置的迭代函数和方法:Python提供了一些内置的迭代函数和方法,如map()filter()reduce()等,可以使用它们来对集合或序列进行迭代操作,而不需要修改self。

总之,对self进行迭代是一种糟糕的做法,可能导致意想不到的结果和错误。在编程中,应该避免对self进行迭代,而是采用其他替代方案来实现需要的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Self-Training:用半监督方式任何有监督分类算法进行训练

如果你经常使用有监督机器学习算法,你肯定会很高兴听到:可以通过一种称为Self-Training技术快速调整模型训练方法并享受到半监督方法好处。...Self-Training属于机器学习算法半监督分支,因为它使用标记和未标记数据组合来训练模型。 Self-Training是如何进行?...然后我们再次进行预测,并将新观察结果添加到伪标记池中。 我们迭代这些步骤,当没有其他未标记观测满足伪标记标准,或者达到指定最大迭代次数时,迭代结束。...现在让我们通过一个 Python 示例现实数据使用Self-Training技术进行训练 我们将使用以下数据和库: 来自 Kaggle 营销活动数据 Scikit-learn 库:train_test_split...总结 Self-Training可以用半监督方式任何监督分类算法进行训练。如果有大量未标记数据,建议在进行昂贵数据标记练习之前先尝试以下半监督学习。 作者:Saul Dobilas

2.4K10

自己上网搜索记录进行爬虫是怎样一种体验

原作者 Walker Harrison 编译 CDA 编译团队 本文为  CDA 数据分析师原创翻译作品,转载需授权 前言 国外习惯用 Google 进行搜索,可以毫不夸张说 Google 已经彻底地融入了日常生活...如果你已注册了 Google 帐户(通常是 Gmail ),根据你隐私项设置, Google 能够记录并提供你搜索历史。...下面我将告诉大家如何获取和分析你 Google 搜索记录,以及进行数据可视化。 ? 1....分析数据 我们可以看到截止到 2014 年秋季 886 天内,我总共进行了近 64,000 次 Google 搜索,每天超过 70 次。...当然,时间段搜索词有很大影响。人们不会因为相同原因每天都搜索同一件事,同时也不会每天想同样事。因此,分析随着时间推移一些特定变化很有意义。

1.3K100
  • 一种通过FPGAAD9558时钟管理芯片进行配置方法

    原本一个很普通时钟管理芯片,通过自带软件用串口很容易就能够进行配置,但尝试着写FPGA代码进行配置却遇到了各种困难,等最终问题解决后才发现,是忽略了一个很小细节。...万用表测试结果为3.3V左右,通过fpga捕获到sclk波形如上图,我们可以看到usb板卡输出信号类似于一种门控时钟,在片选信号拉底时时钟也停止。...接下来操作就有点“玄学”了,使用usb板卡进行配置就能成功,但是fpga输入同样东西结果却是错,我怀疑usb板卡在配置完成后会给出一个“结束信号”,用此信号标志配置完成,然后芯片收到“结束信号”后才进行时钟输出...为了找出板卡到底怎么通过fpga配置后AD9558芯片起作用,我将板卡杜邦线一根根与芯片进行连接,最后发现sync连接到芯片上时,芯片就有时钟输出了!...:没有进行复位!

    82010

    神经网络似乎遵循一种令人费解简单策略来图像进行分类

    CNN非常擅长乱序图像进行分类,但人类并非如此。 在这篇文章中,我将展示为什么最先进深度神经网络仍能很好地识别乱码图像,以及这有助于揭示DNN似乎用来自然图像进行分类令人费解简单策略。...第三,他们解释了现代CNN中观察到一些现象,例如他们纹理偏见(参见我们在ICLR 2019另一篇论文和我们相应博客文章)以及他们忽略了对象部分空间排序。...好ol'特色包模型 在过去,在深度学习之前,自然图像中对象识别过去相当简单:定义一组关键视觉特征(“单词”),识别每个视觉特征在图像中存在频率(“包”)和然后根据这些数字图像进行分类。...超越功能包分类 将CNN决策视为一种特色包策略可以解释有关CNN几个奇怪观察。首先,它将解释为什么CNN具有如此强烈纹理偏差。其次,它可以解释为什么CNN 图像部分混乱如此不敏感。...我们工作核心是CNN利用自然图像中存在许多弱统计规律进行分类,并且不会像人类一样跳向图像部分对象级整合。其他任务和感官方式也是如此。

    42240

    Neuro-Oncology:脑胶质瘤IDH突变状态进行分类一种新型基于MRI全自动深度学习算法

    目前,确定IDH突变型胶质瘤唯一方法是通过活检或手术切除获得组织标本进行免疫组织化学(IHC)或基因测序。...,但是在推理阶段会保留所有网络参数,这样相当于隐式地网络进行了集成,提高了网络泛化性能; (d)MaxPooling是一种下采样技术,在一定窗口大小下特征图取其最大值实现下采样; (e)Dense...,用于恢复图像尺寸,同时高级语义特征进行解码; (h)Skip Connection用于连接编码器和解码器处多尺度特征。...使用Keras和Tensorflow实现网络,使用Adam优化器模型参数进行优化。初始学习速率设置为10−5,批处理大小为4,最大迭代次数为100次。...在ROC分析中,IDH突变型体素百分比进行排序,并作为单独阈值(切割点)来确定在每个新切割点中整个测试集被试IDH突变状态。

    1.2K51

    Python 开发者不得不知魔术方法(Magic Method)

    需要提醒是,最好不要尝试去实现__getattribute__,因为很少见到这种做法,而且很容易出bug。 在进行属性访问控制定义时候很可能会很容易引起“无限递归”。...迭代器必须遵循迭代器协议,需要有 __iter__(返回它本身) 和 next。 __len__(self) 返回容器长度。对于可变和不可变容器协议,这都是其中一部分。...这个魔术方法是: __instancecheck__(self, instance) 检查一个实例是不是你定义实例 __subclasscheck__(self, subclass) 检查一个类是不是你定义子类...__call__ 在那些类实例经常改变状态时候会非常有效。调用这个实例是一种改变这个对象状态直接和优雅做法。...当你想要进行一个单独属性进行深拷贝时,调用copy.deepcopy(),并以memodict为第一个参数。 附录 用于比较魔术方法 ? 数值计算魔术方法 单目运算符和函数 ?

    95670

    Python魔术方法-Magic Method

    需要提醒是,最好不要尝试去实现__getattribute__,因为很少见到这种做法,而且很容易出bug。 在进行属性访问控制定义时候很可能会很容易引起“无限递归”。...迭代器必须遵循迭代器协议,需要有 __iter__(返回它本身) 和 next。 __len__(self): 返回容器长度。对于可变和不可变容器协议,这都是其中一部分。...这个魔术方法是: __instancecheck__(self, instance): 检查一个实例是不是你定义实例 __subclasscheck__(self, subclass):   检查一个类是不是你定义子类...__call__ 在那些类实例经常改变状态时候会非常有效。调用这个实例是一种改变这个对象状态直接和优雅做法。...当你想要进行一个单独属性进行深拷贝时,调用copy.deepcopy(),并以memodict为第一个参数。

    85560

    【C++】STL——反向迭代模拟实现:迭代器适配器

    ,这样写的话代码是不是比较冗余啊: 除了圈出来部分这两类是不是没什么差别啊。 那想要进步的话,看优秀代码是一种很好方法,那我们接下来就来看一下真正大佬写代码是怎么样。 3....库里面反向迭代实现——迭代器适配器 ,我们来看一下库里面list迭代器是如何实现 我们看到,这里反向迭代器包括const版本,它们都是reverse_iterator这个类模板一个typedef...即reverse_iterator 是普通正向迭代进行了一个适配,进行了一个封装。 但是库里面实现是比较复杂,涉及一个迭代器萃取东西,这个我们可以不用管。 我们后面实现会简化一点。...,当然也是可以。 回想我们之前学容器适配器,它们对应底层容器仅限一种吗? 不是的,是不是只要支持指定那些操作就可以作为其底层适配容器啊。...那我们这里迭代器适配器Reverse_Iterator是不是只要对应容器迭代器支持++和–操作就可以进行适配啊。

    17410

    LeCun又双叒唱衰自回归LLM:GPT-4推理能力非常有限,有两篇论文为证

    「LLM 世界理解非常肤浅。」 让 LeCun 近日再次发出疾呼,是两篇新发布论文: 「LLM 真的能像文献中所说那样自我批判(并迭代改进)其解决方案吗?...自我批判需要验证,而验证是推理一种形式(因此所有关于 LLM 自我批判能力说法都感到惊讶)。...之后,研究者普遍认为 LLM 具有自我批判( self-critique )能力,并以迭代方式改进 LLM 解决方案,这一观点被广泛传播。 然而事实真的是这样吗?...虽然最近研究 LLM 自我批判潜力持乐观态度,尤其是在迭代环境中,但这项研究却提出了不同观点。...该研究在 Blocksworld 上几种规划生成方法进行了实验和比较。具体来说,该研究生成了 100 个随机实例,用于各种方法进行评估。

    23320

    想读懂YOLOV4,你需要先了解下列技术(一)

    其也可以被视为add noise一种,并且与随机裁剪、随机水平翻转具有一定互补性,综合应用他们,可以取得更好模型表现,尤其是噪声和遮挡具有更好鲁棒性。...本文要解决问题是使用分类做法来做分割任务(弱监督分割),思想比较有趣。如下所示: ? 通过迭代训练方式不断挖掘不同可判别区域,最终组合得到完整分割结果。...第t次训练迭代(一次迭代就是指一次完整训练过程),对于每张图片都可以得到cam图(类别激活图),将cam图二值化然后盖在原图上,进行下一次迭代训练,每次迭代都是学习一个不同可判别区域,迭代结束条件就是分类性能不行了...但是其也提供了一种思路:是否可以采用分类预测出来cam,结合弱监督做法,把cam输出也引入某种监督,在提升分类性能同时,提升可判别学习能力。...所以本文其实是提出了一种数据增强策略。是不是很有意思结论?

    88150

    FPN(特征图金字塔网络)理论基础与具体实现

    我们希望我们网络能够适应更多尺寸图片,我们传统做法使用图像金字塔,但是这种做法从侧面提升了计算复杂度,我们希望可以改善这个问题,所以本文就提出了一种在特征图金字塔方法,我们称这种网络结构叫做FPN...接着为了改善上面的做法,一个很简洁改进就是不同尺度特征图都进行利用,这也是SSD算法中使用方法(图c)。理想情况下,SSD风格金字塔将重复使用正向传递中计算不同层次多尺度特征图。...但为了避免使用低层次特征,SSD会从偏后conv4_3开始构建特征金字塔,这种做法没有conv4_3之前进行利用,而这些层对于检测小目标很重要。...本文提出一种做法(图d),通过高层特征进行上采样和低层特征进行自顶向下连接,而且每一层都会进行预测。 0x02 网络结构 作者这里做了一个有意思比较。...如果我们不是不同尺寸特征图进行预测,而是将不同尺寸特征图融合后进行预测,会怎么样呢? 作者通过实验发现后者做法(也就是本文做法)结果上会好很多。

    1K10

    到底什么是敏捷

    其实在那时,我们现在称之为敏捷做法就已初见端倪,并且与之对应还有一个在后来同样获得巨大成功方法 -- 科学管理。...那么软件项目到底属于哪一种呢?不管属于哪一种,在那时的人们由于种种原因选择了后者,而其中关键因素来自于1970年,温斯顿·罗伊斯一篇论文。...在这篇论文中作者阐述了他管理大型软件项目的想法,并在论文比较靠前位置贴了一张类似于瀑布流软件开发管理方式: [瀑布流开发方式] 虽然在他论文中并不提倡这样方案且进行了一系列批评,但是由于这几张图在论文中过于显眼...比如下面这张图可以叫做速率图,它很好地体现了一个团队开发速率,其中速率单位是”故事点数“ [velocity] 从图中可以看出这个团队一个迭代大约可以完成35个故事点,那么是不是意味着不出意外的话这个团队...这不是敏捷能解决,说不定拳头能 =.= 优先级排序 在每次迭代开始前请先进行优先级排序,先完成那些优先级高功能,再完成那些不那么重要功能。

    82820

    使用强化学习训练机械臂完成人类任务

    我们必须克服主要挑战是设计适应性强控制算法,以便于更好更快地适应新环境。 我们而言幸运是,我们可以使用人工智能中被称为强化学习领域来攻克这些挑战。...Q-Leaning Q-learning是一种无模型强化学习算法,这意味着它不需要环境模型。它特别有效,因为它可以处理伴随有随机转换和奖励问题,而无需进行调整。...在强化学习中,随着机器探索更多它会搜索得更好,但这很糟糕,因为输入空间和动作不断变化,这也是我们更新Q目标值方式。 ?...离线与在线 强化学习算法是离线,这只是意味着它们有一个来自于正在改进单独行为策略(用于模拟轨迹)。Q-learning是一种离线算法,因为它更新Q值而不必所遵循实际策略做出任何假设。...HER算法做了人类直觉做法:即使我们没有达到特定目标,我们假装已经达到了冰球目标。通过这样做,强化学习算法获得一些学习信号,因为他已经实现了某些目标。

    97120

    【Python 第75课】可迭代对象和迭代

    比如我们经常用到 list、dict、str 等类型,都是可迭代,所以也就可以通过 for 循环进行遍历,或者更准确说:被迭代。...比如要输出一个斐波那契数列(每一位数值都是前两位数值之和,原题回复关键字 906),通常做法是循环,“高级”一点做法是递归。...return self.a # 创建迭代器 fib = Fibonacci() # 进行迭代 for f in fib: print(f, end=' ') 输出: 1 1 2...3 5 8 13 21 34 55 89 这个例子中,我们并没有保存一个序列,只是定义了一种规则,就也可以被迭代。...使用迭代好处在于:它是一种延迟操作,即当需要用到时候才去产生结果。比如对于一个序列来说,如果我们要遍历它,并不需要再一开始就把所有元素都生成好,而是只需要知道每个元素下一个元素是什么就可以了。

    67520

    因为一件小事被公司开除了

    也不知道是小伙产生了抗拒心理,还是本性就大大咧咧,他总是命名规范不太关注,经常在代码中使用不同命名风格,而且还做不到见名知意。...我不公开评价开除员工做法对不对,免得被人吐槽屁股坐歪,这篇文章,我只想简单讨论一下代码命名重要性。...首先,我们必须承认是,良好命名是优秀代码标志之一,它让代码更容易阅读和理解,方便以后迭代和升级。...不同个人、公司、团队、项目可能会采用不同命名规范,它们之间没有明确好坏之分,只是一种约定成俗习惯而已。...当你名字不符合以上规则时,那么它很有可能就是一个糟糕名字。

    19610

    四个方法,拯救你平淡数据分析报告

    比如运气/行业红利/特殊资源(确保标杆可复制性) 总结标杆特征,导出分析建议(学习1、2、3、4做法,即可成功) 进行测试,检验标杆效果(最后行不行,还得试一试) 比如,做销售分析,在推导分析结论时候...想做好第四步分析,需要对业务流程做详细拆解,并具体做法打标签,才能做深入分析(如下图)。 注意:第五步给建议时候,也可能不是哪里弱补哪里,而是“以强补弱”(如下图)。...这样基于业务现状+历史数据,建议进行简单可行性评估后再给出,会让建议更有说服力。 业务诊断法缺点是很明显:第四步容易被卡住,成为业务方互怼导火索。...更糟糕是,在没测试前,到底是不是机会,是无从定论。于是,业务方会简单按照:是否这个机会与老板观点一致,进行判断。总之,老板说这个好,这个就好。...因此在设计实验时候,一定要对测试流程做好拆解,在可能影响实验节点上,打好业务标签,这样才能在事后分析时候有据可循,做迭代时候也有方向。

    40320

    Swift 对称二叉树 - LeetCode

    \ 3 3 说明: 如果你可以运用递归和迭代两种方法解决这个问题,会很加分。...= val * self.left = nil * self.right = nil * } * } */ class Solution {...因为我们遍历整个输入树一次,所以总运行时间为 O(n),其中 n 是树中结点总数。 空间复杂度:递归调用次数受树高度限制。在最糟糕情况下,树是线性,其高度为 O(n)。...因此,在最糟糕情况下,由栈上递归调用造成空间复杂度为 O(n)。 方案二:迭代 除了递归方法外,我们也可以利用队列进行迭代。队列中每两个连续结点应该是相等,而且它们子树互为镜像。...因为我们遍历整个输入树一次,所以总运行时间为 O(n),其中 n 是树中结点总数。 空间复杂度:搜索队列需要额外空间。在最糟糕情况下,我们不得不向队列中插入 O(n) 个结点。

    58920
    领券