python import_Python中import机制
Python語言中import的使用很簡單,直接使用import module_name語句導入即可。這里我主要寫一下"import"的本質。
Python官方定義:Python code in one module gains access to the code in another module by the process of importing it.
1.定義:
模塊(module):用來從邏輯(實現一個功能)上組織Python代碼(變量、函數、類),本質就是*.py文件。文件是物理上組織方式"module_name.py",模塊是邏輯上組織方式"module_name"。
包(package):定義了一個由模塊和子包組成的Python應用程序執行環境,本質就是一個有層次的文件目錄結構(必須帶有一個__init__.py文件)。
2.導入方法
#導入一個模塊
importmodel_name#導入多個模塊
importmodule_name1,module_name2#導入模塊中的指定的屬性、方法(不加括號)、類
from moudule_name import moudule_element [as new_name]
方法使用別名時,使用"new_name()"調用函數,文件中可以再定義"module_element()"函數。
3.import本質(路徑搜索和搜索路徑)
moudel_name.py
#-*- coding:utf-8 -*-
print("This is module_name.py")
name= 'Hello'
defhello():print("Hello")
module_test01.py
#-*- coding:utf-8 -*-
importmodule_nameprint("This is module_test01.py")print(type(module_name))print(module_name)
運行結果:
E:\PythonImport>python module_test01.py
Thisismodule_name.py
Thisismodule_test01.py
在導入模塊的時候,模塊所在文件夾會自動生成一個__pycache__\module_name.cpython-35.pyc文件。
"import module_name" 的本質是將"module_name.py"中的全部代碼加載到內存并賦值給與模塊同名的變量寫在當前文件中,這個變量的類型是'module';
module_test02.py
#-*- coding:utf-8 -*-
from module_name importnameprint(name)
運行結果;
E:\PythonImport>python module_test02.py
Thisismodule_name.py
Hello
"from module_name import name" 的本質是導入指定的變量或方法到當前文件中。
package_name / __init__.py
#-*- coding:utf-8 -*-
print("This is package_name.__init__.py")
module_test03.py
#-*- coding:utf-8 -*-
importpackage_nameprint("This is module_test03.py")
運行結果:
E:\PythonImport>python module_test03.py
Thisis package_name.__init__.py
Thisis module_test03.py
"import package_name"導入包的本質就是執行該包下的__init__.py文件,在執行文件后,會在"package_name"目錄下生成一個"__pycache__ / __init__.cpython-35.pyc" 文件。
package_name / hello.py
#-*- coding:utf-8 -*-
print("Hello World")
package_name / __init__.py
#-*- coding:utf-8 -*-#__init__.py文件導入"package_name"中的"hello"模塊
from . importhelloprint("This is package_name.__init__.py")
運行結果:
E:\PythonImport>python module_test03.py
Hello World
Thisis package_name.__init__.py
Thisis module_test03.py
在模塊導入的時候,默認現在當前目錄下查找,然后再在系統中查找。系統查找的范圍是:sys.path下的所有路徑,按順序查找。
4.導入優化
module_test04.py
#-*- coding:utf-8 -*-
importmodule_namedefa():
module_name.hello()print("fun a")defb():
module_name.hello()print("fun b")
a()
b()
運行結果:
E:\PythonImport>python module_test04.py
Thisismodule_name.py
Hello
fun a
Hello
fun b
多個函數需要重復調用同一個模塊的同一個方法,每次調用需要重復查找模塊。所以可以做以下優化:
module_test05.py
#-*- coding:utf-8 -*-
from module_name importhellodefa():
hello()print("fun a")defb():
hello()print("fun b")
a()
b()
運行結果:
E:\PythonImport>python module_test04.py
Thisismodule_name.py
Hello
fun a
Hello
fun b
可以使用"from module_name import hello"進行優化,減少了查找的過程。
5.模塊的分類
內建模塊
可以通過 "dir(__builtins__)" 查看Python中的內建函數
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError','BytesWarning','ChildProcessError','ConnectionAbortedError','ConnectionError','ConnectionRefusedError','ConnectionResetError','DeprecationWarning','EOFError','Ellipsis','EnvironmentError','Exception','False','FileExistsError','FileNotFoundError','FloatingPointError','FutureWarning','GeneratorExit','IOError','ImportError','ImportWarning','IndentationError','IndexError','InterruptedError','IsADirectoryError','KeyError','KeyboardInterrupt','LookupError','MemoryError','NameError','None','NotADirectoryError','NotImplemented','NotImplementedError','OSError','OverflowError','PendingDeprecationWarning','PermissionError','ProcessLookupError','RecursionError','ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning','SystemError','SystemExit','TabError','TimeoutError','True','TypeError','UnboundLocalError','UnicodeDecodeError','UnicodeEncodeError','UnicodeError','UnicodeTranslateError','UnicodeWarning','UserWarning','ValueError','Warning','WindowsError','ZeroDivisionError','_','__build_class__','__debug__','__doc__','__import__','__loader__','__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr','classmethod','compile','complex','copyright','credits','delattr','dict','dir','divmod','enumerate','eval','exec','exit','filter','float','format','frozenset','getattr','globals','hasattr','hash','help','hex','id','input','int','isinstance','issubclass','iter','len','license','list','locals','map','max','memoryview','min','next','object','oct','open','ord','pow','print','property','quit','range','repr','reversed','round','set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
非內建函數需要使用"import"導入。Python中的模塊文件在"安裝路徑\Python\Python35\Lib"目錄下。
第三方模塊
通過"pip install "命令安裝的模塊,以及自己在網站上下載的模塊。一般第三方模塊在"安裝路徑\Python\Python35\Lib\site-packages"目錄下。
自定義模塊
總結
以上是生活随笔為你收集整理的python import_Python中import机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python统计字符在文件中出现的次数_
- 下一篇: python开多少进程合适_用了pyth