栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何更改以列表形式馈入for循环的变量

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何更改以列表形式馈入for循环的变量

“ Python没有这种功能似乎很愚蠢,因为如果不这样做,那么如果它是要传递的列表的一部分,那么您将无法重新定义通过for循环传递的任何变量。”
-这就是大多数编程语言的工作方式。允许此功能将是不好的,因为它将创建称为副作用的东西,这会使代码变得晦涩难懂。

另外,这是一个常见的编程陷阱,因为您应该 使数据不使用变量名
:请参阅http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html(尤其是类似问题的列表;即使您不处理变量也是如此)名称,您至少要处理变量名称空间)。补救措施是在“更高一级”上工作:在这种情况下为列表或集合。这就是为什么您最初的问题不合理的原因。(某些版本的python将使您可以破解

locals()
字典,但这是不受支持的和未记录的行为,而且样式很差。)


但是,您可以强制python使用如下副作用:

scores = [99.1, 78.3, etc.]for i,score in enumerate(scores):    scores[i] = int(score)

以上将在

scores
数组中舍入分数。但是, 正确的方法 (除非您正在处理数亿个元素)是重新创建
scores
数组,如下所示:

scores = [...]roundedScores = [int(score) for score in scores]

如果您有很多事情想得分:

scores = [..., ..., ...]def processScores(scores):    '''Grades on a curve, where top score = 100%'''    theTopScore = max(scores)    def processScore(score, topScore):        return 100-topScore+score    newScores = [processScore(s,theTopScore) for s in scores]    return newScores

旁注:如果要进行浮点计算,则应

from __future__ importdivision
使用python3或将其强制转换为
float(...)
显式。


如果您确实要修改传入的内容,则可以传入可变对象。您传递的数字是不可变对象的实例,但是例如,如果您有:

class Score(object):    def __init__(self, points):        self.points = points    def __repr__(self):        return 'Score({})'.format(self.points)scores = [Score(i) for i in [99.1, 78.3, ...]]for s in scores:    s.points += 5  # adds 5 points to each score

这仍然是一种无功能的处理方式,因此容易产生副作用所引起的所有问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号