Latest web development tutorials

Python3 모듈

스크립트의 이전 섹션에서는 다음, 당신이 사라진 것 정의하는 모든 방법과 변수를 종료하고 파이썬 인터프리터에서 입력하면, 우리 프로그램 파이썬 인터프리터입니다.

파이썬 할 수있는 방법을 제공하는 일부 스크립트 인터프리터 또는 대화 인스턴스 파일에 저장된 이러한 정의는,이 파일은 모듈이라고한다.

모듈 함수와 이름이 접미사 평 변수를 포함하는 모든 파일의 정의입니다. 모듈이 모듈의 기능과 다른 기능을 사용하는 다른 프로그램에 도입 될 수있다. 이것은 또한 파이썬 표준 라이브러리의 사용이다.

여기에 사용되는 파이썬 표준 라이브러리 모듈의 예입니다.

#!/usr/bin/python3
# 文件名: using_sys.py

import sys

print('命令行参数如下:')
for i in sys.argv:
   print(i)

print('\n\nPython 路径为:', sys.path, '\n')

다음과 같이 결과의 구현은 다음과 같습니다 :

$ python using_sys.py 参数1 参数2
命令行参数如下:
using_sys.py
参数1
参数2


Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 

  • 1, 파이썬 표준 라이브러리 sys.py 모듈을 도입 가져 오기 SYS,이 모듈 방식의 도입이다.
  • 2, sys.argv에 포함되는 명령 줄 스위치의 목록입니다.
  • 도 3은의 sys.path는 파이썬 자동 필요한 모듈리스트의 경로를 찾을 포함한다.

import 문

다음과 같이 단순히 소스 파일에서 다른 import 문을 수행, 파이썬 소스 파일을 사용하려면, 구문은 다음과 같습니다

