乙個模組就對應乙個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...