IT의 이해

IPython HTML 이해

컨텐츠 is 2019. 11. 12. 02:31

 

IPython HTML수첩

2011년부터 Brian Granger가 이끄는 IPython 팀은 일반적으로 IPython Notebook으로 알려진 웹 기술 기반의 대화형 컴퓨터 문서 형식을 구축했다. 그것은 상호작용 컴퓨팅을 위한 훌륭한 도구와 재현 가능한 연구와 가르치는 이상적인 매체로 성장했다. 나는 책에 있는 대부분의 예들을 쓰면서 그것을 사용해 왔다. 나는 네가 그것을 이용하기를 권장한다.
JSON 기반의 .ipynb 문서 형식을 가지고 있어 코드, 출력, 수치를 쉽게 공유할 수 있다. 최근 파이썬 컨퍼런스에서, 데모에 대한 일반적인 접근법은 노트북을 사용하고 나중에 모든 사람들이 가지고 놀 수 있도록 .ipynb 파일을 온라인에 올리는 것이었다.  대부분의 플랫폼에서 기본 웹 브라우저가 노트북 대시보드까지 자동으로 열린다. 어떤 경우에는 나열된 URL로 이동해야 할수도 있다. 거기서 새로운 노트북을 만들어 탐색을 시작할 수 있다. 웹 브라우저에서 노트북을 사용하기 때문에 서버 프로세스는 어디에서나 실행될 수 있다.  심지어 Amazon EC2와 같은 클라우드 서비스 공급자에서 실행되는 노트북에도 안전하게 연결할 수 있다. 이 글을 쓰면서, 새로운 프로젝트 노트북은 EC2에서 노트북을 쉽게 출시할 수 있게 해준다.

 

IPYthon을 이용한 생산적 코드 개발 팁
코드를 개발, 디버그 및 궁극적으로 상호작용적으로 사용하기 쉬운 방법으로 작성하는 것은 많은 사용자들에게 패러다임의 변화일 수 있다. 코드 재적재와 같은 절차상 세부사항은 코딩 스타일 문제뿐만 아니라 약간의 조정이 필요할 수 있다. 이와 같이, 이 섹션의 대부분은 과학이라기 보다는 예술에 가깝고 당신에게 효과적이고 생산적인 피톤 코드를 쓰는 방법을 결정하기 위해 당신의 부분에 대한 약간의 실험이 필요할 것이다. 궁극적으로 당신은 반복적으로 사용하기 쉽고 가능한 한 쉽게 프로그램이나 기능을 실행하는 결과를 탐색할 수 있는 방법으로 당신의 코드를 구조화하기를 원한다. 나는 독립 실행형 명령줄 응용프로그램으로만 실행되도록 의도된 코드보다 IPython을 염두에 두고 설계된 소프트웨어를 발견했다. 이것은 어떤 일이 잘못되어 당신이나 다른 사람이 몇 달 또는 몇 년 전에 썼을지도 모르는 코드의 오류를 진단해야 할 때 특히 중요하다. 모듈 종속성 다시 로드  Python에서 일부_lib를 입력할 때 일부_lib의 코드가 실행되고 새로 생성된 일부_lib 모듈 네임스페이스에 모든 변수, 함수 및 가져오기 기능이 저장된다. 다음에 import_lib를 입력하면 기존 모듈 네임스페이스에 대한 참조가 표시된다. IPython의 인터렉티브 코드 개발에서 잠재적인 어려움은 예를 들어, 당신이 변경했을지도 모르는 다른 모듈에 의존하는 스크립트를 실행할 때 발생한다. test_script에 다음과 같은 코드가 있다고 가정하자.  test_script.py을(를) 실행하려면 test_script를 다음에 실행할 때 일부_lib.py를 수정하십시오.python의 "load-once" 모듈 시스템 때문에 여전히 이전 버전의 some_lib를 얻을 수 있을 것이다. 이 동작은 코드 변경을 자동으로 전파하는 MATLAB와 같은 일부 다른 데이터 분석 환경과 다르다. 이것에 대처하기 위해, 당신은 몇 가지 선택사항이 있다. 첫 번째 방법은 Python의 내장 리로드 기능을 사용하여 test_script.py을 다음과 같이 변경하는 것이다.