import module1[, module2[,... moduleN]

모듈이 현재 검색 경로에 수입 될 경우 경우 인터프리터는 import 문을 발견.

검색 경로는 먼저 모든 디렉토리의 목록을 검색합니다 통역사입니다. 이 모듈 지원을 가져올 때, 당신은 스크립트의 상단에 주문해야 :

support.py 파일의 코드는 다음과 같습니다

#!/usr/bin/python3
# Filename: support.py

def print_func( par ):
    print ("Hello : ", par)
    return

test.py 지원 모듈을 소개 :

#!/usr/bin/python3
# Filename: test.py
 
# 导入模块
import support
 
# 现在可以调用模块里包含的函数了
support.print_func("w3big")

위의 출력의 예 :

$ python3 test.py 
Hello :  w3big

모듈은 상관없이 가져 오기를 실행 몇 번, 한 번에 수입되지 않습니다. 이 가져 오기 모듈이 또 다시 실행하고 방지 할 수 있습니다.

우리는 파이썬 인터프리터 인 경우, import 문을 사용하면 어떻게 해당 파일을 찾는 방법은?

이것은 파이썬 검색 경로를 포함, 검색 경로가 디렉토리 이름의 시리즈로 구성되어, 파이썬 인터프리터는 도입 모듈에 대한 검색이 디렉토리에서 켜집니다.

이 사실은, 탐색 경로 환경 변수를 정의하는 방법에 의해 결정될 수 있고, 환경 변수 같다.

검색 경로는 파이썬 컴파일러 또는 결정 설치하고, 새로운 라이브러리를 설치하는 것은 또한 수정해야합니다. 검색 경로, 대화 형 인터프리터에서 간단한 실험을 다음 코드를 입력, sys 모듈 경로 변수에 저장됩니다

>>> import sys
>>> sys.path
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
>>> 

sys.path에 우리는 파이썬 인터프리터를 실행하는 것으로, (당신이 더 명확하게하는 디렉토리 볼 수 스크립트에서 인쇄하는 경우), 빈 문자열 ''는 처음있는 출력의 목록이며, 현재 디렉토리를 표시합니다 디렉토리 (스크립트가 스크립트가 실행되는 디렉토리 인 경우).

나 파일과 같은 이름으로 현재 디렉토리에 존재하는 것처럼 모듈에 도입 될 경우에 따라서는 모듈을 차단하기 위해 소개합니다.

검색 경로의 개념을 이해하면되지 모듈의 검색 경로의 일부를 소개하는 스크립트에서의 sys.path를 수정할 수 있습니다.

지금, 현재 디렉토리 또는 다음과 같은 fibo.py 파일을 작성하는 디렉토리의 sys.path 인터프리터에서 :

# 斐波那契(fibonacci)数列模块

def fib(n):    # 定义到 n 的斐波那契数列
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

def fib2(n): # 返回到 n 的斐波那契数列
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

그리고 파이썬 인터프리터를 입력,이 모듈을 가져 오려면 다음 명령을 사용합니다 :

>>> import fibo

이것은 직접 전류 심볼 테이블에 기록 된 함수의 이름 FIBO 정의하지만, 모듈 이름 FIBO가 기록되지 않는다.

당신은 액세스 기능에 모듈 이름을 사용할 수 있습니다 :

>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'

자주하는 기능을 사용하려는 경우 로컬 이름에 할당 할 수 있습니다 :

>>> fib = fibo.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377


에서 ... import 문

다음과 같이 파이썬은 모듈에서 현재 이름 공간의 특정 부분에서 문을 가져올 수 있습니다, 구문은 다음과 같습니다

from modname import name1[, name2[, ... nameN]]

예를 들어, FIB 기능의 모듈 FIBO을 가져 오려면 다음 문을 사용합니다 :

>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

이 문은 현재 이름 공간에 전체 FIBO 모듈 아니다, 그것은 단지 레인 FIB 기능이 도입 FIBO됩니다.



에서 ... 수입 * 문

모듈의 모든 내용은 모두 단순히 다음 문을 가능한 사용중인 현재 네임 스페이스에 있습니다 :

from modname import *

이것은 모든 프로젝트에 모듈을 가져올 수있는 쉬운 방법을 제공합니다. 그러나이 문은 사용하기에 너무 많이해서는 안됩니다.


깊이 모듈

메소드 정의 모듈 외에 실행 가능한 코드를 포함 할 수있다. 이 코드는 일반적으로 모듈을 초기화하는 데 사용됩니다. 이 코드는 처음 실행될 도입된다.

모듈이 전역 심볼 테이블로 모든 기능을 사용하기 위해 내부 각 모듈은, 그 자신의 독립적 인 심볼 테이블이 있습니다.

따라서, 모듈의 저자는 안전하게 전역 변수 꽃에 종사하는 다른 사용자에 대한 걱정없이 모듈이 전역 변수를 사용할 수 있습니다.

당신은 정말 당신이 무슨 일을하는지 알고 다른 측면에서, 당신은 또한 modname.itemname 같은 표현하여 기능 모듈에 액세스 할 수 있습니다.

모듈은 다른 모듈을 가져올 수 있습니다. 모듈 (또는 스크립트, 또는 다른 곳에서) 물론, 모듈을 가져올 최초 사용 가져 오기에서이 아니라 필수보다 그냥 대회입니다. 반입 된 모듈의 이름이 모듈의 현재 동작의 기호 테이블에 배치한다.

임포트하는 방법도있다 수입은 현재 동작 부에 모듈 명 (변수의 작용) 내에서 직접적으로 사용될 수있다. 예를 들면 :

>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

모듈 이름을 가져올 수 없습니다이 방법은 현재의 문자 테이블에 도입 (내부이 경우, 이름이 정의되어 있지 FIBO 정도).

이것은 또한 모든 (함수, 변수) 이름은 현재의 문자 테이블 모듈로 가져 한 번 모듈을 넣어하는 방법입니다 :

>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

이 모든 이름에 가져옵니다,하지만 하나의 밑줄의 사람들은 (_) 이름이이 경우에 없습니다. 다른 소스에서 도입 이름은, 기존의 정의를 포함 할 가능성이 있기 때문에 대부분의 경우, 파이썬 프로그래머는이 방법을 사용하지 마십시오.


__name__ 속성

모듈이 먼저 다른 프로그램에 도입 될 때, 주요 프로그램이 실행된다. 우리가 모듈에 도입하려면 모듈 우리는이 블록에만 런타임 모듈 자체에서 실행하기 위해 __name__ 속성을 사용할 수 있습니다, 프로그램 블록을 실행하지 않습니다.

#!/usr/bin/python3
# Filename: using_name.py

if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')

다음과 같은 출력을 실행합니다 :

$ python using_name.py

그 자체가 실행 프로그램

$ python
>>> import using_name
我来自另一模块
>>>

설명 : 그 값이 '__main__'이 때 각 모듈이하는 __name__ 속성을 가지고, 그것은 그 자체가 실행 모듈이, 그렇지 않으면이 도입되고 있음을 나타냅니다.


DIR () 함수

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
</p>
<pre>
>>> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> dir(sys)  
['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__',
 '__package__', '__stderr__', '__stdin__', '__stdout__',
 '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe',
 '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv',
 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
 'call_tracing', 'callstats', 'copyright', 'displayhook',
 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
 'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
 'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount',
 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path',
 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1',
 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit',
 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
 'thread_info', 'version', 'version_info', 'warnoptions']

인수 지정하지 않은 경우, DIR () 함수는 현재 정의의 이름을 나열한다 :

>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir() # 得到一个当前模块中定义的属性列表
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']
>>> a = 5 # 建立一个新的变量 'a'
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'sys']
>>>
>>> del a # 删除变量名a
>>>
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
>>>

