gpt4 book ai didi

python - 创建具有向后兼容性的包

转载 作者:行者123 更新时间:2023-12-01 07:02:27 26 4
gpt4 key购买 nike

我尝试在 3.6 中创建 python 包,但我也想向后兼容 2.7 我如何为 3.6 编写代码和2.7

例如,我有一个名为 geo_point() 的方法。

def geo_point(lat: float, lng: float):
pass

这个函数在3.6中工作正常,但在2.7中不行,它显示语法错误,我认为2.7不支持类型提示。所以我想编写 2.7 支持的另一个函数,当用户在 2.7 上运行我的包时,它会忽略所有不支持的函数

例如

 @python_version(2.7)
def geo_point(lat, lng):
pass

是否可以让函数和 python 共同决定哪个函数兼容?

最佳答案

如果类型提示是您的代码遇到的唯一问题,那么请查看SO问题Type hinting in Python 2

它说,python3 也尊重注释行中的类型提示。Python2 将忽略它,而 python3 则尊重这种替代语法。它是专门为仍必须兼容 python2 的代码而设计的。

但是请注意,仅仅因为代码使用 python2 编译,并不意味着它会产生正确的结果。

如果您有更多兼容性问题,我强烈建议您查看 future 模块(不要与 from __future__ import xxx 语句混淆。

您可以使用 pip install future 安装 future ( https://pypi.org/project/future/ )。

由于您没有显示任何其他导致问题的代码,因此我无法就具体问题提供建议。

网址https://python-future.org/compatible_idioms.html显示了相当广泛的潜在 python 2/python 3 问题以及如何解决它们的列表。

例如,要在 python 2 中打开具有较少编码/unicode 问题的文件,可以通过使用以下行导入 open 的替代版本来完成

from io import open

https://python-future.org/compatible_idioms.html

附录:

如果您确实需要为 python3 声明一个函数,为 python2 声明一个函数,您可以这样做:

import sys

if sys.version_info < (3, 0):
def myfunc(a, b): # python 2 compatible function
bla bla bla
else:
def myfunc(a, b): # python 3 compatible function
bla bla bla

但是:对于 python 2 和 python 3,这两个函数必须在语法上正确

如果您确实想要拥有仅 python2 或仅 python3 语法正确的函数(例如 print 语句或等待),那么您可以执行以下操作:

import sys

if sys.version_info < (3, 0):
from myfunc_py2 import myfunc # the file myfunc_py2.py does not have to be python3 compatible
else:
from myfunc_py3 import myfunc # the file myfunc_py3.py does not have to be python2 compatible

关于python - 创建具有向后兼容性的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58578181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com