天天看點

[oeasy]python0140_導入_import_from_as_namespace_

作者:oeasy

導入import 回憶上次内容

  • 上次學習了
  • try
  • except
  • 注意要點
  • 半角冒号
  • 縮進
  • 輸出錯誤資訊
  • 有錯就報告
  • 不要隐瞞
  • 否則找不到出錯位置
  • 還可以用traceback把
  • 系統報錯資訊原樣輸出
  • 但是代碼量好多啊
  • 10多 行了
  • 可以把他輸入部分和輸出部分麼?
  • 我們先試試
  • 怎麼引用 其他的py檔案

建構環境

  1. 先建立一個namespace檔案夾
  2. 然後進入這個檔案夾
  3. 建立兩個檔案
  4. 被引用子產品
  • my_module.py
  1. 主體程式
  • oeasy.py
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 然後進去
  • 編輯這兩個檔案
  • vi -o my_module.py oeasy.py
  • -o 是分視窗編輯檔案

效果

  • 結果如下圖所示
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • oeasy.py中輸入
  • import my_module
  • my_module.py中輸入
  • print("in another")

儲存并運作

  • ctrl+k 切換到上方windows
  • ctrl+j 切換到下方windows
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • :wqa
  • 全部儲存并退出
  • w 的意思是先儲存
  • q 退出vim
  • a 代表 all buffers 所有緩存

運作結果

  • 運作的是oeasy.py
  • 輸出了"i am my_module.py"
  • 這說明
  • 導入成功了
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 運作的是
  • oeasy.py
  • oeasy.py中導入了
  • my_module.py
  • my_module.py中
  • 輸出了 "i am my_module.py"
  • 通過導入my_module.py
  • 執行了其中的代碼
  • 導入對應的關鍵詞import
  • 應該如何了解呢?

import

  • 進口(import)
  • 這裡指的是導入子產品
  • 這也是python強大之處
  • 可以導入各種使用的包來使用
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 可以導入多個檔案嗎?

導入多個檔案

  • 上圖建議的是
  • 不同子產品分行導入
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 導入除了可以調用對方代碼
  • 還能做什麼呢?

嘗試引用包内變量

[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 可以在my_module.py中定義變量
  • 在oeasy.py中引用嗎?

嘗試運作

[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • pi沒有找到
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 不慌
  • 好飯不怕晚
  • 不是把這些位元組碼都運作了麼?
  • 但是這裡面有個作用域(namespace)的問題
  • i 屬于 my_module.py
  • 而不屬于oeasy.py
  • 是以直接運作找不到i
  • 那怎麼辦?

修改

  • 隻要說清楚這個i來自于my_module就可以了
  • 用一個點(.)
  • 就可以說明從屬關系
  • 點(.)的意思是的
  • 在 my_module . pi
  • 就是 在my_module 的 i
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • :wa
  • write all
  • 兩個檔案都儲存
  • :!python3 %
  • 用外部指令python3運作目前檔案
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • pi找到了
  • 在my_module.py中
  • pi就是一個标準的變量聲明指派
  • 如果我就想在 oeasy.py 中直接使用 pi
  • 可能麼?

修改

  • 聲明了一個變量pi
  • 并把mymodule.i的值賦給他
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 還有其他寫法嗎?

from...import...

  • 這句話好像好使
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • local()函數
  • 可以檢視本地局部變量
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 本地變量會撞車嗎?

撞車(local name crash)

[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 是以要特别注意盡量
  • 不要使用from xxx import *
  • 這種容易撞車的語句
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 撞車是什麼樣子的!?
  • 可以欣賞一下車禍現場嗎?

車禍現場

[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • my_module.pi 被 math.pi 撞飛了
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 這其實也是名字空間(namespace)的意義

namespace

  • 名字空間是個好主意!
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 那可以給導入進來的變量改名麼?

from ... import ... as ...

[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 可以的
  • 這樣可以把變量名更明确一點
  • 其實就是又起了個名字
  • 然後進行指派
[oeasy]python0140_導入_import_from_as_namespace_

添加圖檔注釋,不超過 140 字(可選)

  • 任務達成!!!
  • 總結一下 !✿✿ヽ(°▽°)ノ✿

總結

  • 我們這次導入了外部的py檔案
  • import my_module
  • 導入一個自己定義的子產品
  • 可以使用my_module中的變量
  • 不能 直接使用 my_module.py檔案中的變量
  • 隻要加my_module.作為字首就可以
  • 直接導入導入變量、函數
  • from my_module import pi
  • 可以導入my_module.pi 并作為pi變量使用
  • from my_module import pi as my_module_pi
  • 導入變量并重命名
  • 上次那個蘋果香蕉統計程式
  • 能封裝成檔案子產品
  • 再導入麼?
  • 下次再說
  • 藍橋->https://www.lanqiao.cn/courses/3584
  • github->https://github.com/overmind1980/oeasy-python-tutorial
  • gitee->https://gitee.com/overmind1980/oeasypython