표준 모듈

소개합니다 파이썬 라이브러리 참조 문서에서 모듈의 표준 라이브러리의 일부와 파이썬 (즉, "라이브러리 참조 문서"뒤에).

일부 모듈을 파서에 직접 내장되어 있습니다,이 언어되지 일부 내장 기능하지만, 그러나 그는 심지어 시스템 수준의 통화 아무 문제 없습니다, 매우 효율적으로 사용할 수 있었다.

이들 구성 요소는 이러한 전용 윈도우 시스템이 사용할 수있는 모듈에서 WinReg 같은 다른 운영체제에 따라 다른 형태로 구성 될 수있다.

모든 파이썬 구문 분석기에 내장 된 특수 모듈 SYS,이 있음을 주목해야한다. 변수 sys.ps1와와와 sys.ps2는 기본 및 보조 프롬프트 프롬프트 해당 문자열을 정의합니다 :

>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps2
'... '
>>> sys.ps1 = 'C> '
C> print('Yuck!')
Yuck!
C>

꾸러미

패키지가 사용 관리 파이썬 모듈 네임 스페이스의 형태 인 "점선 모듈 이름."

예를 들어, 모듈 이름 AB는, 그는 말했다 패키지 서브 모듈 B. 그

모듈을 사용하는 경우, 당신은 같은 이름의 다른 라이브러리의 경우 모듈을 걱정하지 마세요,이 형태의 점으로 구분 된 모듈 이름의 사용과 같은 다른 모듈의 상호 작용 중 전역 변수에 대해 걱정할 필요가 없습니다.

그래서 다른 저자는 NumPy와 모듈 또는 파이썬 그래픽 라이브러리를 제공 할 수 있습니다.

이제 사용자가 통합 음성 처리 모듈 및 데이터 파일을 설계한다고 가정하자 (또는 "패키지"이라고 부른다).

당신이 증가 모듈의 세트가 필요하므로, (.AU : .WAV, : 파일 : aiff 등, : 파일 예를 들어 기본적으로 확장에 의해 구별) 다른 오디오 파일 형식의 기존의 다양한 다른 형식 사이.

