1. 程式人生 > >python學習筆記:sys、random模組、模組相關知識、包

python學習筆記:sys、random模組、模組相關知識、包

#sys模組中常用的屬性
1、version:python版本
2、version_info:返回描述python版本的元組,可以直接用於判斷python版本
3、platform:作業系統版本
    win10 64位下,返回字串"win32"
4、path:python的檔案搜尋路徑,後面會用到
5、argv:命令列呼叫python指令碼時輸入的引數,用於命令列操作時輸入引數
6、builtin_module_names:內建模組的名字列表

#sys模組中的常用方法
1、exit:退出程式最安全可靠的方式,exit(0)代表正常退出;用ctrl+d可以退出,其代表讀入結束;quit()也可以退出
2、getrecursionlimit:獲取遞迴限定
3、setrecursionlimit:設定遞迴深度

#自定義模組並匯入
1、模組名必須符合變數名命名規則,模組的檔名為:模組名.py
2、在匯入自定義模組時,會匯入模組的程式碼,然後根據程式碼建立變數
3、使用方法和系統內建模組使用方法完全一致

#模組路徑的搜尋順序
1、當前工作路徑(程式執行時所在的路徑) Q:是當前工作路徑呢還是原始檔所在路徑
2、sys.path所提供的路徑
3、系統內建模組

可以呼叫sys.path.append()函式將模組所在路徑匯入到系統路徑中
    
#模組的載入過程:模組匯入時,其所有語句會執行;當重複匯入時,不會重新執行模組內的語句

#重新載入模組:當載入之後修改了模組的原始檔時,需要重新匯入才能生效
    import imp
    imp.reload(module_name)

#模組的module屬性
      1、__name__:繫結模組名稱的字串
    當此模組作為主模組時,__name__繫結'__main__';否則math.__name__ = 'math',sys.__name__ = 'sys',這些屬性是系統自行生成的
    可以同於判斷模組是被匯入還是被執行
      2、__file__:繫結模組的原始檔路徑
      3、__all__列表:存放可匯出屬性的字串列表
    當from xxx import * 時,只是匯入__all__內的屬性及方法,系統不會自動生成,需要自行定義。用於當使用from xxx import *是,只能匯入部分函式與屬性
      4、__doc__:模組和屬性、函式的文件字串

#模組的隱藏模組
    模組中以_開頭的變數為模組的隱藏屬性,在使用from xxx import *時不會被匯入

#python執行過程
    先搜尋路徑開啟模組
    判斷是否有模組對應的.pyc檔案,如果.pyc檔案比.py檔案新,則直接載入.pyc檔案
    否則,用模組編譯成mymod.pyc然後在python解釋執行器中執行        

#random模組函式import random as R
    R.random():返回[0,1)之間的隨機實數,用它乘以整數可以得到n以內的隨機數
    R.uniform(a,b):返回區間[a,b)區間內的實數
    R.randrange([start,]end[,step])
    R.choice(iterable):從可迭代物件中隨機抽取一個元素
    R.shuffle(seq[,random]):隨機指定序列順序
    R.sample(population,k):從population中隨機獲取k個元素,返回列表;速度及其快速,推薦使用
    R.getrandbits(n):獲取一個每個位都是隨機0、1的n位二進位制數
    R.seed(a=None):設定隨機種子,如果隨機種子一定,則誰中是一定的

#練習題:模擬鬥地主發牌
    import random
    l = list()
    def fapai():
        global l
        l = [x+1 for x in range(54)]
        random.shuffle(l)
    
    def dayinpai(i):
        #print((i-1) // 13)
        #return 
        if i == 53:
            print("xiaowang",end=' ')
            return 
        elif i == 54:
            print("dawang",end=' ')
            return 
        elif (i-1) // 13 == 0:
            print("\u2660",end='')
        elif (i-1) // 13 == 1:
            print("\u2663",end='')
        elif (i-1) // 13 == 2:
            print("\u2665",end='')
        elif (i-1) // 13 == 3:
            print("\u2666",end='')
    
        if (i-1)%13+1 == 11:
            print("J",end=' ')
        elif (i-1)%13+1 == 12:
            print("Q",end=' ')
        elif (i-1)%13+1 == 13:
            print("K",end=' ')
        else:
            print("%d"%(((i-1)%13)+1),end=' ')

    def myprint(x):
        def fn():
            for i in range((x-1)*17+1,x*17+1):
                dayinpai(l[i])
        fn()
    

    fapai()
    str1 = input()
    myprint(1)
    str1 = input()
    myprint(2)
    str1 = input()
    myprint(3)

    #用random.shuffle()函式對列表進行隨機打亂
    
#包(模組包)    package
    將模組以資料夾形式進行分組管理的方法
#包的匯入
    import package_name [as new_name]
    import package_name.sub_package_name.module_name [as new_name]
    from package_name import module_name [as new_name]
    from package_name.module_name import variable_name [as new_name]
    
    #匯入包內所有包和模組    
    from package_name import *
    from package_name.module_name import *

#__init__.py
    是常規包內必須存在的檔案,會在包載入時自動呼叫
    作用(通常這樣用):
    在內部填寫文件字串
    在__init__.py檔案內載入包所依賴的包或模組
    無論以什麼方式匯入包,都會執行上一級所有包的__init__.py檔案

#__init__.py內的__all__列表
    作用:用於記錄此包中有哪些模組需要匯入,需要自行建立
    用from xxx import *時,只查詢__all__列表中的模組或者子包

#當在子模組中呼叫父包中的函式時,用相對匯入
    .表示本級目錄
    ..上級目錄
    ...上兩級目錄
    以此類推

#包的載入
    1、可以將路徑新增到sys.path中
    2、可以將此包安裝到sys.path指定路徑中