Pylint가 내장 함수를 좋아하지 않는 이유는 무엇입니까?
다음과 같은 줄이 있습니다.
filter(lambda x: x == 1, [1, 1, 2])
Pylint가 경고를 표시합니다.
W: 3: Used builtin function 'filter'
왜 그런 겁니까? 목록 이해가 권장되는 방법입니까?
물론 다음과 같이 다시 작성할 수 있습니다.
[x for x in [1, 1, 2] if x == 1]
그리고 나는 경고를받지 않지만 이것에 대한 PEP가 있는지 궁금합니다.
Pylint는해서는 안되는 일에 대해 종종 수다를 떨칩니다. .pylintrc 파일에서 경고를 비활성화 할 수 있습니다.
이 페이지 http://pylint-messages.wikidot.com/messages:w0141 은 필터와 맵이 목록 이해로 대체되었다는 문제를 나타냅니다.
pylintrc 파일에 다음과 같은 줄이 있으면 경고가 사라집니다.
disable=W0141
왜 그런 겁니까? 목록 이해가 권장되는 방법입니까?
목록 이해가 추천 튜토리얼 예를 들어 어떤 상태,
더 간결하고 읽기 쉽습니다.
그리고 SO의 Python List Comprehension Vs 에 대한 대부분의 답변자에 의해. 지도 곳 이있다
- 매번
filter
정의하는 것보다 목록 이해력을 사용하는 것이 더 효율적입니다.lambda
- 아마도 더 판독 (및 유사한 효율)를 사용하는
filter
함수를 미리 정의되어 있으면 - 사용이 필요
filter
하고map
당신이 경우- 지도
map
, - 카레
map
또는 - 함수형 프로그래밍 사용
- 지도
요약 : 대부분의 경우 목록 이해력 사용
나는 같은 문제에 부딪 쳤고 알아낼 수 없었다.
내장 함수 ʻinput '이 왜 나쁜지. 나는 당신이 의도
비활성화하려면 :
pylint --bad-functions = "[맵, 필터, 적용]"YOUR_FILE_TO_CHECK_HERE
설정이 마음에 들면 :
pylint --bad-functions="[map,filter,apply]" --some-other-supercool-settings-of-yours
--generate-rcfile > test.rc
설정이 파일에 있는지 확인하십시오. 예 :
cat test.rc | grep -i YOUR_SETTING_HERE
그 후에이 파일을 로컬에서 사용할 수 있습니다.
pylint --rcfile test.rc --your-other-command-line-args ...
또는 기본 rcfile로 사용하십시오. 이를 위해 나는 친절하게 당신을 추천합니다
pylint --long-help
내 프로젝트에 대해 동일한 경고가 있습니다. 소스 코드를 py2 / 3과 호환되도록 변경하고 있으며 pylint는 많은 도움이됩니다.
실행 pylint --py3k
은 호환성에 대한 오류 만 표시합니다.
파이썬 2에서를 사용 filter
하면 다음을 반환합니다 list
.
>>> my_list = filter(lambda x: x == 1, [1, 1, 2])
>>> my_list
[1, 1]
>>> type(my_list)
<type 'list'>
그러나 파이썬 3에서 filter
와 다른 유사한 방법 ( map
, range
, zip
, ..) 호환되지 않는 유형의 아마 코드에서 버그가 원인입니다 반복자를 반환합니다.
>>> my_list = filter(lambda x: x == 1, [1, 1, 2])
>>> my_list
<filter object at 0x10853ac50>
>>> type(my_list)
<class 'filter'>
코드 python 2/3과 호환되도록 만들기 위해 python future site 의 치트 시트를 사용합니다.
이 경고를 피하려면 Python 2 및 3에서 작동하는 4 가지 접근 방식을 사용할 수 있습니다.
1-당신이 말한 것처럼 목록 이해력 사용.
2 - Using a list
function, grant that return always is a materialized list, result is same on both python versions
>>> list(filter(lambda x: x == 1, [1, 1, 2]))
[1, 1]
3 - Using lfilter
, that's a future package import. It always return a list, uses filter on py2, and list(filter(..)
on py3. So, both pythons got the same behaviour and you got a cleaner syntax.
>>> from future.utils import lfilter
>>> lfilter(lambda x: x == 1, [1, 1, 2])
[1, 1]
4 - The best! Use filter
always on a loop, this way pylint don't give warnings, and it have a nice performance boost on python 3.
>>> for number in filter(lambda x: x == 1, [1, 1, 2]):
>>> print(number)
>>> 1
>>> 1
Always prefer functions that works on python 3, because python 2 will be retired soon.
참고URL : https://stackoverflow.com/questions/3569134/why-doesnt-pylint-like-built-in-functions
'Program Tip' 카테고리의 다른 글
웹팩을 사용하여 디렉토리에서 동적으로 이미지 가져 오기 (0) | 2020.10.24 |
---|---|
대규모 레거시 (C / C ++) 코드베이스에 단위 테스트를 어떻게 도입합니까? (0) | 2020.10.24 |
junit 테스트 클래스에서 Spring 애플리케이션 컨텍스트 재사용 (0) | 2020.10.24 |
C ++ : 네임 스페이스 — 헤더 및 소스 파일에서 올바르게 사용하는 방법은 무엇입니까? (0) | 2020.10.24 |
CSS 세로 정렬이 float에서 작동하지 않음 (0) | 2020.10.24 |