오디오 데이터의 경우, 사용자가 이러한 작업을 처리하는 모듈을 완료하지 방법의 세트를 필요로하는 (예를 들면 인공 스테레오 효과를 만들 이퀄라이저 기능 향상, 에코를 추가 혼합과 같은) 많은 다른 작업들이있다.

여기서 (a 계층 적 파일 시스템에서) 가능한 패키지 구조이다 :

sound/                          顶层包
      __init__.py               初始化 sound 包
      formats/                  文件格式转换子包
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  声音效果子包
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  filters 子包
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

가져 오기 패키지에서 때, 하위 디렉토리를 기반으로 파이썬 sys.path에 디렉토리는이 패키지에 포함 된 찾을 수 있습니다.

만 디렉토리가 주로 이름의 저속한 학대의 일부를 피하기 위해 __init__.py 패키지로 간주됩니다라는 이름의 파일이 포함되어 있습니다 (예를 들어,라는 문자열) 부주의 유효한 모듈 검색 경로에 영향을 미칩니다.

그것은 init__.py __ : 파일 : 가장 단순한 경우, 빈했습니다. __all__ 변수 물론,이 파일은 또한 몇몇 초기화 코드를 포함하거나 (후술)이다.

마다 사용자는 같은 패키지 내부에만 특정 모듈을 가져올 수

import sound.effects.echo

이 하위 모듈을 가져옵니다 : sound.effects.echo합니다. 그는 액세스의 전체 이름을 사용해야합니다 :

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

서브 모듈을 도입하는 또 다른 방법은 :

from sound.effects import echo

에코, 그는 그 긴 접두사를 필요로하지 않는다, 그래서 그는 사용할 수 있습니다 또한 하위 모듈을 가져옵니다 :

echo.echofilter(input, output, delay=0.7, atten=4)

또 다른 변화는 직접 함수 나 변수로 도입된다 :

from sound.effects.echo import echofilter

에코, 그의 echofilter () 함수를 사용할 수 있습니다 : 다시 말하지만,이 방법은 서브 모듈을 가져옵니다 :

echofilter (입력, 출력, 지연 = 0.7, 차렷 = 4)

이 형태로 패키지 가져 오기 항목에서 사용하는 경우 해당 항목이 될 수있을 때 참고하거나 패키지 서브 모듈 (서브 패키지), 또는 함수, 클래스 또는 변수로 패키지 정의 내부의 다른 이름, 내부.

첫 번째 패키지로 정의 된 항목 이름을 가져옵니다 구문은 발견되지 않는 경우는, 다음 가져올 수있는 모듈을 수행했습니다. 찾을 수없는 경우, 축 하, A : EXC : ImportError를 예외가 발생합니다.

당신이 item.subitem.subsubitem와 마지막 하나를 제외하고, 양식을 가져 오기로이 양식을 사용하는 경우 반대로, 그것은 패키지해야하지만 마지막 하나는 모듈 또는 패키지가 될 수 있지만 클래스 이름, 함수 나 변수가 될 수 없습니다 .


패키지에서 가져 오기 *

우리는 * 어떻게됩니까으로 가져올 sound.effects에서 사용하는 경우 상상?

파이썬 모든 서브 모듈 하나씩, 그들 모두에 제공하는 패키지를 찾을 파일 시스템을 입력한다.

윈도우는 대소 문자를 구분 시스템이기 때문에 그러나 불행하게도,이 방법은 Windows 플랫폼에서 작동하는 것은 매우 좋지 않다.

이 플랫폼에서 아무도 모듈 에코 또는 에코 또는 ECHO로 가져 ECHO.py 파일 호출되지 신뢰도를 보장 할 수 있습니다.

(예를 들어, Windows 95가 표시됩니다 각 파일의 첫 글자를 대문자로 매우 성가신) 및 DOS 8 + 3 이름 지정 규칙은 더 얽힌 않는 긴 모듈 이름의 문제를 다룰 것이다.

