从Python2迁移到Python3实战(一) - pyupgrade

2020-06-19 00:00:00 代码 字符串 写法 传入 用法

前言

从这篇开始我会不定期写一些在实际工作中把项目代码从Python2.7迁移到新的Python 3.7的经验。

这篇先介绍pyupgrade - 一个修改代码中Python 2语法到新版本写法的工具,同时它还可以作为pre-commit钩子,可以在代码提交或者push时拒绝引入旧的用法。

为什么需要这么一个工具呢?3个理由:

  1. 替换代码中旧版本Python的用法。例如'%s %s' % (a, b)这种百分号的字符串格式化写法
  2. 替换成Python 3的新语法。例如在Python 3中super不再需要传递self、字符串格式化在Python 3.6及以后可以直接用f-strings
  3. 迁移后不再需要支持Python2,所以应该去掉six模块的相关使用,直接用Python3的代码写才是正途。

我日常维护的项目中Python代码都在几千到上百万行级别,可以设想一下,如果人工来做代码替换将是一个极为浩大的工程。

在现有的Python世界,过去只有lib2to3模块和其衍生品(之后我会专门讲),但是效果有限,pyupgrade是一个很好的补充,我们来了解一下它都实现了那些功能

集合

set(())              # set()
set([])              # set()
set((1,))            # {1}
set((1, 2))          # {1, 2}
set([1, 2])          # {1, 2}
set(x for x in y)    # {x for x in y}
set([x for x in y])  # {x for x in y}

相关文章