10분이면 파이썬의 import을 알 수 있어요.
import 이후에 무슨 일이 일어났습니까?
알 듯 모를 듯하다.
쓸 수 있는데 잘 모르겠어요.
그런 import에 무슨 일이 일어났는지 조사해 봤어요.
작업 환경(버전)
ipython : 6.2.1
python: Python 3.6.4::Anaconda, Inc.
현재 디렉토리에 다음 파일이 있습니다.
hoge.py
def hoge():
print("ほげメソッド!")
print("ほげぇ!")
fuga.py
def fuga():
print("ふがメソッド!")
if __name__ == '__main__':
print("ふがぁ!")
뭐 하세요?
말하자면
import hoge
도대체 뭐하는 거야.단지 py를 실행하고 있을 뿐입니다.In [1]: import hoge
ほげぇ! # hoge.pyファイルを実行するのでprint("ほげぇ!")が実行される
In [2]: hoge.hoge()
ほげメソッド! # 定義されたメソッドはhoge.メソッド名で実行できる。
In [9]: type(hoge)
Out[9]: module # hogeさんはメソッドクラス
아니에요.hoge.py를 읽고 메모리로 펼치기, hoge.xxx() 형식의 hoge.py에 기술된 변수와 방법에 접근할 수 있을 뿐입니다.csv와 Requests 같은 파일은?했던 거 기억 안 나?
csv 등 표준 모듈은python을 설치한 디렉터리 근처에 있습니다.구체적으로
import module
이후module.__file__
에는 절대 경로를 알 수 있다.In [11]: import csv
In [12]: csv.__file__
Out[12]: '/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/csv.py'
출력된 파일을 열면python으로 기술된 것을 분명히 알 수 있습니다.In [15]: import numpy
In [16]: numpy.__file__
Out[16]: '/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/site-packages/numpy/__init__.py'
또한 외부 모듈에서 많이 읽는 파일은 init입니다.때로py가 될 수도 있어.이런 상황에서
__init__.py
를 보면 그 디렉터리에 모듈군의py 파일이 있고 이를 import로 되어 있음을 알 수 있다.모두 하나씩 만들어내는 것은 어렵기 때문에 함께 할 수 있다는 것이다.import 파일을 어떻게 찾습니까?
sys.path
에 설명된 위치를 찾습니다.기본적
In [19]: import sys
In [20]: sys.path
Out[20]:
['',
'/Users/user/.pyenv/versions/anaconda3-5.1.0/bin',
'/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python36.zip',
'/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python3.6',
'/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/lib-dynload',
'/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/site-packages',
'/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/site-packages/aeosa',
'/Users/user/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/site-packages/IPython/extensions',
'/Users/user/.ipython']
다른 디렉터리를 읽기 대상으로 삼으려면bash_프로필 등export PYTHONPATH="${PYTHONPATH}:/読み込みたいディレクトリのフルパス/"
를 입력합니다."main"은 무엇입니까?
이 파일을 실행할 때만 실행되는 블록입니다.
먼저 종착역에 있습니다.py를 실행해 보세요.
python $python fuga.py
ふがぁ
다음은 ipython으로fuga를 가져와 봅시다.In [1]: import fuga
# 何も表示されない
이렇게 파일을 직접 실행할 때 실행가져올 때 실행하지 않습니다.
왜 이렇게 써요?
예를 들어 터틀 모듈은 이 블록
if __name__ == "__main__":
에 설명되어 있고python 터틀이 있습니다.피라면 거북이 선생은 정신이 맑아서 걷기 시작한다.그저 시위 행진
import turtle
에 쓰일 뿐이라고 할 때는 실행하지 않는다.하지만 거북이가 아무리 귀여워도 움직일 때마다 짜증나죠.
이렇게 모듈로 읽을 때는 집행을 원하지 않는 시위 행진과 테스트 등 처리를 적는 기법을 쓴다.
if __name__ == "__main__": 목적은 알겠는데, 이런 징그러운 글씨는 무엇입니까?
__name__
등 좀 눈에 거슬리는 것은 if문일 뿐이다."__main__"
보시다시피 문자열은 입문서상에서 자주 볼 수 있습니다.if student == "Ken":
와 같습니다.예?선언했던 거 기억 안 나?
직접 실행 시 "main"입장
__name__
import을 진행했을 때__name__
등의 파일 이름이 들어왔다.이 동작을 확인하기 위해 다음 파일을 만들어 보세요.
tasu.py
def tasu(a, b):
print("method call" + __name__)
return a + b
if __name__=='__main__':
print(__name__)
print("4 + 6 = " + str(tasu(4, 6)))
실행 결과python tasu.py
__main__
method call__main__
4 + 6 = 10
이렇게 직접 집행하면hoge
에는__name__
가 있다.다음은 ipython으로 실행해 봅시다.
In [1]: import tasu
In [2]: tasu.tasu(5, 8)
method calltasu
Out[2]: 13
import__main__
만 있으면 블록을 실행하지 않습니다.방법 내 print
if __name__ == "__main__"
를 다시 호출하면 __name__
파일 이름이 표시됩니다.총결산
tasu
를 확인하고 변경할 수 있습니다.sys.path
파일을 직접 실행할 때 실행하고 프레젠테이션과 테스트를 작성합니다.실제 파일에 써서 실행하고 ipython
if __name__ == '__main__':
에 한번 쳐보면 이해가 늘어납니다.
Reference
이 문제에 관하여(10분이면 파이썬의 import을 알 수 있어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kz23szk/items/5614fc3f05f0f7cf61ef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)