Python 全棧開發 python模組與包

2022-08-10 03:36:11 字數 4008 閱讀 4877

模組是乙個包含所有你定義函式和變數的檔案,即:乙個python檔案就可以稱之為乙個模組。

在python中,模組的使用方式都是一樣的,細分可以分為四個通用類別:

#

1、從檔案級別組織程式,更方便管理

隨著程式的發展,功能越來越多,為了方便管理,我們通常將程式分成乙個個的檔案,這樣做程式的結構更清晰,方便管理。

這時我們不僅僅可以把這些檔案當做指令碼去執行,還可以把他們當做模組來匯入到其他的模組中,實現了功能的重複利用

#2、拿來主義,提公升開發效率

#ps:

如果你退出python直譯器然後重新進入,那麼你之前定義的函式或者變數都將丟失,

因此我們通常將程式寫到檔案中以便永久儲存下來,

需要時就通過python test.py方式去執行,此時test.py被稱為指令碼script。

import  python內建函式 time  模擬跑了一分鐘(test.py)

#

!/usr/bin/env python3

#encoding: utf-8

#by fixdq

import

time

defrunning():

time.sleep(60)    # 秒

print('剛剛

跑了鐘')

running()

1. import 語句可以在程式中的任何位置使用(一般都放在檔案的頭部),多次匯入同乙個模組,只會執行一次

2.在第一次匯入模組會做三件事

3.被匯入模組有獨立的命名空間

每個模組都是乙個獨立的命名空間,定義在這個模組中的函式,把這個模組的命名空間當做全域性命名空間,這樣我們在編寫自己的模組時,就不用擔心我們定義在自己模組中全域性變數會在被匯入時,與使用者的全域性變數衝突

4.為模組起別名

起別名的方式對編寫可擴充套件的**很有用

import

time as t

defrunning():

t.sleep(5)

5.在一行匯入多個模組

import sys,os,re

python的from語句讓你從模組中匯入乙個指定的部分到當前命名空間中

1.使用方式

from modname import name1[, name2[, ... namen]]

2.同樣支援 as  別名

from  spam  import read as re

3.一行匯入多個名字

from  spam  import read,read1,money

4.from…import* 語句

把乙個模組的所有內容全都匯入到當前的命名空間

from modname import *

#

大部分情況下我們的python程式不應該使用這種匯入方式,

#因為*你不知道你匯入什麼名字,很有可能會覆蓋掉你之前已經定義的名字。

#而且可讀性極其的差,在互動式環境中匯入時沒有問題。

5.from...import 與import的對比

#

唯一的區別就是:使用from...import...則是將模組中的名字直接匯入到當前的命名空間中,

所以在當前命名空間中,直接使用名字就可以了、無需加字首:模組名

#from...import...的方式有好處也有壞處

好處:使用起來方便了

壞處:容易與當前執行檔案中的名字衝突

#

編寫好的乙個python檔案可以有兩種用途:

一:指令碼,乙個檔案就是整個程式,用來被執行

二:模組,檔案中存放著一堆功能,用來被匯入使用

#python為我們內建了全域性變數__name__,

當檔案被當做指令碼執行時:__name__ 等於'

__main__

'當檔案被當做模組匯入時:

__name__等於模組名

#作用:用來控制.py檔案在不同的應用場景下執行不同的邏輯

if__name__ == '

__main__

':

模組的查詢順序是:

記憶體中已經載入的模組-->內建模組-->sys.path路徑中包含的模組

python檔案中

lib裡面放的是內建模組

擴充套件模組一般在site-packages中

sys.path:注意:搜尋時按照sys.path中從左到右的順序查詢,位於前的優先被查詢,sys.path中還可能包含.zip歸檔檔案和.egg檔案,python會把.zip歸檔檔案當成乙個目錄去處理。

千萬不要自己定義這些你熟悉的模組或關鍵字啊啥的作為自己的模組名

1.什麼是包

#

官網解釋

包是一種通過使用『.模組名』來組織python模組命名空間的方式。

#具體的:包就是乙個包含有__init__.py檔案的資料夾,所以其實我們建立包的目的就是為了用資料夾將檔案/模組組織起來

#需要強調的是:

1. 在python3中,即使包下沒有__init__.py檔案,import

包仍然不會報錯,

而在python2中,包下一定要有該檔案,否則import 包報錯

2. 建立包的目的不是為了執行,而是被匯入使用

記住,包只是模組的一種形式而已,包的本質就是一種模組

2.為什麼使用包

包的本質就是乙個資料夾,那麼資料夾唯一的功能就是將檔案組織起來

隨著功能越寫越多,我們無法將所以功能都放到乙個檔案中,於是我們使用模組去組織功能,

而隨著模組越來越多,我們就需要用資料夾將模組檔案組織起來,以此來提高程式的結構性和可維護性

3.包的使用 import 、form...import..

包的本質就是一種模組,使用方法都是一樣的

import

單獨匯入包名稱時不會匯入包中所有包含的所有子模組

from...import...

需要注意的是from後import匯入的模組,必須是明確的乙個不能帶點,否則會有語法錯誤,

如:from a import b.c是錯誤語法

from...import*

此處是想從包api中匯入所有,實際上該語句只會匯入包api下__init__.py檔案中定義的名字,

我們可以在這個檔案中定義__all___:

#

在__init__.py中定義

x=10

deffunc():

print('

from api.__init.py')

__all__=['

x','

func

','policy

']

4.絕對匯入和相對匯入

包以及包所包含的模組是用來被匯入的,而不是用來執行的。環境變數都是以執行檔案為準的。

絕對匯入:以包的頂級目錄作為起始點,匯入包

相對匯入:以.或..的方式為起點,(只能在乙個包中使用,不能用於不同的目錄)

5.包的分發(大神常用)

_*_ coding:utf-8 _*_

Python 全棧開發 python內建函式

abs 對傳入引數取絕對值 bool 對傳入引數取布林值,none,0,這些引數傳入bool後,返回false all 所有傳入引數為真,才為真 any 任何乙個傳入引數為真,才為真 ascii 自動執行傳入引數的 repr 方法 將物件轉換為字串 bin 接收乙個十進位制,轉換成二進位制 oct ...

Python 全棧開發 python函式高階

函式的巢狀定義 def func1 print from func1 def func2 func2 記憶體位址 print from func2 print func2 func1 函式的巢狀呼叫 比較兩個數的大小 defmax2 x,y if x y return x else returny ...

Python 全棧開發 python元組tuple

什麼是元組 元組就是乙個不可變的列表 並不是列表,只是為了便於記憶 用途 用於存放多個值,只能讀不能二次賦值 表現形式 小括號 中間以逗號分割各個元素 eg tuples a b c d 生成乙個簡單的元組 tuples tuple range 5 print tuples 結果 0,1,2,3,4...