日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python导入标准库对象的语句_Python项目中如何优雅的import

發(fā)布時(shí)間:2025/3/20 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python导入标准库对象的语句_Python项目中如何优雅的import 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python項(xiàng)目中如何優(yōu)雅的import

前言

之前有一篇關(guān)于Python編碼規(guī)范的隨筆, 但是寫的比較雜亂, 因?yàn)樘岬搅薸mport語句, 在篇文章中, 我專門來講Python項(xiàng)目中如何更好的import

標(biāo)準(zhǔn)庫與第三方庫的導(dǎo)入

導(dǎo)入一個(gè)模塊, 如果模塊名太長, 則使用import as; 如果是導(dǎo)入子模塊, 則使用from import as

如果需要導(dǎo)入類的, 則使用from import導(dǎo)入類, 如果要導(dǎo)入某一個(gè)模塊的多各類的話, 則類名使用逗號(hào)分隔

示例

導(dǎo)入sklearn中的svm中的SVC類

import sklearn.svm

from sklearn.svm import SVC

導(dǎo)入numpy中的random模塊

import numpy.random as nprand

總結(jié): 如果導(dǎo)入類的話, 一定是import somemod 和 from somemod import class兩個(gè)語句組成的; 如果導(dǎo)入一個(gè)不同的模塊的則, 則一般就是import somemod

項(xiàng)目模塊導(dǎo)入

項(xiàng)目目錄

wxoa ?? tree -Cl

.

├── main.py

├── test

└── wxoa

├── __init__.py

├── __pycache__

│ └── __init__.cpython-35.pyc

├── entity

│ ├── __init__.py

│ ├── __pycache__

│ │ ├── __init__.cpython-35.pyc

│ │ └── user.cpython-35.pyc

│ └── user.py

└── util

├── __init__.py

├── __pycache__

│ ├── __init__.cpython-35.pyc

│ └── ioutil.cpython-35.pyc

└── ioutil.py

7 directories, 12 files

主程序?yàn)閙ain.py, 項(xiàng)目名為wxoa, 存放源代碼的目錄也叫wxoa, 也是一個(gè)python package

導(dǎo)入規(guī)則(在第一次寫這篇文章的時(shí)候我喜歡相對導(dǎo)入(以為google的sklearn是采用這種方式的, 但是在test中使用的是絕對導(dǎo)入(sklearn在test.py函數(shù)中直接使用絕對路徑, 因?yàn)橐呀?jīng)寫好的sklearn已經(jīng)安裝到了python路徑中了(sklearn的test是在這種情況下進(jìn)行測試的), 而一般我們的項(xiàng)目是沒有安裝到python路徑中)), 但是官方建議絕對導(dǎo)入, 如果要使用絕對導(dǎo)入有不報(bào)錯(cuò)的話, 我的方法是這只軟鏈接)

存在python package(所以這里不包含main.py)中的python文件包導(dǎo)入的規(guī)則

使用from . import somemod導(dǎo)入當(dāng)前目錄下的模塊

使用from ..somemod import submod導(dǎo)入上一級目錄的somemod目錄下的submod模塊

如果名稱太長則使用as縮減

不在python package(就是這里的main.py和test目錄下的文件)中的python文件的導(dǎo)入規(guī)則

使用from somemod.submod.subsubmod import some導(dǎo)入, 注意這里不使用.號(hào)起頭, 關(guān)于使用., ..的作用在下面會(huì)說明, 如果使用了.起頭則會(huì)報(bào)錯(cuò), 提示父模塊沒有加載

其中somemod就是我們的源碼的python package包名, 在這里就是wxoa

如果名稱太長則使用as縮減

關(guān)于.和..

在包導(dǎo)入中, 如果出現(xiàn)了.和..起頭, 則會(huì)涉及到package(不是module)的關(guān)系, ..表示上一級package, 這個(gè)上一級package需要有一個(gè)__init__.py才是合法的, .表示當(dāng)前package, 當(dāng)前package需要有一個(gè)__init__.py才是合法的

.和..涉及到的python程序的啟動(dòng)項(xiàng), 這里會(huì)比較復(fù)雜, 簡而言之, 在涉及到..表示的上級package的時(shí)候, 如果python程序的啟動(dòng)文件就是在這里則Python解釋器不會(huì)認(rèn)為..表示的上級目錄的package是一個(gè)合法的目錄, 盡管有__init__.py文件, 因此會(huì)報(bào)錯(cuò); 這樣就給代碼測試帶來的麻煩, 不能直接在使用..和.中直接測試代碼, 也就是

