Pylint로 Python 코드 품질 향상

소개



이 기사에서는 Pylint와 Python 코드가 PEP8 지침을 준수하는지 확인하는 데 어떻게 사용되는지 살펴보겠습니다.

PEP8이란 무엇입니까?



PEP8은 파이썬 코드를 작성하는 방법에 대한 지침과 모범 사례를 제공하여 코드를 읽기 쉽고 일관성 있게 만드는 문서입니다.

콘텐츠


  • 필린트란?
  • Pylint 설치
  • 간단한 퀴즈 앱 만들기
  • Quiz 앱에서 Pylint 실행
  • 권장 사항을 변경하십시오.
  • 결론

  • 필린트란?



    Pylint는 오류를 확인하고 코딩 표준을 적용하려고 시도하는 Python 도구입니다.

    파이린트 설치



    터미널 pip install pylint 또는 pip3 install pylint 을 통해 Pylint를 설치합니다.

    간단한 퀴즈 앱 만들기



    유명한 쇼 "The Big Bang Theory"의 다섯 가지 퀴즈를 포함하는 간단한 Python 퀴즈 앱을 빌드한 다음 Pylint를 실행하고 권장 사항을 변경합니다.

    절차:


  • 프로젝트의 디렉토리를 만듭니다. 나는 내 이름을 퀴즈_앱이라고 지었다.
    터미널
  • 에서 mkdir quiz_app을 실행합니다.
  • 퀴즈_앱 디렉토리로 변경하십시오.
    실행 cd quiz_app
  • 이 시점에서 파일을 생성할 수 있습니다.
    실행 touch app.py
  • 열기 대 코드Code .
  • 생성된 파일을 열고 아래 코드를 입력합니다. 또는 이 repository 에서 직접 코드를 복사할 수 있습니다.

  • import random
    from string import ascii_lowercase
    NUM_QUESTIONS_PER_QUIZ = 5
    QUESTIONS = {
        "How old was Sheldon when he got his first P.h.d?": [
            "16",
            "18",
            "20",
            "22",
        ],
        "What’s Amy’s job": [
            "Neurobiologist",
            "Marine biologist",
            "Forensic biologist",
            "Microbiologist",
        ],
        "Which couple gets married first?": [
            "Bernadette and Howard",
            "Penny and Leonard",
            "Amy and Sheldon",
            "Emily and raj",
        ],
        "What is Leonard primary health concern?": [
            "He is lactose intolerant",
            "He is allergic to peanuts",
            "He has to eat gluten free",
            "He has diabetes",
        ],
        "Who does Howard meet while serving Thanksgiving dinner at a shelter?": [
            "Elon Musk",
            "Jeff Bezos",
            "Bill Gates",
            "Steve Jobs",
        ]
    }
    
    num_questions = min(NUM_QUESTIONS_PER_QUIZ, len(QUESTIONS))
    questions = random.sample(list(QUESTIONS.items()), k=num_questions)
    
    num_correct = 0
    for num, (question, alternatives) in enumerate(questions, start=1):
        print(f"\nQuestion {num}:")
        print(f"{question}?")
        correct_answer = alternatives[0]
        labeled_alternatives = dict(
            zip(ascii_lowercase, random.sample(alternatives, k=len(alternatives)))
        )
        for label, alternative in labeled_alternatives.items():
            print(f"  {label}) {alternative}")
    
        while (answer_label := input("\nChoice? ")) not in labeled_alternatives:
            print(f"Please answer one of {', '.join(labeled_alternatives)}")
    
        answer = labeled_alternatives[answer_label]
        if answer == correct_answer:
            num_correct += 1
            print("⭐ Correct! ⭐")
        else:
            print(f"The answer is {correct_answer!r}, not {answer!r}")
    
    print(f"\nYou got {num_correct} correct out of {num} questions")
    


    우리의 Quiz_app에서 Pylit을 실행하세요



    이제 위의 코드에서 pylint를 실행합니다. Vs Code를 사용하는 경우 bash를 시작하고 pylint app.py을 실행합니다. pylint 다음에 파이썬 파일을 지정해야 합니다.
    또는 pylint app.py 을 실행하여 squeeze_app 디렉토리로 변경하여 터미널에서 pylint를 실행할 수 있습니다.
    pylint를 실행한 후 명령 창에 Pylint 결과가 표시됩니다. 결과는 아래와 같습니다.

    ************* Module app
    app.py:62:0: C0304: Final newline missing (missing-final-newline)
    app.py:1:0: C0114: Missing module docstring (missing-module-docstring)
    app.py:41:0: C0103: Constant name "num_correct" doesn't conform to UPPER_CASE naming style (invalid-name)
    app.py:62:48: W0631: Using possibly undefined loop variable 'num' (undefined-loop-variable)
    
    ------------------------------------------------------------------
    Your code has been rated at 8.18/10  
    


    app.py:62:0은 영향을 받는 줄을 나타내고 C0304:는 메시지 코드입니다. 이 경우 첫 번째 줄은 62줄 0열의 코딩 표준 위반을 나타냅니다.
    위에 표시된 것과 별도로 얻을 수 있는 다른 메시지 코드가 있습니다. 다음은 접두사 목록과 그 의미입니다.
  • [R] "모범 사례"메트릭 위반에 대한 리팩터링
  • [C] 코딩기준위반협약
  • [W] 문체 문제 또는 사소한 프로그래밍 문제에 대한 경고
  • [E] 중요한 프로그래밍 문제에 대한 오류(예: 버그일 가능성이 가장 높음)
  • [F] 추가 처리를 방해하는 오류로 인해 치명적임

  • 표시된 결과 끝에 Pylit이 수행하는 등급이 있습니다. 이 등급은 코드가 PEP 8을 얼마나 준수하는지 보여줍니다. 이 코드는 10점 만점에 8.18점을 받았습니다. 10점 만점에 10점이 되도록 노력하세요.

    권장 변경 수행



    새 파일을 만들고 이름을 app_modified.py 으로 지정합니다. app.py에서 코드를 복사하여 권장 사항을 변경하는 데 사용할 수 있습니다.C0103: Constant name "num_correct" doesn't conform to UPPER_CASE naming style (invalid-name)으로 시작 보시다시피 pylint는 num_correct을 대문자로 변경해야 함을 알려줍니다. 세 가지 인스턴스에 사용된 num_correct을 찾아 NUM_CORRECT으로 바꿉니다.
    이 시점에서 Pylint를 실행하면 10점 만점에 8.64점을 얻습니다.C0114: Missing module docstring (missing-module-docstring)의 경우 . docstring은 코드가 수행하는 작업에 대한 간단한 설명이며 코드 측면에 대한 세부 사항을 포함할 수 있습니다. 주로 모듈, 함수, 클래스 또는 메서드 정의에서 첫 번째 문으로 발생합니다.
    프로그램 시작 부분에 """A quiz app based on the show: The Big Bang Theory"""을 추가합니다.C0304: Final newline missing (missing-final-newline) 의 경우 프로그램 끝에 빈 줄을 추가합니다.W0631: Using possibly undefined loop variable 'num' (undefined-loop-variable) 을 무시할 수 있습니다. 변경하면 프로그램 실행 방식에 영향을 미칩니다.
    이 시점에서 Pylint를 실행하면 10점 만점에 9.55점을 얻습니다.
    최종 코드는 다음과 유사합니다.

    """A quiz app based on the show: The Big Bang Theory"""
    import random
    from string import ascii_lowercase
    
    NUM_QUESTIONS_PER_QUIZ = 5
    QUESTIONS = {
        "How old was Sheldon when he got his first P.h.d?": [
            "16",
            "18",
            "20",
            "22",
        ],
        "What’s Amy’s job": [
            "Neurobiologist",
            "Marine biologist",
            "Forensic biologist",
            "Microbiologist",
        ],
        "Which couple gets married first?": [
            "Bernadette and Howard",
            "Penny and Leonard",
            "Amy and Sheldon",
            "Emily and raj",
        ],
        "What is Leonard primary health concern?": [
            "He is lactose intolerant",
            "He is allergic to peanuts",
            "He has to eat gluten free",
            "He has diabetes",
        ],
        "Who does Howard meet while serving Thanksgiving dinner at a shelter?": [
            "Elon Musk",
            "Jeff Bezos",
            "Bill Gates",
            "Steve Jobs",
        ]
    }
    
    num_questions = min(NUM_QUESTIONS_PER_QUIZ, len(QUESTIONS))
    questions = random.sample(list(QUESTIONS.items()), k=num_questions)
    
    NUM_CORRECT = 0
    for num, (question, alternatives) in enumerate(questions, start=1):
        print(f"\nQuestion {num}:")
        print(f"{question}?")
        correct_answer = alternatives[0]
        labeled_alternatives = dict(
            zip(ascii_lowercase, random.sample(alternatives, k=len(alternatives)))
        )
        for label, alternative in labeled_alternatives.items():
            print(f"  {label}) {alternative}")
    
        while (answer_label := input("\nChoice? ")) not in labeled_alternatives:
            print(f"Please answer one of {', '.join(labeled_alternatives)}")
    
        answer = labeled_alternatives[answer_label]
        if answer == correct_answer:
            NUM_CORRECT += 1
            print("⭐ Correct! ⭐")
        else:
            print(f"The answer is {correct_answer!r}, not {answer!r}")
    
    print(f"\nYou got {NUM_CORRECT} correct out of {num} questions")
    
    


    결론



    Python 코드 품질을 개선하는 데 사용되는 여러 도구가 있으며 Pylint가 그 중 하나입니다. 코드 품질 개선에 대한 자세한 내용은 here을 참조하십시오.

    좋은 웹페이지 즐겨찾기