python2到3 list()的使用
我正在将python2.7脚本转换为python3。python2到3 list()的使用,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我正在将python2.7脚本转换为python3。 2to3提出以下建议: result = result.split(',') syslog_trace("Result : {0}".format(result), False, DEBUG) - data.append(map(float, result)) + data.append(list(map(float, result))) i
2to3
提出以下建议:
result = result.split(',')
syslog_trace("Result : {0}".format(result), False, DEBUG)
- data.append(map(float, result))
+ data.append(list(map(float, result)))
if (len(data) > samples):
data.pop(0)
syslog_trace("Data : {0}".format(data), False, DEBUG)
# report sample average
if (startTime % reportTime < sampleTime):
- somma = map(sum, zip(*data))
+ somma = list(map(sum, list(zip(*data))))
# not all entries should be float
# 0.37, 0.18, 0.17, 4, 143, 32147, 3, 4, 93, 0, 0
averages = [format(sm / len(data), '.3f') for sm in somma]
result=result.split(','))
syslog_跟踪(“结果:{0}”。格式(结果),False,调试)
-data.append(映射(浮点、结果))
+data.append(列表(映射(浮点、结果)))
如果(len(数据)>样本):
data.pop(0)
syslog_跟踪(“数据:{0}”。格式(数据),False,调试)
#报告样本平均数
如果(开始时间%reportTime
我相信Python3的制造商不想这样做。至少,它给我一种“你一定是在开玩笑”的感觉
有没有更像蟒蛇的方法
我相信Python3的制造商不想这样做
好吧,Python的制造商通常不喜欢看到Python 2被使用,我在最近的每一次PyCon中都看到了这种情绪
有没有更像蟒蛇的方法
这实际上取决于你对Pythonic的解释,列表comp在你的例子中似乎更直观,你想要构造一个列表
,所以不需要创建一个带有map
或zip
和的迭代器,然后将它馈送到list()
现在,我不知道为什么2to3
选择了list()
包装而不是comps;可能是最容易实际实现的
我相信Python3的制造商不想这样做
好吧,Python的制造商通常不喜欢看到Python 2被使用,我在最近的每一次PyCon中都看到了这种情绪
有没有更像蟒蛇的方法
这实际上取决于你对Pythonic的解释,列表comp在你的例子中似乎更直观,你想要构造一个列表
,所以不需要创建一个带有map
或zip
和的迭代器,然后将它馈送到list()
现在,我不知道为什么
2to3
选择了list()
包装而不是comps;可能最容易实际实现。未固定的somma有什么问题
2to3
无法知道如何使用somma
,在这种情况下,作为下一行中的生成器来计算平均值
是正常的,也是最佳的,无需将其转换为列表
这就是Python3列表到生成器更改的天才之处:大多数人已经将这些列表用作生成器,浪费宝贵的内存来具体化他们不需要的列表
# report sample average
if (startTime % reportTime < sampleTime):
somma = map(sum, zip(*data))
# not all entries should be float
# 0.37, 0.18, 0.17, 4, 143, 32147, 3, 4, 93, 0, 0
averages = [format(sm / len(data), '.3f') for sm in somma]
#报告样本平均值
如果(开始时间%reportTime
当然,第一个未转换的语句将失败,因为我们附加了一个生成器,而我们需要一个列表。在这种情况下,错误会很快得到修复
如果像这样放置:data.append(map(float,result))
,则下一个跟踪显示可疑的信息:'data:[]'
,您可以按照2to3
的建议快速切换到list
2to3
尽最大努力创建运行的Python 3代码,但它不会取代手动返工或生成最佳代码。当你很匆忙的时候,你可以应用它,但是要像OP一样检查与旧代码的区别
最新Python2版本的-3
选项在使用Python3引发错误时打印警告。这是另一种方法,当您有更多的时间执行迁移时效果会更好。未固定的somma有什么问题
2to3
无法知道如何使用somma
,在这种情况下,作为下一行中的生成器来计算平均值
是正常的,也是最佳的,无需将其转换为列表
这就是Python3列表到生成器更改的天才之处:大多数人已经将这些列表用作生成器,浪费宝贵的内存来具体化他们不需要的列表
# report sample average
if (startTime % reportTime < sampleTime):
somma = map(sum, zip(*data))
# not all entries should be float
# 0.37, 0.18, 0.17, 4, 143, 32147, 3, 4, 93, 0, 0
averages = [format(sm / len(data), '.3f') for sm in somma]
#报告样本平均值
如果(开始时间%reportTime
当然,第一个未转换的语句将失败,因为我们附加了一个生成器,而我们需要一个列表。在这种情况下,错误会很快得到修复
如果像这样放置:data.append(map(float,result))
,则下一个跟踪显示可疑的信息:'data:[]'
,您可以按照2to3
的建议快速切换到list
2to3
尽最大努力创建运行的Python 3代码,但它不会取代手动返工或生成最佳代码。当你很匆忙的时候,你可以应用它,但是要像OP一样检查与旧代码的区别
最新Python2版本的-3
选项在使用Python3引发错误时打印警告。这是另一种方法,当您有更多的时间执行迁移时效果会更好。可能是列表理解<代码>[结果中x的浮动(x)]
@zondo:谢谢。我将调查列表理解。这是否也适用于映射(sum,zip(*data))
?是的。使用[sum(d)for d in zip(*data)]
这是中提到的“快速修复”,这也建议使用列表comps代替。2to3
旨在翻译Pyth