초보 입문 Python 프로 그래 밍 8 가지 실 용적 인 제안
우 리 는 Python 으로 기계 학습 모델 링 프로젝트 를 진행 할 때 모든 사람 이 자신의 프로젝트 파일 관리 습관 을 가지 게 됩 니 다.저도 한 가지 방법 이 있 습 니 다.제 가 밟 았 던 구덩이 에서 밟 았 던 천둥 을 정리 한 것 입 니 다.지금 은 여기 서 공유 하 겠 습 니 다.많은 파트너 들 이 Python 프로 그래 밍 입문 한 지 얼마 되 지 않 았 기 때문에 여러분 들 이 시행 착 오 를 적 게 걷 기 를 바 랍 니 다.다소 참고 할 만 한 부분 이 있다.
목록 을 먼저 내놓다
매번 새로운 작업 을 시작 할 때마다 예전 에 저 는 편리 함 을 탐 냈 습 니 다.Code,Data,문 서 는 모두 한 폴 더 에 집중 되 어 어 어 지 러 워 보 였 습 니 다.한 때 는 역 추적 과정 이 매우 고 통 스 러 웠 거나 컴퓨터 를 바 꾸 었 습 니 다.파일 이 모두 실행 되 지 못 해서 스스로 경 로 를 고 쳐 야 하기 때문에 매우 고 통 스 러 웠 습 니 다.
자신의 탐색 을 통 해 프로젝트 를 몇 개의 하위 폴 더 로 나 눌 수 있 고 code 는 메 인 폴 더 에 넣 을 수 있 습 니 다.
2.원본 데 이 터 를 수 동 으로 수정 하지 말고 백업 을 잘 하 십시오.
우 리 는 소스 데 이 터 를 백업 하여 다음 에 거 슬러 올 라 갈 수 있 도록 해 야 한다.다음 작업 을 하거나 중간 절 차 를 수정 할 수 있 고 코드 등 다른 파일 에 대해 서도 백업 을 잘 해 야 한다.의외 의 분실 이 발생 하지 않도록 해 야 한다.
여 기 는 양 허 리 눅 스에 서 온 글 로 네 개의 도 구 를 추천 했다.
3.경로 의 올 바른 설정 을 잘 한다.
많은 학생 들 이 경 로 를 쓸 때 절대적 인 경 로 를 직접 사용 하 는 것 을 좋아 합 니 다.일반적인 상황 에서 문제 가 없 지만 코드 가 다른 사람 에 게 공유 되 거나 실 행 될 때 문제 가 발생 합 니 다.많은 경우 에 직접 연결 되 지 못 합 니 다.
여기 제안:
#
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({})
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.