本文章記錄觀看B站python教程學習筆記和實踐感悟,視頻鏈接:【花了2萬多買的Python教程全套,現在分享給大家,入門到精通(Python全棧開發教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p=6&share_source=copy_web&vd_source=404581381724503685cb98601d6706fb
上節課學習本章總結,章節選擇題,實戰一:計算圓的面積和周長,實戰二:定義學生類錄入5個學生,實戰三:使用面對對象思想實現樂隊演奏,實戰四:使用面向對象思想編寫出租車和家用轎車類,本節課學習模塊的簡介及自定義模塊,模塊的導入,Python中的包,主程序運行,Python中常用的內置模塊及random模塊中常用函數的使用。
下面進入第十章(第一章是python的安裝沒有在博文中體現,這里標注的九是從第二章開始的),關于程序的模塊,我認為是比較重要的一部分,因為后續寫論文編寫代碼都是依靠這個框架搭建。
1.模塊的簡介及自定義模塊
如何定義模塊:
#模型的定義,命名這個文件名為my_info,因為模塊名稱必須為小寫字母和下劃線
#定義模塊的變量
#定定義模塊的函數
name='L'
def info():print(f'大家好我叫{name}')
2.模塊的導入
兩個調用方式如上。具體使用案例如下:
首先我們定義兩個模塊(兩個python文件)
模塊一my_info.py:
name='L'
def info():print(f'大家好我叫{name}')
模塊二introduce.py:
name='K'
age=18
def info():print(f'姓名:{name},年齡:{age}')
?使用上面兩個模塊,導入:
#(1)調用模塊的方法:import以后使用“模塊名.函數名()”
import my_info
print(my_info.name)
my_info.info()#還可以“模塊別名.函數名()”
import my_info as a
print(a.name)
a.info()#(2)from..import..
from my_info import name #導入的一個具體的變量的名稱
from my_info import info #導入的一個具體的函數的名稱
print(name) #此時不需要“模塊名.”,直接使用變量名和函數名
info()#通配符,意思就是調用這個模塊里面的所有內容
from my_info import *
print(name)
info()#同時導入多個模塊,用逗號分割
import math,time,random
如果有兩個模塊的變量和函數名字一樣,那么如何處理這種情況:
from my_info import *
from introduce import *
#導入模塊中具有同名的變量和函數,后導入的會將之前導入的覆蓋
info()#如果我既想使用info中的函數也想使用introduce的函數,也就是不想覆蓋其中一個方案
#解決方案:使用import
import my_info
import introduce
#使用模塊中的函數或變量時,模塊名打點調用
my_info.info()
introduce.info()
運行結果如下:
姓名:K,年齡:18
大家好我叫L
姓名:K,年齡:18進程已結束,退出代碼為 0
3.Python中的包
你也許經常從師兄師姐那里聽到做科研就是“調包”,那么什么是調包?包又是個什么東西?
包的作用是避免模塊名稱相沖突的問題,一個包類似于電腦中一個文件夾,它只比文件夾多了一個叫做initpy的文件,將功能相似的模塊放入一個包內從而方便模塊的組織和管理。注意建立包的時候的名字必須是英文不允許出現漢字。
?可以看到chap10文件夾和名為admin的包的區別就是,包一旦創建就會有_init_.py這個文件。在編寫包的時候可以編寫這個_init_.py也可以不編寫,比方說我們可以在_init_.py這個文件里編寫下面這些內容:
print('Hello World!')
print('How are you?')
?選中admin這個包,單擊右鍵選擇新建python文件,比如我們命名為my_admin.py具體內容如下:
def info():print('大家好,我叫ysj,今年18歲')
name='ysj'
?在chap10這個文件中新建一個python文件,想辦法能從包中調用模塊,語法為“包名.模塊名”或者“from 包名 import 模塊名 as 別名”,還有“from 包名.模塊名 import 函數/變量等”內容可以編寫如下:
import admin.my_admin as a #包名.模塊名 其中admin為包名,my_admin為模塊名(模塊就是那個對應的python文件)
a.info() #此時一定會先執行_init_的內容,而且是自動執行的print('-'*40)
from admin import my_admin as b #from 包名 import 模塊名 as 別名
b.info()print('-'*40)
from admin.my_admin import info #from 包名.模塊名 import 函數/變量等
info() #此時在使用info這個函數的時候直接調用名字即可,不需要說明哪一個模塊from admin.my_admin import * #from 包名.模塊名 import *
print(name)
運行結果如下:
Hello World!
How are you?
大家好,我叫ysj,今年18歲
----------------------------------------
大家好,我叫ysj,今年18歲
----------------------------------------
大家好,我叫ysj,今年18歲
ysj進程已結束,退出代碼為 0
4.主程序運行
現在有兩個模塊model_a和model_b,前者的內容如下:
print('welcome to Beijing')
name='ysj'
print(name)
?model_b的內容如下:
#導入的代碼
import model_a
此時執行model_b的代碼輸出的結果就是運行model_a的內容:
welcome to Beijing
ysj進程已結束,退出代碼為 0
那么如果我們不想要執行model_a的內容,像是
if __name__ == '__main__':
只需要先打上main,然后回車main就會自動變成上面這一行。將model_a修改為如下內容:
# print('welcome to Beijing')
# name='ysj'
# print(name)
if __name__ == '__main__':print('welcome to Beijing')name='ysj'print(name)
?此時再運行model_b就不會再輸出上面的內容,它阻止了全局變量的數據被輸出,也就是說在被調用模塊的時候,需要將不希望輸出的內容放進if main結構(主程序代碼)里面。
5.Python中常用的內置模塊及random模塊中常用函數的使用
?
注意這里的隨機種子根據這個數字產生特定的數字,規定好了隨機種子不管在什么電腦上都能產生一樣的數字。如果不規定隨機種子就不能保證每一次產生的數字是一樣的,如果想要不同的數字就要規定不同的隨機種子數。
#導入
import random
#設置隨機數種子
random.seed(10)
print(random.random()) #[0.0,1.0]
print(random.random()) #這兩次結果是不一樣
print('-'*40)
random.seed(10)
print(random.randint(1,100)) #[1,100]for i in range(10): #[m,n)步長為k,m-->start-->1,n-->stop-->10,k-->step-->print(random.randrange(1,10,3)) #12行代碼執行了10次print(random.uniform(1,100)) #[a,b]隨機小數lst=[i for i in range(1,11)]
print(random.choice(lst)) #lst是列表也是序列#隨機的排序
random.shuffle(lst)
print(lst)
random.shuffle(lst) #必須寫上這行要不然就會兩行執行結果一樣了
print(lst) #此時再執行一遍
運行結果如下:
0.5714025946899135
0.4288890546751146
----------------------------------------
74
1
4
4
7
1
1
4
4
4
7
81.25126013057475
1
[5, 4, 10, 7, 3, 2, 1, 6, 8, 9]
[3, 4, 5, 6, 8, 10, 7, 1, 2, 9]進程已結束,退出代碼為 0
本節完