網站首頁 編程語言 正文
簡介
- Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。你可以將它理解成腳本語言,大多情況我也是將它作為寫腳本工具的一個方式。
- python 目前存在 python2 和 python3 兩個大版本,至于他們的區別我們沒必要深究,很多新的特性都是在 python3 中引入的,另外 python2 已經停止維護了,所以該選擇誰你應該清楚了。
模塊化
- 我們在學習一門語言的時候可以將所有的 demo 放在同一個文件夾,這樣方便相互查找,但是在企業級的項目中往往會出現很多功能,正常會根據功能進行分包管理,在大的項目中更有可能分模塊管理,不管是分包還是分模塊都需要注意一個問題就是如何引用的問題, python 會默認在當前腳本所在文件夾下尋找所需模塊,如果當前沒有會去其他系統管理模塊的地方進行尋找,很明顯我們自己的分包分模塊的自然不會被找到,這就需要我們進行相應的處理。
- 不僅僅是 python 語言中, 模塊這個概念是凌駕于語言之上,大體上應該分為三類
- 內置模塊 , 在 python中我們可以通過?
help('modules')
?來查看所有的內置模塊
- - ? 第三方模塊 , 就是別人封裝的工具 ,python中可以通過 `pip install` , Java中通過 Maven管理安裝。
- - ? 剩下的就是我們自定義模塊了,不是所有牛奶都是特侖蘇,也不是所有人封裝的都叫做第三方模塊,我們個人的封裝局限很大僅使用我們自己的項目。
模塊導入
-
模塊導入也很方便,除了第三方模塊我們需要 通過包管理工具安裝一下才能導入,其他模塊我們都可以直接導入。
-
import module_a
?: 導入module_a 模塊 -
from module_b import module_b_child
?: 從 module_b 導入他的方法或者導入他的子模塊 -
import module_c as tom_util
?: 重命名導入的模塊 -
from module_tom import *
?: 導入module_tom下所有模塊
-
- 現在項目中存在兩個目錄分別為?
core
?、?user
?, core 目錄中存在的?token_util.py
?是我們獲取 web 開發中登錄 token的, 而 user 目錄下則是管理用戶的腳本,這個時候 user_util.py 依賴與 token_util.py ,那么我們就需要?import token_util
?。
- 果不其然出現了經典的?
No module named 'token_util'
?, 上面我已經說了他只會去尋找默認當前路徑和系統模塊路徑的,更換項目結構是不可能的,那么我們該如何引入 token_util 呢 ?
?import sys ?print(sys.path) ?sys.path.append('../core') ?import token_util
- 通過?
sys
?模塊將 module 模塊管理路徑打印就能發現只有全局的和當前路徑,我們可以將我們需要引入的包的路徑注冊到模塊管理路徑中,這樣我們就可以引用了。
包
- 上面導入自定義模塊顯得很麻煩,隨著項目成長會分很多文件夾用來表示不同功能,這里文件夾就是包的概念。但是文件夾和包還是不太一樣的。只需要在文件夾下存在一個?
__init__.py
?就會變成包了。 這個文件就是你在調用包中模塊是自動調用,這個文件內容可以為空哦 - 好像有了包的概念還是解決不了上面手動導入的問題,沒錯這里始終逃不掉需要手動導入的,我們可以將項目的根路徑導入到系統路徑中,這樣我們在導入模塊是只需要從根路徑出發導入即可。
- 我們可以寫個腳本獲取跟路徑并注冊到系統路徑中
?import os ?import sys ?base_dir=os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.pa ?th.dirname(os.path.abspath(__file__)))))) # 取到路 ?徑/Users/alex/Documents/work/PyProjects/py8days_camp ?print(base_dir) ?sys.path.append(base_dir) # 添加到sys.path?
- 如果你還是覺得麻煩,不用擔心?
pycharm
?會幫助我們解決這個問題,我們通過pycharm
?打開項目時會自動將項目的跟路徑注冊到系統路徑中。就像Idea 打開Java項目自動會管理 Package 空間一樣,
原文鏈接:https://juejin.cn/post/7139708627878674463
相關推薦
- 2023-03-13 pandas按某列降序的實現_python
- 2022-12-25 React不使用requestIdleCallback實現調度原理解析_React
- 2022-07-25 Python實現文件及文件夾操作大全_python
- 2022-04-15 MAUI使用Maui.Graphics.Controls繪制控件詳解_實用技巧
- 2022-04-27 Python學習筆記之字典,元組,布爾類型和讀寫文件_python
- 2022-11-10 利用C++實現獲取文件夾下所有文件名_C 語言
- 2022-01-13 出現/usr/lib64/erlang/erts-10.3/bin/beam.smp: error
- 2022-05-28 Entity?Framework?Core表名映射_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支