초보 입문 Python 프로 그래 밍 8 가지 실 용적 인 제안

머리말
우 리 는 Python 으로 기계 학습 모델 링 프로젝트 를 진행 할 때 모든 사람 이 자신의 프로젝트 파일 관리 습관 을 가지 게 됩 니 다.저도 한 가지 방법 이 있 습 니 다.제 가 밟 았 던 구덩이 에서 밟 았 던 천둥 을 정리 한 것 입 니 다.지금 은 여기 서 공유 하 겠 습 니 다.많은 파트너 들 이 Python 프로 그래 밍 입문 한 지 얼마 되 지 않 았 기 때문에 여러분 들 이 시행 착 오 를 적 게 걷 기 를 바 랍 니 다.다소 참고 할 만 한 부분 이 있다.
목록 을 먼저 내놓다
  • 프로젝트 파일 을 미리 압축 파일
  • 원본 데 이 터 를 수 동 으로 수정 하지 말고 백업
  • 경로 의 정확 한 설정
  • 코드 가 필요 한 곳 에 비고 와 설명
  • Python 순환 코드 가속 화
  • 순환 코드 진도 시각 화
  • 효율 적 인 이상 포획 도구 사용
  • 코드 의 건장 성 을 많이 고려 해 야 한다
  • 1.프로젝트 파일 은 미리 압축 파일 을 작성 한다.
    매번 새로운 작업 을 시작 할 때마다 예전 에 저 는 편리 함 을 탐 냈 습 니 다.Code,Data,문 서 는 모두 한 폴 더 에 집중 되 어 어 어 지 러 워 보 였 습 니 다.한 때 는 역 추적 과정 이 매우 고 통 스 러 웠 거나 컴퓨터 를 바 꾸 었 습 니 다.파일 이 모두 실행 되 지 못 해서 스스로 경 로 를 고 쳐 야 하기 때문에 매우 고 통 스 러 웠 습 니 다.
    자신의 탐색 을 통 해 프로젝트 를 몇 개의 하위 폴 더 로 나 눌 수 있 고 code 는 메 인 폴 더 에 넣 을 수 있 습 니 다.

    2.원본 데 이 터 를 수 동 으로 수정 하지 말고 백업 을 잘 하 십시오.
    우 리 는 소스 데 이 터 를 백업 하여 다음 에 거 슬러 올 라 갈 수 있 도록 해 야 한다.다음 작업 을 하거나 중간 절 차 를 수정 할 수 있 고 코드 등 다른 파일 에 대해 서도 백업 을 잘 해 야 한다.의외 의 분실 이 발생 하지 않도록 해 야 한다.
    여 기 는 양 허 리 눅 스에 서 온 글 로 네 개의 도 구 를 추천 했다.
  • Git 버 전 관리 시스템
  • Rsync 파일 백업
  • Dropbox 클 라 우 드 저장 소
  • 타 임 머 신 타 임 머 신
  • 더 많은 도 구 를 소개 하고 사용 하면 내 쪽 이 펼 쳐 지지 않 으 니 여러분 스스로 알 아 보 세 요.
    3.경로 의 올 바른 설정 을 잘 한다.
    많은 학생 들 이 경 로 를 쓸 때 절대적 인 경 로 를 직접 사용 하 는 것 을 좋아 합 니 다.일반적인 상황 에서 문제 가 없 지만 코드 가 다른 사람 에 게 공유 되 거나 실 행 될 때 문제 가 발생 합 니 다.많은 경우 에 직접 연결 되 지 못 합 니 다.
    여기 제안:
  • 상대 경 로 를 사용 합 니 다.스 크 립 트 는 홈 디 렉 터 리 에 있 고 다른 자원(예 를 들 어 데이터,제3자 패키지 등)은 같은 등급 이나 저급 디 렉 터 리 에 있 습 니 다.예 를 들 어./data/processed/test 1.csv
  • 전역 경로 설정 변수:
  • 
    #      
    HOME_PATH = r'E:ML90615- PROJECT1'
    #     
    data = open(HOME_PATH+'/data/processed/test1.csv')
    data = pd.read_csv(data)
    data.head()
    4.코드 에 필요 한 부분 에 대한 설명
    이것 은 나 는 대부분의 사람들 이 공감 했다 고 믿는다.믿 지 않 니?한 달 전에 직접 쓴 코드 를 되 찾 아 보 세 요.얼마나 알 아 볼 수 있 는 지 보 세 요.
    5.Python 순환 코드 가속 화
    여기 서 구름 형(Python 과 알고리즘 의 아름다움)의 글 을 추천 합 니 다.24 식 으로 python 을 가속 화 합 니 다.
    소장 하고,많이 보고,좋 은 습관 을 기 르 세 요.그래 야 코드 를 빨리 쓸 수 있어 요~
    6.순환 코드 진도 시각 화
    Python 라 이브 러 리,tqdm 를 소개 합 니 다.먼저 설치 하 십시오:pip install tqdm
    이것 은 순환 진 도 를 나 타 낼 수 있 는 창고 로 그것 이 있 으 면 더욱 장막 안에서 작전 을 세 울 수 있다.
    여러분 은 아래 의 예 를 보 실 수 있 습 니 다.

    7.효율 적 인 이상 포획 도구 사용
    이상 bug 포 지 셔 닝,예전 의 저 는 항상 print()함수 로 끝까지 갔 습 니 다.아무 문제 가 없다 고 하지만 효율 적 으로 느 릴 것 입 니 다.나중에 PySnooper 라 는 장식 기 를 발 견 했 습 니 다.마치 신대륙 을 발견 한 것 같 습 니 다.
    우 리 는 보통 debug 입 니 다.우리 가 문제 가 있다 고 생각 할 수 있 는 곳 에서 출력 을 인쇄 하고 실제 출력 이 무엇 인지 본 다음 에 문 제 를 생각해 야 합 니 다.이것 은 우리 가 code 를 고 쳐 야 합 니 다.매우 세밀 하 게 고 쳐 야 합 니 다.비교적 직접적 으로 장식 기 를 추가 하 는 것 이 매우 번 거 롭 습 니 다.
    Example:
    
    import pysnooper
    @pysnooper.snoop('./file.log')
    def number_to_bits(number):
     if number:
     bits = []
     while number:
     number, remainder = divmod(number, 2)
     bits.insert(0, remainder)
     return bits
     else:
     return [0]
    number_to_bits(6)
    우 리 는 함수 의 모든 출력 을 file.log 로 저장 합 니 다.우 리 는 도대체 어디 에 문제 가 있 는 지 직접 볼 수 있 습 니 다.

    프로젝트 주소:https://github.com/cool-RR/pysnooper
    8.코드 의 건장 성 을 많이 고려 해 야 한다.
    코드 의 건장 성 이란 말 그대로 각종 이상 장면 을 막 아 낼 수 있 는 테스트 로,이상 처리 작업 은'포획'과'던 지기'두 부분 으로 이 뤄 져 있다.'캡 처'는 try...except 를 사용 하여 특정 문 구 를 감 싸 고 오류 프로 세 스 를 적절하게 완성 하 는 것 을 말 합 니 다.그리고 적당 한 raise 를 사용 하여 주동 적 으로'던 지기'이상 을 사용 하고 우아 한 코드 에서 없어 서 는 안 될 구성 부분 입 니 다.다음은 몇 가 지 를 정리 하여 참고 하 시기 바 랍 니 다.
    1)들 어 올 매개 변수 가 무엇 인지,유형,개수(이상 처리,논리 적 판단)
    
    def add(a, b):
     if isinstance(a, int) and isinstance(b, int):
     return a+b
     else:
     return '      '
    print(add(1, 2))
    print(add(1, 'a'))
    2)가장 정확 한 이상 포획 만 한다
    우 리 는 가끔 스 크 립 트 워 크 가 왕도 라 고 생각 하기 때문에 무작정 큰 try 를 만 들 고...except 는 전체 코드 를 감 싸 지만 버 려 야 할 AttibuteError 를 삼 키 기 쉽다.이로써 우리 의 debug 과정 에 불필요 한 번 거 로 움 을 증가 시 켰 다.
    따라서 우 리 는 이상 한 문 구 를 던 질 수 있 는 블록 만 잡 고 모호 한 Exception 이 아 닌 정확 한 이상 유형 만 잡 을 수 있 습 니 다.
    
    from requests.exceptions import RequestException
    def save_website_title(url, filename):
     try:
     resp = requests.get(url)
     except RequestException as e:
     print(f'save failed: unable to get page content: {e}')
     return False
    #                   ,          try    
    #    group       grop     ,         AttributeError  
    #     。
    obj = re.search(r'<title>(.*)</title>', resp.text)
    if not obj:
     print('save failed: title tag not found in page content')
     return False
    title = obj.group(1)
    try: with open(filename, 'w') as fp:
     fp.write(title)
    except IOError as e:
     print(f'save failed: unable to write to file {filename}: {e}')
     return False
    else:
     return True
    3)이상 처 리 는 주객 이 주인 을 빼 앗 아 서 는 안 된다.
    위 에서 말 한 이상 포획 은 정확 해 야 하지만,하나하나 가 정확 하 다 면,사실 우리 코드 에는 try...exception 문장 블록 이 많아 서 핵심 코드,코드 의 전체적인 읽 기 성 을 교란 시 킬 수 있다.
    여기 서 우 리 는 상하 문 관리 자 를 이용 하여 우리 의 이상 처리 절 차 를 개선 하고 중복 되 는 이상 처리 논 리 를 간소화 할 수 있다.
    
    class raise_api_error:
    """captures specified exception and raise ApiErrorCode instead
    :raises: AttributeError if code_name is not valid
    """
    def __init__(self, captures, code_name):
     self.captures = captures
     self.code = getattr(error_codes, code_name)
    def __enter__(self):
     #              
     return self
    def __exit__(self, exc_type, exc_val, exc_tb):
     #              
     # exc_type, exc_val, exc_tb             
     #     、   、   
     if exc_type is None:
     return False
     if exc_type == self.captures:
     raise self.code from exc_val
     return False
    위의 코드 에서 우 리 는 raise 라 는 이름 을 정의 했다.api_error 의 컨 텍스트 관리 자 는 컨 텍스트 에 들 어 갈 때 아무것도 하지 않 습 니 다.그러나 컨 텍스트 를 종료 할 때 현재 컨 텍스트 에 self.captures 라 는 이상 이 있 는 지 판단 합 니 다.있 으 면 APIErrorCode 이상 류 로 대체 합 니 다.
    컨 텍스트 관리 자 를 사용 한 후 간결 한 코드 는 다음 과 같 습 니 다.
    
    def upload_avatar(request):
     """       """
    with raise_api_error(KeyError, 'AVATAR_FILE_NOT_PROVIDED'):
     avatar_file = request.FILES['avatar']
    with raise_api_error(ResizeAvatarError, 'AVATAR_FILE_INVALID'),
     raise_api_error(FileTooLargeError, 'AVATAR_FILE_TOO_LARGE'):
     resized_avatar_file = resize_avatar(avatar_file)
    with raise_api_error(Exception, 'INTERNAL_SERVER_ERROR'):
     request.user.avatar = resized_avatar_file
     request.user.save()
    return HttpResponse({})
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기