Python-모듈
모듈을 사용하면 Python 코드를 논리적으로 구성 할 수 있습니다. 관련 코드를 모듈로 그룹화하면 코드를 더 쉽게 이해하고 사용할 수 있습니다. 모듈은 바인딩하고 참조 할 수있는 임의로 이름이 지정된 속성이있는 Python 객체입니다.
간단히 말해서 모듈은 Python 코드로 구성된 파일입니다. 모듈은 함수, 클래스 및 변수를 정의 할 수 있습니다. 모듈에는 실행 가능한 코드도 포함될 수 있습니다.
예
aname 이라는 모듈의 Python 코드는 일반적으로 aname.py 라는 파일에 있습니다. 다음은 간단한 모듈 support.py의 예입니다.
def print_func( par ):
print "Hello : ", par
return
수입 성명
다른 Python 소스 파일에서 import 문을 실행하여 모든 Python 소스 파일을 모듈로 사용할 수 있습니다. 가져 오기 다음 구문을 가지고 -
import module1[, module2[,... moduleN]
인터프리터가 import 문을 만나면 모듈이 검색 경로에 있으면 모듈을 가져옵니다. 검색 경로는 인터프리터가 모듈을 가져 오기 전에 검색하는 디렉토리 목록입니다. 예를 들어, support.py 모듈을 가져 오려면 스크립트 맨 위에 다음 명령을 입력해야합니다.
#!/usr/bin/python
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func("Zara")
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Hello : Zara
모듈은 가져 오는 횟수에 관계없이 한 번만로드됩니다. 이렇게하면 여러 가져 오기가 발생하는 경우 모듈 실행이 반복해서 발생하지 않습니다.
에서 ... 수입 성명
Python의 from 문을 사용하면 모듈의 특정 속성을 현재 네임 스페이스로 가져올 수 있습니다. 에서 ... 수입은 다음과 같은 구문을 가지고 -
from modname import name1[, name2[, ... nameN]]
예를 들어, fib 모듈에서 fibonacci 함수를 가져 오려면 다음 명령문을 사용하십시오.
from fib import fibonacci
이 문은 전체 모듈 fib를 현재 네임 스페이스로 가져 오지 않습니다. 모듈 fib의 항목 fibonacci를 가져 오는 모듈의 전역 기호 테이블로 소개합니다.
에서 ... 수입 * 문
다음 import 문을 사용하여 모듈의 모든 이름을 현재 네임 스페이스로 가져올 수도 있습니다.
from modname import *
이렇게하면 모듈의 모든 항목을 현재 네임 스페이스로 쉽게 가져올 수 있습니다. 그러나이 문은 드물게 사용되어야합니다.
모듈 찾기
모듈을 가져올 때 Python 인터프리터는 다음 순서로 모듈을 검색합니다.
현재 디렉토리.
모듈을 찾을 수없는 경우 Python은 셸 변수 PYTHONPATH에서 각 디렉터리를 검색합니다.
다른 모든 방법이 실패하면 Python은 기본 경로를 확인합니다. UNIX에서이 기본 경로는 일반적으로 / usr / local / lib / python /입니다.
모듈 검색 경로는 시스템 모듈 sys에 sys.path변하기 쉬운. sys.path 변수에는 현재 디렉토리, PYTHONPATH 및 설치 종속 기본값이 포함됩니다.
PYTHONPATH의 변수
PYTHONPATH는 디렉토리 목록으로 구성된 환경 변수입니다. PYTHONPATH의 구문은 쉘 변수 PATH의 구문과 동일합니다.
다음은 Windows 시스템의 일반적인 PYTHONPATH입니다.
set PYTHONPATH = c:\python20\lib;
그리고 여기에 UNIX 시스템의 전형적인 PYTHONPATH가 있습니다.
set PYTHONPATH = /usr/local/lib/python
네임 스페이스 및 범위 지정
변수는 객체에 매핑되는 이름 (식별자)입니다. 공간은 변수 명 (키)와 해당 오브젝트 (값)의 사전이다.
Python 문은 로컬 네임 스페이스 와 전역 네임 스페이스의 변수에 액세스 할 수 있습니다 . 지역 변수와 전역 변수의 이름이 같으면 지역 변수는 전역 변수를 숨 깁니다.
각 함수에는 고유 한 로컬 네임 스페이스가 있습니다. 클래스 메서드는 일반 함수와 동일한 범위 지정 규칙을 따릅니다.
파이썬은 변수가 로컬인지 글로벌인지에 대해 교육적인 추측을합니다. 함수에서 값이 할당 된 모든 변수는 로컬이라고 가정합니다.
따라서 함수 내의 전역 변수에 값을 할당하려면 먼저 global 문을 사용해야합니다.
global VarName 문 은 Python에 VarName이 전역 변수임을 알려줍니다. Python은 변수에 대한 로컬 네임 스페이스 검색을 중지합니다.
예를 들어 글로벌 네임 스페이스에 Money 변수를 정의 합니다. Money 함수 내에서 Money 에 값 을 할당 하므로 Python은 Money 를 지역 변수로 가정 합니다. 그러나 설정하기 전에 로컬 변수 Money 의 값에 액세스 했으므로 UnboundLocalError가 결과입니다. 전역 명령문의 주석 처리를 제거하면 문제가 해결됩니다.
#!/usr/bin/python
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money
dir () 함수
dir () 내장 함수는 모듈에서 정의한 이름을 포함하는 정렬 된 문자열 목록을 리턴합니다.
목록에는 모듈에 정의 된 모든 모듈, 변수 및 함수의 이름이 포함됩니다. 다음은 간단한 예입니다.
#!/usr/bin/python
# Import built-in module math
import math
content = dir(math)
print content
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan',
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp',
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh',
'sqrt', 'tan', 'tanh']
여기에서 특수 문자열 변수 __name__ 은 모듈의 이름이고 __file__ 은 모듈이로드 된 파일 이름입니다.
전역 () 와 지역 주민 () 함수
전역 () 와 지역 주민 () 함수들이 호출되는 곳에서 위치에 따라 글로벌 및 로컬 네임 스페이스의 이름을 반환하는 데 사용할 수 있습니다.
locals ()가 함수 내에서 호출되면 해당 함수에서 로컬로 액세스 할 수있는 모든 이름을 반환합니다.
globals ()가 함수 내에서 호출되면 해당 함수에서 전역 적으로 액세스 할 수있는 모든 이름을 반환합니다.
이 두 함수의 반환 유형은 사전입니다. 따라서 keys () 함수를 사용하여 이름을 추출 할 수 있습니다.
리로드 () 함수
모듈을 스크립트로 가져올 때 모듈의 최상위 부분에있는 코드는 한 번만 실행됩니다.
따라서 모듈의 최상위 코드를 다시 실행 하려면 reload () 함수를 사용할 수 있습니다 . reload () 함수는 이전에 가져온 모듈을 다시 가져옵니다. reload () 함수의 구문은 다음과 같습니다.
reload(module_name)
여기서 module_name 은 모듈 이름을 포함하는 문자열이 아니라 다시로드하려는 모듈의 이름입니다. 예를 들어, hello 모듈 을 다시로드 하려면 다음을 수행하십시오.
reload(hello)
Python 패키지
패키지는 모듈, 하위 패키지 및 하위 하위 패키지 등으로 구성된 단일 Python 애플리케이션 환경을 정의하는 계층 적 파일 디렉터리 구조입니다.
Phone 디렉토리에 있는 Pots.py 파일을 고려하십시오 . 이 파일에는 다음 줄의 소스 코드가 있습니다.
#!/usr/bin/python
def Pots():
print "I'm Pots Phone"
비슷한 방식으로, 위와 같은 이름을 가진 다른 기능을 가진 또 다른 두 파일이 있습니다.
Isdn () 함수가있는 Phone / Isdn.py 파일
G3 () 함수가있는 Phone / G3.py 파일
이제 전화 디렉토리에 __init__.py 파일을 하나 더 만듭니다.
- Phone/__init__.py
Phone을 가져올 때 모든 함수를 사용할 수 있도록하려면 다음과 같이 __init__.py에 명시적인 import 문을 넣어야합니다.
from Pots import Pots
from Isdn import Isdn
from G3 import G3
이러한 행을 __init__.py에 추가하면 Phone 패키지를 가져올 때 이러한 모든 클래스를 사용할 수 있습니다.
#!/usr/bin/python
# Now import your Phone Package.
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone
위의 예에서 우리는 각 파일에있는 단일 함수의 예를 취했지만 파일에 여러 함수를 유지할 수 있습니다. 해당 파일에 다른 Python 클래스를 정의한 다음 해당 클래스에서 패키지를 만들 수도 있습니다.