什么是替代内置的 round() 函数?

4
Pylint在抱怨引用了内置round函数,但替代方案是什么?
迄今为止,我看到的答案只是让Pylint静默处理内置函数。或许还有其他方法来调用round(),比如使用标准的导入库?使用内置函数是否存在潜在问题?
我的搜索只找到了关于如何使用内置函数的教程。
任何与round()相关的用法都会触发警告:
n = 0.05
n = round(n)

这个警告只在VS Code中显示,它的内容是:

{
    "resource": "/C:/Users/neil.obremski/project/file.py",
    "owner": "python",
    "code": "round-builtin",
    "severity": 4,
    "message": "round built-in referenced",
    "source": "pylint",
    "startLineNumber": 434,
    "startColumn": 9,
    "endLineNumber": 434,
    "endColumn": 9
}

更新: 当在 Pylint 参数中设置 --enable=W 时,此问题会出现。对于任何使用 round() 函数的情况都会出现,包括指定第二个参数。

下面是在启用了 --enable=W 模式下运行 pylint file.py 的输出结果:

file.py:435:18: W1633: round built-in referenced (round-builtin)

在我看来这里没有问题。只需忽略代码检查工具。 - juanpa.arrivillaga
你能分享相关的代码片段吗? - azro
3
您可能已经意识到这一点,但是:根据http://pylint.pycqa.org/en/latest/technical_reference/features.html#pylint-global-options-and-switches,“round()”在Python 3中具有“不兼容的语义”。版本之间不同行为的一个例子是:在3.X中,round(1)返回一个整数,而在2.7中返回一个浮点数。我不知道这是唯一的区别,但如果您计划编写与版本互操作的替代方案,则一定要考虑这一点。 - Kevin
@h_r_b_y - 是的,任何使用该函数的结果都会出现警告。 - Neil C. Obremski
如果您不关心调用内置函数,只需在pylint中禁用警告即可——不确定为什么它首先启用了... - martineau
显示剩余2条评论
3个回答

6
如果您只使用python3.x,则可以忽略此警告(默认情况下禁用,您传递给pylint的某些选项会启用它)。
这个警告旨在成为--py3k检查套件的一部分,该套件查找python2/python3兼容性问题(如果您仅使用python3,则此检查套件可能对您编写的代码产生积极的不良影响)。
标记所有round用法的原因是python 3中舍入算法和返回类型都发生了更改。在python3中,现在使用"银行家舍入"进行四舍五入(Python 3.0中的新功能 #内置函数)。

4

如果你需要的代码同时兼容Python 2和3,并且不能更改lint设置,请使用以下导入语句:

from builtins import round

2
鉴于Kevin的评论和Python2几乎过时,最好忽略此警告。
代码检查工具甚至PEP8可以提供样式建议。这些建议通常非常有用。但有时候我们会有充分的理由忽略这些建议。
我建议您在所有项目中使用您喜欢的代码检查工具。然后列出所有错误和警告(在您的意见中)是误报、太过严谨或其他不必要的建议。在代码检查工具的配置文件中全局禁用这些警告。
如果您不想全局禁用一个错误或警告,一些代码检查工具接受# noqa注释作为不检查某个特定行的通知。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接