모듈을 사용하면 Python 코드 조각을 논리적으로 구성할 수 있습니다.
관련 코드를 모듈에 할당하면 코드를 더 유용하고 이해하기 쉽게 만들 수 있습니다.
모듈은 바인딩 또는 참조를 위한 임의의 이름 속성을 가진 Python 객체이기도 합니다.
간단히 말하면 모듈은 Python 코드를 저장하는 파일입니다. 모듈은 함수, 클래스 및 변수를 정의할 수 있습니다. 모듈에는 실행 가능한 코드도 포함될 수 있습니다.
예
aname이라는 모듈의 Python 코드는 일반적으로 aname.py라는 파일에서 찾을 수 있습니다. 다음 예는 간단한 모듈 support.py입니다.
def print_func( par ):
print "Hello: ", par
import 문
Python 소스 파일을 사용하려면 다른 소스 파일에서 import 문만 실행하면 됩니다. 구문은 다음과 같습니다.
가져오기 모듈1[, 모듈2[,... moduleN]
통역사가 import 문을 발견하면 모듈이 현재 검색 경로에 있으면 모듈을 가져옵니다.
검색 경로는 통역사가 먼저 검색할 모든 디렉터리의 목록입니다. hello.py 모듈을 가져오려면 스크립트 상단에 명령을 넣어야 합니다:
#!/usr/bin/python
# 가져오기 모듈
가져오기 지원
# 이제 모듈에 포함된 함수를 호출할 수 있습니다
support.print_func(" Zara")
위 예의 출력 결과:
Hello : Zara
모듈은 여러 번 가져오더라도 한 번만 가져옵니다. 가져오기를 실행합니다. 이렇게 하면 가져온 모듈이 반복해서 실행되는 것을 방지할 수 있습니다.
From...import 문
Python의 from 문을 사용하면 모듈에서 지정된 부분을 현재 네임스페이스로 가져올 수 있습니다. 구문은 다음과 같습니다.
from modname import name1[, name2[, ... nameN]]
예를 들어 fib 모듈의 fibonacci 함수를 가져오려면 다음 명령문을 사용합니다.
from fib import fibonacci
이 명령문은 전체 fib 모듈을 현재 네임스페이스로 가져오지 않으며, fib의 fibonacci를 개별적으로 도입합니다. 이 명령문을 실행하십시오. 모듈의 전역 기호 테이블입니다.
From...import * 문
모듈의 모든 내용을 현재 네임스페이스로 가져오는 것도 가능합니다. 다음 문을 사용하면 됩니다.
from mod_name import *
이것은 모듈의 모든 프로젝트를 가져옵니다. 그러나 이 진술을 남용해서는 안 됩니다.
모듈 위치
모듈을 가져올 때 Python 파서의 모듈 위치 검색 순서는 다음과 같습니다.
현재 디렉터리
현재 디렉터리에 없으면 Python은 쉘 변수 PYTHONPATH 아래의 모든 디렉터리
를 검색합니다.
두 가지 모두 발견되지 않으면 Python은 기본 경로를 확인합니다. UNIX에서 기본 경로는 일반적으로 /usr/local/lib/python/
입니다. 모듈 검색 경로는 시스템 모듈의 sys.path 변수에 저장됩니다. 변수에는 현재 디렉터리, PYTHONPATH 및 설치 프로세스에서 결정된 기본 디렉터리가 포함됩니다.
PYTHONPATH 변수
환경 변수인 PYTHONPATH는 목록에 설치된 여러 디렉터리로 구성됩니다. PYTHONPATH의 구문은 셸 변수 PATH의 구문과 동일합니다.
Windows 시스템에서 일반적인 PYTHONPATH는 다음과 같습니다.
set PYTHONPATH=c:python20lib;
UNIX 시스템에서 일반적인 PYTHONPATH는 다음과 같습니다.
set PYTHONPATH=/usr /local/lib /python
네임스페이스 및 범위
변수는 일치하는 개체를 갖는 이름(식별자)입니다. 네임스페이스는 변수 이름(키)과 해당 개체(값)를 포함하는 사전입니다.
Python 표현식은 로컬 네임스페이스와 전역 네임스페이스의 변수에 액세스할 수 있습니다. 지역 변수의 이름이 전역 변수와 동일한 경우 지역 변수가 전역 변수를 덮어씁니다.
각 함수에는 고유한 네임스페이스가 있습니다. 클래스 메소드의 범위 지정 규칙은 일반 함수의 경우와 동일합니다.
Python은 함수 내에 할당된 모든 변수가 로컬이라는 가정하에 변수가 로컬인지 전역인지 지능적으로 추측합니다.
따라서 함수에서 전역 변수에 값을 할당하려면 global 문을 사용해야 합니다.
global VarName 표현식은 Python에게 VarName이 전역 변수임을 알려주므로 Python은 로컬 네임스페이스에서 이 변수를 찾지 않습니다.
예를 들어 전역 네임스페이스에 돈이라는 변수를 정의합니다. 그런 다음 함수 내의 변수 돈에 값을 할당하면 Python은 돈이 지역 변수라고 가정합니다. 그러나 우리는 로컬 변수인 돈에 접근하기 전에 이를 선언하지 않았으며 결과는 UnboundLocalError입니다. global 문의 주석 처리를 제거하면 이 문제를 해결할 수 있습니다.
#!/usr/bin/python
Money = 2000
def AddMoney():
# 코드를 수정하려면 다음 주석을 제거하세요.
# global Money
Money = Money + 1
돈 인쇄
AddMoney()
돈 인쇄
dir() 함수
dir() 함수는 순서가 지정된 문자열 목록이며, 그 내용은 모듈에 정의된 이름입니다.
반환된 목록에는 모듈에 정의된 모든 모듈, 변수 및 함수가 포함됩니다. 다음은 간단한 예입니다.
#!/usr/bin/python
# 내장된 항목 가져오기 수학 모듈
수학 가져오기
content = dir(math)
콘텐츠 인쇄;
위 예제의 출력 결과:
['__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__은 모듈의 가져오기 파일 이름을 가리킵니다.
globals() 및 locals() 함수
호출되는 위치에 따라 globals() 및 locals() 함수를 사용하여 전역 및 로컬을 반환할 수 있습니다. 네임스페이스 이름을 입력합니다.
함수 내에서 locals()를 호출하면 함수에서 접근할 수 있는 모든 이름이 반환됩니다.
함수 내에서 globals()를 호출하면 함수에서 접근할 수 있는 전역 이름이 모두 반환됩니다.
두 함수의 반환 유형은 사전입니다. 따라서 key() 함수를 사용하여 이름을 추출할 수 있습니다.
reload() 함수
모듈을 스크립트로 가져올 때 모듈의 최상위 부분에 있는 코드는 한 번만 실행됩니다.
따라서 모듈의 최상위 코드를 다시 실행하려면 reload() 함수를 사용하면 됩니다. 이 기능은 이전에 가져온 모듈을 다시 가져옵니다. 구문은 다음과 같습니다:
reload(module_name)
여기서 module_name은 문자열 형식이 아닌 모듈 이름을 직접 넣어야 합니다. 예를 들어 hello 모듈을 다시 로드하려면 다음과 같이 합니다.
reload(hello)
Python의 패키지
패키지는 모듈과 하위 패키지, 하위 패키지 아래의 하위 패키지로 구성된 Python 애플리케이션 환경을 정의하는 계층적 파일 디렉터리 구조입니다. 패키지.
전화 디렉토리에 있는 pots.py 파일을 생각해 보세요. 이 파일에는 다음과 같은 소스 코드가 있습니다:
#!/usr/bin/python
def Pots() :
print "I'm Pots Phone"
마찬가지로 서로 다른 기능을 가진 두 개가 더 있습니다. 파일:
Phone/Isdn.py에는 Isdn() 함수가 포함되어 있습니다.
Phone/G3.py에는 G3() 함수가 포함되어 있습니다.
이제 Phone에서 __init__ 파일을 만듭니다. 디렉토리 .py:
Phone/__init__.py
Phone을 가져올 때 모든 기능을 사용하려면 다음과 같이 __init__.py에서 명시적인 가져오기 문을 사용해야 합니다. :
from Pots import Pots
from Isdn import Isdn
from G3 import G3
이러한 코드를 __init__.py에 추가한 후 Phone 패키지를 가져올 때 이러한 모든 클래스를 사용할 수 있습니다.
#!/usr/bin/python
# 이제 휴대폰 패키지를 가져옵니다.
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()
위 예시 출력 결과:
나는 Pots Phone
저는 3G폰입니다
ISDN폰입니다
위와 같이 예를 들면, 파일에는 하나의 기능만 배치되지만 실제로는 여러 기능을 배치할 수 있습니다. 또한 이러한 파일에서 Python 클래스를 정의한 다음 이러한 클래스에 대한 패키지를 빌드할 수도 있습니다.