Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyLint W0143警告:与可调用_Python_Pylint - Fatal编程技术网

Python PyLint W0143警告:与可调用

Python PyLint W0143警告:与可调用,python,pylint,Python,Pylint,我试图使用默认设置测试pylint,但(请参见下面的python代码)得到一个警告: >pylint pylint_test_01.py >pylint_test_01.py:24:7: W0143: Comparing against a callable, did you omit the parenthesis? (comparison-with-callable) 如何在不破坏此算法和不禁用pylint检查(即使用默认设置)的情况下消除此pylint警告? 应该保留从列表中

我试图使用默认设置测试pylint,但(请参见下面的python代码)得到一个警告:

>pylint pylint_test_01.py
>pylint_test_01.py:24:7: W0143: Comparing against a callable, did you omit the parenthesis? (comparison-with-callable)
如何在不破坏此算法和不禁用pylint检查(即使用默认设置)的情况下消除此pylint警告? 应该保留从列表中枚举函数的一般原则

'''Test pylint with default settings warnings'''
from random import randint
def sortaray_builtin(arr):
    '''This is built in Python sort function'''
    return sorted(arr.copy())
def sortaray_bubble(arr):
    '''Bubble sorting algorithm -- is a simplest of sorting algorithms. Perfomance: O(N**2)'''
    brr = arr.copy()
    for i, _ in enumerate(brr[:-1]):
        for j in range(i, len(brr)):
            if brr[i] > brr[j]:
                brr[i], brr[j] = brr[j], brr[i]
    return brr

SFUNCTIONS = [
    sortaray_builtin,
    sortaray_bubble
]

ARSIZE = 20
ARRY = [randint(0, ARSIZE) for i in range(ARSIZE)]

for SrtFunc in SFUNCTIONS:
    # Line below cause an W0143: Comparing against a callable, did you omit the parenthesis? (comparison-with-callable)
    if SrtFunc == sortaray_builtin:
        print("Builtin: ", end='', flush=True)
    else:
        print("Bubble : ", end='', flush=True)
    print(SrtFunc(ARRY))

选项1

您可以禁用某些位置的检查

if SrtFunc == sortaray_builtin:  # pylint: disable=W0143
更多信息

选项2

您可以使用
属性获取函数名

SrtFunc.__name__ == builtin_sort.__name__
选项3

与第二种方法相同,但使用
\uuuu doc\uuu

SrtFunc.__doc__ == builtin_sort.__doc__
选项4

您可以将函数包装在对象中,例如在dict中,或者创建一个特殊类

class Sorter():
    def __init__(self, func):
        self.sort = func
builtin = Sorter(sortaray_builtin)
bubble = Sorter(sortaray_bubble)
SFUNCTIONS = [ builtin, bubble ]
builtin.sort()

您可以使用
is
进行函数比较:

如果SrtFunc是sortaray\u内置的:
当您使用
=
比较两个功能时,发动机罩下也会发生这种情况,因为无法确定两个功能是否等效


另请参阅,了解有关函数比较工作方式的更多详细信息。

我知道如何禁用检查。但意义在于使用默认设置通过pylint检查。@An0我添加了其他方法。我不比较两个函数的等效性,我想检查列表中的某个函数是否与我在比较中描述的完全相同。例如,在链接中有两个函数定义,它们看起来是相同的,但不是。此外,在Python 3x版本中使用了8年之后,这项功能就无法正常工作了。例如:fun1=lambda:x;fun2=λ:x;fun1==fun2==>False@An0ther0ne我知道你不是,我只是说不可能检查函数是否等价。在您给出的这个示例中,您仍然在定义两个不同的lambda函数,尽管它们具有相同的函数体。使用
=
来比较函数与使用
is
来检查值是否为同一对象完全相同,这就是为什么这里会出现
False
。使用
is
关键字的具体细节在@An0ther0ne进行了描述。我理解
is
的作用,并且我知道它与
=
不同。我想说的是,在比较函数的情况下,
==
的工作原理与
is
的工作原理相同。这是因为无法确定函数的等价性,因此没有为函数定义
\uuuuueq\uuuu
,因此
==
返回到身份比较,这就是
所做的。看见