이것은 당신이 test_script.py.을 실행할 때마다 새로운 some_lib 사본을 얻을 것을 보장한다. 분명히, 의존성이 더 깊어진다면, 여기저기 다시 로드하는 사용법을 삽입하는 것은 좀 까다로울 수 있다. 이 문제를 위해, IPython은 모듈의 "깊이" 재귀적 재적재를 위한 마법의 기능이 아닌 특별한 부하 기능을 가지고 있다. 일부_lib 가져오기를 실행한 후 dreloadmittle_lib를 입력하면 모든 종속성과 함께 일부_lib를 다시 로드하려고 시도한다. 불행하게도, 이것은 모든 경우에 효과가 없을 것이다, 하지만 그것이 효과가 있을 때는 IPython을 다시 시작해야 하는 것보다 낫다.

 

코드 설계 팁
이것에 대한 간단한 방법은 없지만, 여기 내가 내 자신의 작업에서 효과적이라고 발견한 몇 가지 높은 수준의 원칙들이 있다.

 

IPython에서 이 프로그램을 실행하면 어떤 문제가 있는지 아십니까?
이 작업이 완료된 후, 주 기능에 정의된 결과나 물체는 IPython 쉘에서 액세스할 수 없게 된다. 더 나은 방법은 모듈의 글로벌 네임스페이스에서 어떤 코드든 직접 실행하는 것이다. 모듈도 가져올 수 있도록 하려면 그렇게 하면 코드를 실행할 때 메인에서 정의된 모든 변수를 볼 수 있을 것이다. 이 간단한 예에서는 의미가 덜하지만,  IPython에서 사용할 수 있는 대용량 데이터 세트와 관련된 몇 가지 복잡한 데이터 분석 문제를 살펴보도록 하겠다. 납작한 것이 중첩된 코드보다 낫다. 나는 양파의 여러 층에 대해 생각하게 한다. 기능을 테스트하거나 디버깅할 때 관심 코드를 찢기 위해 얼마나 많은 양의 양파를 벗겨내야 하는가? "평탄한 것이 중첩보다 낫다"는 생각은 파이썬의 선의 일부분이며, 일반적으로 인터랙티브 사용을 위한 코드 개발에도 적용된다. 기능 및 클래스를 가능한 한 디커플링 및 모듈화하면 장치 테스트, 디버그 및 대화형 사용 여부를 테스트하기가 더 쉬워진다. 더 긴 파일에 대한 두려움 극복 만약 당신이 Java나 다른 그러한 언어 배경에서 온다면, 당신은 파일을 짧게 유지하도록 지시 받았을지도 모른다. 많은 언어에서 이것은 건전한 조언이다; 긴 길이는 대개 나쁜 "코드 냄새"로, 리팩터링이나 재편이 필요할 수 있음을 나타낸다. 그러나 IPython을 사용하여 코드를 개발하면서, 10개의 작은 파일과 상호 연결된 파일들을 가지고 작업하는 동안, 예를 들어, 각각의 줄은 하나의 큰 파일이나 두 세 개의 긴 파일보다 일반적으로 더 많은 두통을 야기시킬 수 있다. 파일 수가 적다는 것은 다시 로드할 모듈 수가 줄어들고 편집하는 동안 파일 간 점프도 줄었다는 것을 의미한다. 나는 각각 내부 응집력이 높은 큰 모듈들을 훨씬 더 유용하고 비단결처럼 유지한다는 것을 발견했다. 솔루션을 향해 반복한 후, 더 큰 파일을 작은 파일로 리팩터링하는 것이 때로는 이치에 맞을 것이다.