pythonDay04 模組 列表生成式

2021-09-25 23:02:46 字數 4631 閱讀 3983

乙個模組就對應乙個py檔案

sudo pip install pygame  python2安裝乙個pygame模組

sudo pip3 install pygame python3安裝乙個pygame模組

安裝完成後,在互動模式中,import pygame 如果沒有報錯,就說明安裝成功了,如果報錯了,就說明安裝沒有成功。

自定義模組:

sendmsg.py

def test1():

print("傳送訊息中!!!!")

def test2():

print("----test2-----")

main.py

import sendmsg

sendmsg.test2()

sendmsg.test1()

python直譯器 會將匯入的模組 解釋成 位元組碼 然後專門存到乙個快取檔案***x.pyc中去。當主檔案修改時,python解析器只需要重新解釋主檔案,直接呼叫模組的快取檔案就可以了。

main.py寫法二:

from sendmsg import test1,test2 #也可以這樣寫 表示從sendmsg.py中匯入 test()函式

#或者寫成 from sendmsg import *

test1() #這樣匯入之後,就不需要寫之前sendmsg

test2()

建議少使用*,因為用這種方式的匯入的兩個模板中假如有同名的方法,那麼後面匯入的模板的方法將覆蓋之前匯入的模板的方法。

import time as tt #給模組起乙個小名

tt.sleep(3)

#注意當你匯入乙個模組的時候,直譯器會先搜尋當前路徑下有沒有這個模組,然後才會到系統儲存模組的路徑下面尋找,所以寫檔名時最好不要寫和 系統模組名相同的名字。

並且當你匯入乙個模組的時候,實際上,會將這個模組從頭到尾執行一遍。

如何既在模組中對函式進行測試,又能在主函式匯入模組時,讓測試用的語句不要執行呢?

sendmsg.py

def test1():

print("----test1----")

def test2():

print("-----test2----")

if __name__ == "__main__":#當直接用python3執行該檔案時,__name__的值為 "__main__"當將該檔案作為模組匯入時,__name__的值為 「sendmsg」

test1()

test2()

大程式的套路:

import ***

class classname(object):

def ***():

***x

def main():

***x

if __name__ == '__main__':

main()

sendmsg.py

__all__ = ["test1","test2","test"] 

#該變數必須是乙個列表,在裡面寫入你允許別人使用的函式。這樣別人在以from sendmsg import *的方式匯入模組之後,只能使用特定的函式。如果別人使用 import sendmsg 的方式匯入模組則沒有任何作用。

def test1():

pass

def test2():

pass

def test3():

pass

def test4():

pass

class test(object):

pass

main.py

from sendmsg import *

test1()

test3() #error 不能呼叫

包:

將多個模組放在乙個資料夾中,並且在資料夾中建立乙個名為 __init__.py的檔案,這樣的乙個資料夾就成為了包。如果沒有__init__.py檔案,在python3中 通過import 資料夾名 或者 from 資料夾名 import *可以直接匯入這個包 ,但是在python2中卻行不通,有了__init__.py檔案,在python2中也可以這樣匯入乙個包。

在__init__.py檔案中,通過寫入乙個__all__ = ["模組名"] ,來設定通過from 資料夾名 import *的方式允許使用的包中的模組名,如果沒有寫這個變數,乙個模組也不能用。或者如果即使寫了這個變數,但是通過 import 資料夾名的方式來匯入模組,也不能呼叫任何模組

當你匯入包時,__init__.py中的所有**都會被執行!

__init__.py

__all__ = ['sendmsg'.'recmsg']
那麼如何才能在以 import 資料夾名的方式 匯入包的時候也可以 呼叫模組中的函式成功呢?

我們需要在 __init__.py 檔案中,再匯入 我們需要 用到的 模組。

__init__.py

__all__ = ['sendmsg'.'recmsg']

from . import sendmsg匯入當前路徑下的sendmsg 即 bao/sendmsg

from . import sendmsg

如何檢視系統的模組在什麼路徑呢?在互動模式下,import os,然後os.__file__ 就會返回該路徑。

那麼如何將乙個包或者乙個模組,安裝到系統目錄下呢?

發布模組:

在包的同一目錄下,建立乙個setup.py

from distutils.core import setup #setup 是乙個 函式

setup(name = "dongge",version = "1.0",description = "dongge's module",author = "dongge",py_modules = ['包名.模組名','suba.bb','suba.cc'])

#通過命名引數的方式給setup傳參

在該目錄下,敲命令:python3 setup.py build

python3 setup.py sdist

在該資料夾中,輸入命令sudo python3 setup.py install 就可以安裝此包 到 系統中去了

給程式傳引數.py

import sys

print(sys.ar**) #輸出['給程式傳引數.py']

"""sys.ar** 用乙個列表來接受執行時傳給程式的引數,注意第0個引數一定是程式的名字「」「

import sys

name = sys.ar**[1]

print("熱烈歡迎,%s的到來"%name)

range的注意點:range本身就是乙個列表,range(10,18) 表示[10,11,12,13,14,15,16,17]這個前閉後開區間。range的第三個引數是步長,例如:range(10,18,2) 不寫預設為1

range有什麼風險?在python2中,1.range(1,100000) 申請了乙個很大的記憶體空間,導致memoryerror 2.申請了乙個很大的記憶體空間,最後忘了用,浪費了。

python3中並沒有什麼實際風險。pyhton3中例如rang(1,100000)並不會先占用大量記憶體空間來儲存乙個列表,而是,你要用這個列表的那個值,現生成乙個值返回給你。

a = [i for i in range(1,18)]

#每迴圈一次就將i的值放入到列表中去

#列表生成式

print(a)

#[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]

b = [11 for i in range(1,18)]

#每迴圈一次就將11放入到列表中去,所以列表中有17個11

c = [i for i in range(10) if i%2 == 0]

print(c)

#[0,2,4,6,8]

d = [i for i in range(3) for j in rang(2)]

#每執行一次for i 迴圈,都要執行 for j 迴圈 到結束

print(d) #[0,0,1,1,2,2]

集合:

用花括號定義的資料型別除了字典還有集合。

c = 

print(c)

#集合中不能有重複的元素

列表如何去重?

方法一:

a = [11,22,33,44,11,22,33]

b =

for i in a:

if i not in b:

方法二:

a = [11,22,33,44,11,22,33]

f = set(a)

b = list(f)

小技巧:在互動模式下

輸入乙個集合b,然後b. 按下tab鍵可以檢視所有集合的相關操作,help(b.***)可以檢視某操作的用法。

python day14 常用模組

通過一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式 hash主要用於資訊保安領域中的加密演算法。把一些不同長度的資訊轉化成雜亂的128位編碼,叫做hash值,也可以說hash就是找到一種資料內容和資料存放位址之間的對映關係 popen 方法 subprocess.run sleep 10 s...

Python Day1 操作列表 (2)

1.使用列表的一部分 切片 players chars akk myus sss lor print players 0 3 print players 1 4 print players 4 print players 1 print players 3 chars akk myus akk my...

python 模組詳解 python day 22

第三方模組 擴充套件模組 沒在安裝python直譯器的時候安裝的那些功能 自定義模組 你寫的功能如果是乙個通用的功能,那你就把它當做乙個模組 內建模組 安裝python直譯器的時候跟著裝上的那些方法 import my module 要匯入乙個py檔案的名字,但是不加.py字尾名 import my...