이 문제를 해결하기 위해, 유일한 문제 패키지 저작 패키지의 정확한 지표를 제공한다.

규칙에 따라 가져 오기 문 : __init__.py라는 패키지 정의 파일 패키지 가져 오기 함량 등이 목록에있는 모든 이름을 넣어 패키지 가져 오기 * 시간에서 사용하는 변수의 목록을 __all__ 존재합니다.

패키지의 저자로서,도 업데이트 아 __all__ 보장하기 위해 업데이트 패키지 후 잊지 마세요. 당신은 내가 *이 사용, 좋아, 문제는, 왜 사장님을하지 않았다 가져 오기를 사용하지 않습니다, 나는 그것을하지 않습니다 말한다. 파일 : 다음 예에서, 소리 / 효과 / __ init__.py는 다음과 같은 코드를 포함 :

__all__ = ["echo", "surround", "reverse"]

이 * 가져가 sound.effects에서이 사용을 사용할 때, 당신은 세 개의 하위 모듈 내부의 패키지를 가져올 것을 의미합니다.

__all__이 정말로 정의되지 않은 경우 sound.effects 가져올에서, 다음은 패키지 sound.effects에서 하위 모듈을 가져 오지 않습니다 * 시간이 구문을 사용합니다. 그는 단지 (__init__.py 초기화 코드를 실행 할 수있다 정의)에 와서 내부에 정의 된 패키지와 sound.effects의 모든 내용을 넣습니다.

이에 오는 모든 이름을 정의하는 __init__.py가됩니다. 우리는이 문장을 소개하기 전에 그리고 그는 모든 명시 적으로 지정된 모듈을 파괴하지 않습니다. 코드의이 부분 좀 봐 :

import sound.effects.echo
import sound.effects.surround
from sound.effects import *

이 예에서,에서 ... 가져 오기 실행하기 전에, 패키지는 에코를 sound.effects 및 서라운드 모듈은 현재 이름 공간에 가져옵니다. (물론, 당신이 __all__ 아무 문제 정의도)

일반적으로 우리는 종종이 방법이 감소 가독성을 초래할 것이기 때문에, 모듈을 가져 오려면이 방법 *의 사용을 옹호하지 않습니다. 그러나 이것은 많은 노력을 절약 할 수 키 입력은 정말, 일부 모듈은 특정 방법으로 만 수입 될 수 있도록 설계되었습니다.

잘못하지 않습니다 패키지 가져 오기 specific_submodule에서이 방법을 사용하여, 기억하십시오. 사실, 이것은 권장되는 방법입니다. 같은 이름의 다른 패키지를 가질 수있다 서브 모듈 및 서브 모듈을 가져올하지 않는 한.

패키지의 구조는 서브 패키지 (예 : 패키지의 예와 같이 소리), 당신은 형제 패키지 (같은 레벨 패키지)를 가져 오려는 경우 가져올 수입 절대 경로를 사용해야합니다. 이 모듈 sound.filters.vocoder 패키지 sound.effects 모듈은 에코 사용하려는 경우 예를 들어, sound.effects 에코 가져 오기에서 작성해야합니다.

from . import echo
from .. import formats
from ..filters import equalizer

암시 적 또는 명시 적 기준 수입은 현재 모듈의 처음부터 여부. 메인 모듈의 이름은 언제나 "__main__", 파이썬 응용 프로그램의 주 모듈은, 당신은 항상 절대 경로 참조를 사용해야합니다.

패키지는 추가 속성 __path__을 제공합니다. 이 오 __init__.py에 정의 된 다른 전에 실행하는, 당신이이 서비스 __init__.py의 패키지를 포함하는 디렉토리가 각각의 디렉토리의 목록입니다. 이 변수는 패키지와 하위 패키지에 포함되어있는 모듈 내부의 영향에 대해 수정 될 수있다.

이 기능은 일반적으로 통상적 모듈 내로 패키지를 확장하는 데 사용되지 않는다.