if __name__ == '__main__':

pass

因?yàn)檫@樣已啟動(dòng)程序就會(huì)報(bào)錯(cuò), 所以報(bào)錯(cuò), 在下面提出解決方案

關(guān)于.和..帶來的麻煩的解決方案

和上面展示的項(xiàng)目目錄一樣, 主啟動(dòng)程序, 項(xiàng)目源代碼(主要是模塊), 測試代碼分離, main.py在項(xiàng)目目錄下, test(普通的文件夾, 存放python測試文件, 運(yùn)行的時(shí)候cd ..目錄, 也就是在醒目目錄下, 使用python -m test.test1 執(zhí)行程序)也在項(xiàng)目目錄下, 項(xiàng)目源代碼就是wxoa

在main.py和test目錄下的python文件中導(dǎo)入自己項(xiàng)目中的模塊, 就不要使用.和..起頭了, 否則會(huì)報(bào)錯(cuò), 而是使用絕對路徑, 如這里的, from wxoa.service import user

關(guān)于import

import在默認(rèn)的情況下是查看__name__屬性判斷是否加載的, 如果這個(gè)模塊是__main__則它就是top level(頂級)的, 沒有上一級目錄, 所以from .. import ....是會(huì)把報(bào)錯(cuò)的, 在python3中的添加了__package__來解決這個(gè)問題, 在執(zhí)行有from ..import ...的文件的時(shí)候, 使用python -m pkg.modname 執(zhí)行modname.py文件, 將__package__從None改為pkg.modname才能正確的運(yùn)行程序, 當(dāng)__package__生效的時(shí)候, __name__在導(dǎo)入模塊的時(shí)候會(huì)被忽略

不建議使用全路徑導(dǎo)入, 這樣情況必須安裝第三方庫才能使用, 否則一定會(huì)出現(xiàn)import錯(cuò)誤, 提示路徑找不到

關(guān)于Python編程

雖然Python是面向?qū)ο缶幊? 但是通過開源項(xiàng)目you-get發(fā)現(xiàn), 可以將Python理解為面向模塊開發(fā), 模塊在Python也是對象, 面向模塊開發(fā)會(huì)讓一切都輕松起來, 模塊中定義的全局變量為其屬性, 模塊中的函數(shù)為其方法, 如果多個(gè)函數(shù)有聯(lián)系, 再考慮將其封裝到一個(gè)類中, 在調(diào)用該模塊的時(shí)候, 一般通過一個(gè)模塊函數(shù)返回對象, 不用讓用戶過多的考慮__init__()方法的參數(shù), 直接在模塊函數(shù)中配置好信息返回即可

加入我們開發(fā)一個(gè)util工具箱, 則建立一個(gè)util包(和Java的包一樣), 在里面創(chuàng)建strings.py, log.py等模塊(類似于Java中的一些.java文件), 在log.py模塊文件中定義一些需要的函數(shù), 函數(shù)之間有某種聯(lián)系或者為了方便起見可以定義類封裝

關(guān)于模塊設(shè)計(jì)

示例:

創(chuàng)建一個(gè)工具包, 該包中有關(guān)于字符串和IO操作的內(nèi)容

首先考慮都放在一個(gè)模塊文件中, 文件他們都是工具, 放在util.py中是可以的

接著考慮到我們不需要?jiǎng)?chuàng)建strings和io的類, 因?yàn)楣ぞ呶覀冎恍枰粋€(gè)就可以, 這與模塊是一樣的特性, 所以將所有的操作寫成函數(shù), 如果這樣的話, 模塊中沒有類對函數(shù)進(jìn)行分類, 函數(shù)都在util.py中會(huì)很混亂, 所以將util.py升級為util包, 創(chuàng)建strings.py和io.py, 將對應(yīng)的函數(shù)放入對應(yīng)的模塊文件中

示例1:

坦克游戲

考慮放到game.py模塊下

tank, bullet, wall等都是游戲中的對象, 并且他們與工具類不同, 他們不只是一個(gè)對象, 而是可以創(chuàng)建很多, 與模塊特性不同, 所有把他們都寫成類, 在game文件中通過類劃分是可行的方案

總結(jié)

以上是生活随笔為你收集整理的python导入标准库对象的语句_Python项目中如何优雅的import的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。