Предупреждение PyLint W0143: сравнение с вызываемым - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь проверить 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))

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Опция 1

Вы можете отключить проверки для некоторых мест.

if SrtFunc == sortaray_builtin:  # pylint: disable=W0143

Подробнее https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Опция 2

Вы можете получить имя функции с атрибутом __name__.

SrtFunc.__name__ == builtin_sort.__name__

Опция 3

То же, что и во втором методе, но с .__doc__

SrtFunc.__doc__ == builtin_sort.__doc__

Option 4

Вы можете обернуть свои функции в объекты, например, в dict или создать особый класс.

class Sorter():
    def __init__(self, func):
        self.sort = func
builtin = Sorter(sortaray_builtin)
bubble = Sorter(sortaray_bubble)
SFUNCTIONS = [ builtin, bubble ]
builtin.sort()
0 голосов
/ 30 марта 2020

Вы можете использовать is для сравнения функций:

if SrtFunc is sortaray_builtin:

Это также то, что происходит внутри, когда вы используете == для сравнения двух функций, так как нет другого способа определить, две функции эквивалентны.

Также см. этот вопрос для более подробной информации о том, как работает сравнение функций.

...