如何在Python 2和Python 3中编写兼容的八进制值
Python 2/3 兼容的八进制值写法
如果你想要既保持可读性,又兼容两个版本的写法,最直观的方案是基于Python版本做条件判断,直接使用对应版本的原生八进制字面量:
import sys # 兼容Python 2和3的八进制0644(即十进制420) file_mode = 0o644 if sys.version_info >= (3, 0) else 0644
这种写法的好处是完全贴近两个版本的原生语法,一眼就能看出来是八进制值644,可读性拉满——毕竟你写的就是大家熟悉的八进制表示,只是根据版本做了适配。
如果你不想导入sys模块,也可以用字符串解析的方式,虽然你觉得可读性差,但其实这个写法也能明确表达意图:
file_mode = int('644', 8)
这里第二个参数8明确指定了解析的基数是八进制,只要稍微熟悉Python的人都能看懂这是在表示八进制的644,而且代码更简洁,不需要版本判断。
至于转换成十进制(直接写420)的方式,确实不推荐,因为没人能直接把420和八进制0644关联起来,完全丢失了原始意图的可读性。
因为你提到代码只会被调用一次,所以不管哪种方案的性能差异都可以忽略,重点就是选可读性最高的那个——我个人更推荐第一种条件判断的写法,最符合直觉。
内容的提问来源于stack exchange,提问作者lzap
相关产品推荐
相关产品推荐

