수색…


통사론

  • import module_name
  • import module_name.submodule_name
  • from module_name import *
  • module_name에서 가져 오기 submodule_name [, class_name , function_name , ... 등]
  • NEW_NAME 같은 모듈 이름 수입 some_name에서
  • from module_name.submodule_name import class_name [, 함수 이름 , ... 등]

비고

모듈을 임포트하면 파이썬이이 모듈의 모든 최상위 코드를 평가하게하여 모듈에 포함 된 모든 함수, 클래스 및 변수를 학습 합니다. 모듈을 가져올 때 최상위 코드를주의 깊게 if __name__ == '__main__': 캡슐화하십시오. 모듈을 가져올 때 모듈을 실행하지 않으려면 캡슐화하십시오.

모듈 가져 오기

import 문 사용 :

>>> import random
>>> print(random.randint(1, 10))
4

import moduleimport module 을 가져온 다음 module.name 구문을 사용하여 객체 (예 : 값, 함수 및 클래스)를 참조 할 수있게합니다. 위의 예에서는 randint 함수가 포함 된 random 모듈을 가져옵니다. 그래서 random 을 import함으로써 random.randint randint 를 호출 할 수 있습니다.

모듈을 가져 와서 다른 이름으로 지정할 수 있습니다.

>>> import random as rn
>>> print(rn.randint(1, 10))
4

파이썬 파일 main.pycustom.py 와 같은 폴더에 custom.py . 다음과 같이 가져올 수 있습니다.

import custom

모듈에서 함수를 임포트하는 것도 가능합니다 :

>>> from math import sin
>>> sin(1)
0.8414709848078965

특정 함수를 더 자세히 모듈로 가져 오려면 점 연산자를 import 키워드의 왼쪽 에서만 사용할 수 있습니다.

from urllib.request import urlopen

파이썬에서는 최상위 수준에서 함수를 호출하는 두 가지 방법이 있습니다. 하나는 import 이고 다른 하나는 import from . 우리는 이름 충돌의 가능성이있을 때 import 사용해야합니다. hello.py 파일과 world.py 파일에 function이라는 function 가 있다고 가정 해 보겠습니다. 그러면 import 문이 잘 작동합니다.

from hello import function
from world import function

function() #world's function will be invoked. Not hello's  

일반적으로 import 는 네임 스페이스를 제공합니다.

import hello
import world

hello.function() # exclusively hello's function will be invoked 
world.function() # exclusively world's function will be invoked

그러나 당신이 충분히 확신하는 경우, 전체 프로젝트 from 성명 from 사용해야하는 동일한 함수 이름을 사용하는 방법은 없습니다.

같은 줄에 여러 개의 가져 오기를 만들 수 있습니다.

>>> # Multiple modules
>>> import time, sockets, random
>>> # Multiple functions
>>> from math import sin, cos, tan
>>> # Multiple constants
>>> from math import pi, e

>>> print(pi)
3.141592653589793
>>> print(cos(45))
0.5253219888177297
>>> print(time.time())
1482807222.7240417

위에 표시된 키워드와 구문을 조합하여 사용할 수도 있습니다.

>>> from urllib.request import urlopen as geturl, pathname2url as path2url, getproxies
>>> from math import factorial as fact, gamma, atan as arctan
>>> import random.randint, time, sys

>>> print(time.time())
1482807222.7240417
>>> print(arctan(60))
1.554131203080956
>>> filepath = "/dogs/jumping poodle (december).png"
>>> print(path2url(filepath))
/dogs/jumping%20poodle%20%28december%29.png

모듈에서 특정 이름 가져 오기

전체 모듈을 가져 오는 대신 지정된 이름 만 가져올 수 있습니다.

from random import randint # Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"
print(randint(1, 10))      # Out: 5

from random 필요한, 파이썬 인터프리터가 있기 때문에 어떤 자원에서 함수 또는 클래스와 가져와야합니다 알고 import randint 함수 또는 클래스 자체를 지정합니다.

아래의 다른 예 (위와 비슷 함) :

from math import pi
print(pi)                  # Out: 3.14159265359

다음 예제에서는 모듈을 가져 오지 않았기 때문에 오류가 발생합니다.

random.randrange(1, 10)    # works only if "import random" has been run before

출력 :

NameError: name 'random' is not defined

파이썬 인터프리터는 random 무엇을 의미하는지 이해하지 못합니다. 예제에 import random 을 추가하여 선언해야합니다.

import random
random.randrange(1, 10)

모듈에서 모든 이름 가져 오기

from module_name import *

예 :

from math import *
sqrt(2)    # instead of math.sqrt(2)
ceil(2.7)  # instead of math.ceil(2.7)

이것은 math 모듈에 정의 된 모든 이름을 밑줄로 시작하는 이름이 아닌 전역 네임 스페이스로 가져옵니다 (작성자는 내부 용으로 만 사용함을 나타냅니다).

경고 : 같은 이름의 함수가 이미 정의되거나 가져온 경우 덮어 씁니다 . 거의 항상 from math import sqrt, ceil 특정 이름 만 가져 오는 것이 좋습니다 .

def sqrt(num):
    print("I don't know what's the square root of {}.".format(num))

sqrt(4)
# Output: I don't know what's the square root of 4.

from math import * 
sqrt(4)
# Output: 2.0

별표 표시된 가져 오기는 모듈 수준에서만 허용됩니다. 클래스 또는 함수 정의에서이를 수행하려고하면 SyntaxError 합니다.

def f():
    from math import *

class A:
    from math import *

둘 다 실패합니다.

