导入模组 import
在 Python 里,“模组”是一个存在于任意程序码中的文件,任何 Python 的程序码也都可以当作模组使用,透过 import 陈述式,可以引用其他模组的程序码,进一步使用其他模组的程序和变数,让程序更精简更好维护。
快速导览:import、as 替模组新增别名、建立自己的模组、相对路径与绝对路径
本篇范例前半段 ( import、新增别名 ) 可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab ),后半段建议使用“本机 Python 环境”实作。
import
import 陈述式最简单的用法就是“import 模組名稱”,模组名称是不包含 .py 的名称,举例来说,下方的程序码导入 datetime 模组,就能使用里面 datetime 和 date 的方法,显示目前的时间与日期 ( 其他页面有更多标准函数库的介绍 )。
import datetime
print(datetime.datetime.now()) # 2021-10-18 06:39:48.998396
print(datetime.date.today()) # 2021-10-18
此外,也可以使用“from 模組名稱 import 方法”,单纯导入模组中的某一段程序,举例来说,下方的程序码只导入了 date 方法。
from datetime import date
print(date.today()) # 2021-10-18
as 替模组新增别名
如果导入的模组名称和原本程序码里使用的相同,就必须修改其中一个的名称 ( 修改模组或自己的程序 ),这时可以将模组使用“别名”的方式导入,就不会更动到自己的程序,使用的方法为“import 模組 as 別名”,举例来说,下方的程序码将导入 datetime 模组使用“as”赋予 datetime 一个别名 dd,使用时只要呼叫 dd,就等同呼叫 datetime。
import datetime as dd
print(dd.datetime.now()) # 2021-10-18 06:39:48.998396
print(dd.date.today()) # 2021-10-18
建立自己的模组
每一支 Python 程序都可以作为模组,所以可以将共用的程序打包变成模组,再透过其他程序引用,举例来说,下方有两支 Python 程序,透过 main.py 导入 ok.py,执行 ok.py 里的 talk 函数。
ok.py
def talk(msg): print(msg)main.py
import ok ok.talk('hi') # hi
如果自己的程序里有多个函数或变数,也可以透过“from 模組名稱 import 方法”单独导入,下方的程序只导入了 count 函数和 name 变数。
ok.py
def talk(msg): print(msg) def count(x, y): print(int(x)+int(y)) name = 'oxxo' age = 18main.py
from ok import count from ok import name count(1,2) # 3 print(name) # oxxo
模组的路径
Python 导入模组的路径,支援“绝对路径”和“相对路径”两种,主要的写法如下:
绝对路径:以“目前文件所在的文件夹”为根目录
import a from a import b举例来说,将 ok.py 放在与 main.py 同层的 module 的 test 文件夹里,导入时就必须要加上路径“module.test”。
from module.test import ok ok.count(1,2) # 3 print(ok.name) # oxxo相对路径:相对于“目前文件所在的文件夹”的路径,使用“.”作为区隔。
from . import a # 同一層目錄 from .. import a # 上一層目錄 from ... import a # 上上層目錄 from .a import b使用相对路径比较容易发生问题,常遇见的就是“attempted relative import with no known parent package”,原因出在执行时将执行的 .py 当作最底层,因此就发生找不到父元素 ( parent package ) 的状况,参考 stackoverflow 的解法 ( 链接 1、链接 2 ),执行采用输入指令的方式,输入
python -m 目錄.檔名,就可以正常执行。
微信扫码关注
抖音扫码关注