SyntaxError: import * only allowed at module level

__all__ 특수 변수

모듈에는 __all__ 이라는 특수 변수가 __all__ from mymodule import * 사용할 때 가져올 변수를 제한 할 수 있습니다.

주어진 다음 모듈 :

# mymodule.py

__all__ = ['imported_by_star']

imported_by_star = 42
not_imported_by_star = 21

from mymodule import * 사용할 때만 imported_by_star from mymodule import * .

>>> from mymodule import *
>>> imported_by_star
42
>>> not_imported_by_star
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'not_imported_by_star' is not defined

그러나 not_imported_by_star 는 명시 적으로 가져올 수 있습니다.

>>> from mymodule import not_imported_by_star
>>> not_imported_by_star
21

프로그래밍 방식 가져 오기

Python 2.x 2.7

함수 호출을 통해 모듈을 가져 오려면 importlib 모듈 (Python 버전 2.7부터 포함)을 사용하십시오.

import importlib
random = importlib.import_module("random")

importlib.import_module() 함수는 패키지의 하위 모듈을 직접 가져옵니다.

collections_abc = importlib.import_module("collections.abc")

이전 버전의 Python의 경우 imp 모듈을 사용하십시오.

Python 2.x 2.7

imp.find_moduleimp.load_module 함수를 사용하여 프로그래밍 방식으로 가져 오기를 수행합니다.

표준 라이브러리 문서 에서 가져온 것

import imp, sys
def import_module(name):
    fp, pathname, description = imp.find_module(name)
    try:
        return imp.load_module(name, fp, pathname, description)
    finally:
        if fp:
            fp.close()

프로그래밍 방식으로 모듈을 가져 오려면 __import__() 를 사용하지 마십시오 ! sys.modules , fromlist 인수 등과 같이 importlib.import_module() 이 간과하기 쉬운 미묘한 세부 사항이 있습니다.

임의의 파일 시스템 위치에서 모듈 가져 오기

이미 파이썬 표준 라이브러리 나 사이드 패키지로 내장 모듈로 존재하지 않는 모듈을 가져 오려면, 모듈이 발견 된 디렉토리에 sys.path 라는 경로를 추가하면 sys.path . 이 기능은 호스트에 여러 파이썬 환경이있는 경우 유용 할 수 있습니다.

import sys
sys.path.append("/path/to/directory/containing/your/module")
import mymodule

모듈 자체에 대한 경로가 아닌 mymodule 이있는 디렉토리 에 경로를 추가하는 것이 중요합니다.

수입품에 대한 PEP8 규정

수입품을위한 PEP8 스타일 가이드 라인을 추천합니다 :

  1. 수입은 별도의 줄에 있어야합니다.

     from math import sqrt, ceil      # Not recommended
     from math import sqrt            # Recommended
     from math import ceil
    
  1. 모듈 상단에서 다음과 같이 가져 오기를 주문합니다.

    • 표준 라이브러리 가져 오기
    • 관련 타사 수입
    • 로컬 응용 프로그램 / 라이브러리 별 가져 오기
  2. 와일드 카드 가져 오기는 현재 네임 스페이스의 이름에 혼란을 야기하므로 피해야합니다. from module import * 를 수행하면 코드의 특정 이름이 module 에서 왔는지 여부가 불분명 할 수 있습니다. from module import * -type 문을 여러 개 사용하면 이중화가 가능합니다.

  3. 상대적인 수입품 사용을 피하십시오; 대신 명시 적 가져 오기를 사용하십시오.

하위 모듈 가져 오기

from module.submodule import function

module.submodule 에서 function 를 가져옵니다.

__import __ () 함수

__import__() 함수는 런타임에 이름 만 알려진 모듈을 가져 오는 데 사용할 수 있습니다

if user_input == "os":
    os = __import__("os")

# equivalent to import os

이 함수를 사용하여 모듈에 대한 파일 경로를 지정할 수도 있습니다

mod = __import__(r"C:/path/to/file/anywhere/on/computer/module.py")

모듈 다시 가져 오기

대화식 인터프리터를 사용할 때 모듈을 다시로드해야 할 수 있습니다. 이는 모듈을 편집하고 최신 버전을 가져 오려는 경우 또는 기존 모듈의 요소를 원숭이 패치하여 변경 사항을 되돌리려는 경우에 유용 할 수 있습니다.

되돌리려면 모듈을 다시 import 수는 없습니다 .

import math
math.pi = 3
print(math.pi)    # 3
import math
print(math.pi)    # 3

이는 인터프리터가 가져 오는 모든 모듈을 등록하기 때문입니다. 그리고 모듈을 다시 가져 오려고 할 때, 통역사는 그것을 레지스터에보고 아무 것도하지 않습니다. 다시 import 가 어려운 이유는 레지스터에서 해당 항목을 제거한 후에 import 를 사용하는 것입니다.

print(math.pi)    # 3
import sys
if 'math' in sys.modules:  # Is the ``math`` module in the register?
    del sys.modules['math']  # If so, remove it.
import math
print(math.pi)    # 3.141592653589793

그러나 더 간단하고 간단한 방법이 있습니다.

파이썬 2


reload 함수를 사용하십시오.

파이썬 2.x 2.3
import math
math.pi = 3
print(math.pi)    # 3
reload(math)
print(math.pi)    # 3.141592653589793

파이썬 3


reload 함수가 importlib 로 이동되었습니다.

Python 3.x 3.0
import math
math.pi = 3
print(math.pi)    # 3
from importlib import reload
reload(math)
print(math.pi)    # 3.141592653589793


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow