初入坑Python,打算跟着沫凡小哥的學習視頻打個基礎,此篇文章做一些簡單的學習記錄,加油加油加油啦
沫凡小哥的學習網站:https://morvanzhou.github.io/tutorials/python-basic/basic/
安裝
1.1 安裝
Python下載網站:https://www.python.org/downloads/(注意環境變量的配置)
以64位windows為例,找到所需要的版本以及對應的系統,選擇該項:
基本使用
2.1 print功能
與之前所學習的語言等的功能類似
補充一下print的注意點
另外,print('I love food'*5)是輸出五次的I love food,如果把*改為+則報錯,因為+號兩邊的數據類型應是一致的。
敲完滿屏的print后,百度了一下IDLE的清屏指令,貼出找到的清屏方法供參考:
(1)ctrl+F6是restart
(2)下載或右擊另存為clearwindow.py,保存在Python X\Lib\idlelib目錄下,並找到config-extensions.def以記事本打開,在最后加上,ctrl+L即可完成清屏
[ClearWindow] enable=1 enable_editor=0 enable_shell=1 [ClearWindow_cfgBindings] clear-window=<Control-Key-l>
2.2 基礎數學運算
基本的加減乘除、取余取整運算等,注意與matlab中冪^的不同,python中的冪為**
2.3 變量variable
while和for循環
3.1 while循環
基本使用(注意冒號):
while condition: expressions
python中除了常規比較操作會返回True和False值,其他也會返回True和False
(1)數字
數字和浮點數也能進行Boolean操作,若該值等於0或0.0返回False
(2)None類型
若while后面跟的語句類型為None,返回False
(3)集合類型
python中集合類型有list、tuple、dict和set等,若把該集合對象作為while判斷語句,如果集合中的元素數量為0,那么將會返回False
3.2 for循環
基本使用:
for item in sequence: expressions
sequence為可迭代的對象,item為序列中的每個對象。
range使用
在Python內置了工廠函數,range 函數將會返回一個序列,總共有三種使用方法
1.range(start, stop)
其中 start 將會是序列的起始值,stop為結束值,但是不包括該值,類似數學中的表達 [start, stop),左邊為閉區間,右邊為開區間。
2.range(stop)
如果省略了 start 那么將從 0 開始,相當於 range(0, stop)
3.range(start, stop, step)
step 代表的為步長,即相隔的兩個值得差值。從 start 開始,依次增加 step 的值,直至等於或者大於 stop
關於此節課程下的高級主題
4.1 內置集合
Python共內置了 list、 tuple 、dict 和 set四種基本集合,每個集合對象都能夠迭代。
tuple 類型
tup=('python',2.7,64)
for i in tup:
print(i)
程序將以此按行輸出 ‘python’, 2.7 和 64。
dictionary 類型
dic={}
dic['lan']='python'
dic['version']=2.7
for key in dic:
print(key,dic[key])
字典在迭代的過程中將 key作為可迭代的對象返回。注意字典中key是亂序的,也就是說和插入的順序是不一致的。如果想要使用順序一致的字典,請使用collections模塊中的OrderedDict對象。
set 類型
s=set(['python','python2','python3','python'])
for i in s:
print(i)
set 集合將會去除重復項,注意輸出的 結果也不是按照輸入的順序。
4.2 迭代器
python 中的 for 句法實際上實現了設計模式中的迭代器模式 ,所以我們自己也可以按照迭代器的要求自己生成迭代器對象,以便在 for 語句中使用。 只要類中實現了 __iter__ 和 next函數,那么對象就可以在 for 語句中使用。現在創建 Fibonacci 迭代器對象,
4.3 生成器
除了使用迭代器以外,Python 使用 yield 關鍵字也能實現類似迭代的效果,yield 語句每次執行時,立即返回結果給上層調用者,而當前的狀態仍然保留,以便迭代器下一次循環調用。這樣做的好處是在於節約硬件資源,在需要的時候才會執行,並且每次只執行一次。
if判斷
4.1 if判斷
基本使用:
if condition: expressions
注意python中賦值語句同matlab,使用==表示。
4.2 if else判斷
基本使用:
if condition: true_expressions else: false_expressions
注意python中無類似condition ? value1 : value2 的三目操作符,但可以通過if-else來完成類似功能。var = var1 if condition else var2
4.3 if elif else判斷
if condition1: true1_expressions elif condition2: true2_expressions elif condtion3: true3_expressions elif ... ... else: else_expressions
定義功能
5.1 def函數
基本使用:
def function_name(parameters): expressions
Python 使用 def 開始函數定義,緊接着是函數名,括號內部為函數的參數,內部為函數的具體功能實現代碼,如果想要函數有返回值, 在 expressions 中的邏輯代碼中用 return 返回。
5.2 函數參數
基本使用:
def function_name(parameters): expressions
注意:在調用函數時候,參數個數和位置一定要按照函數定義。如果我們忘記了函數的參數的位置,只知道各個參數的名字,可以在 函數調用的過程中給指明特定的參數 func(a=1, b=2), 這樣的話,參數的位置將不受影響,所以 func(b=2,a=1)是同樣的效果。
5.3 函數默認參數
定義函數時有時候有些參數在大部分情況下是相同的,只不過為了提高函數的適用性,提供了一些備選的參數, 為了方便函數調用,可將這些參數設置為默認參數,那么該參數在函數調用過程中可以不需要明確給出。
def function_name(para_1,...,para_n=defau_n,..., para_m=defau_m): expressions
函數聲明只需要在需要默認參數的地方用 = 號給定即可, 但是要注意所有的默認參數都不能出現在非默認參數的前面。
此節課程下的進階篇
3.1 自調用
如果想要在執行腳本的時候執行一些代碼,比如單元測試,可以在腳本最后加上單元測試代碼,但是該腳本作為一個模塊對外提供功能的時候單元測試代碼也會執行,這些往往我們不想要的,我們可以把這些代碼放入腳本最后:
if __name__ == '__main__': #code_here
如果執行該腳本的時候,該if判斷語句將會是True,那么內部的代碼將會執行。 如果外部調用該腳本,if判斷語句則為False,內部代碼將不會執行。
3.2 可變參數
顧名思義,函數的可變參數是傳入的參數可以變化的,1個,2個到任意個。當然可以將這些參數封裝成一個 list 或者 tuple 傳入,但不夠 pythonic。使用可變參數可以很好解決該問題,注意可變參數在函數定義不能出現在特定參數和默認參數前面,因為可變參數會吞噬掉這些參數。
def report(name, *grades): total_grade = 0 for grade in grades: total_grade += grade print(name, 'total grade is ', total_grade)
定義了一個函數,傳入一個參數為 name, 后面的參數 *grades 使用了 * 修飾,表明該參數是一個可變參數,這是一個可迭代的對象。該函數輸入姓名和各科的成績,輸出姓名和總共成績。所以可以這樣調用函數 report('Mike', 8, 9),輸出的結果為 Mike total grade is 17, 也可以這樣調用 report('Mike', 8, 9, 10),輸出的結果為 Mike total grade is 27
3.3 關鍵字參數
關鍵字參數可以傳入0個或者任意個含參數名的參數,這些參數名在函數定義中並沒有出現,這些參數在函數內部自動封裝成一個字典(dict).
def portrait(name, **kw): print('name is', name) for k,v in kw.items(): print(k, v)
定義了一個函數,傳入一個參數 name, 和關鍵字參數 kw,使用了 ** 修飾。表明該參數是關鍵字參數,通常來講關鍵字參數是放在函數參數列表的最后。如果調用參數 portrait('Mike', age=24, country='China', education='bachelor') 輸出:
name is Mike
age 24
country China
education bachelor
通過可變參數和關鍵字參數,任何函數都可以用 universal_func(*args, **kw) 表達。
變量形式
6.1 全局&局部 變量
模塊安裝
7.1 模塊安裝


文件讀取
8.1 讀寫文件1
text='This is my first test.\nThis is next line.\nThis is last line.' my_file=open('my file.txt','w') my_file.write(text) my_file.close()
8.2 讀寫文件2
append_text='\nThis is appended file.' # 為這行文字提前空行 "\n"
my_file=open('my file.txt','a') # 'a'=append 以增加內容的形式打開
my_file.write(append_text) my_file.close()
8.3 讀寫文件3

class類
9.1 class 類
class Calculator: #首字母要大寫,冒號不能缺
name='Good Calculator' #該行為class的屬性
price=18
def add(self,x,y): print(self.name) result = x + y print(result) def minus(self,x,y): result=x-y print(result) def times(self,x,y): print(x*y) def divide(self,x,y): print(x/y) """" >>> cal=Calculator() #注意這里運行class的時候要加"()",否則調用下面函數的時候會出現錯誤,導致無法調用. >>> cal.name 'Good Calculator' >>> cal.price 18 >>> cal.add(10,20) Good Calculator 30 >>> cal.minus(10,20) -10 >>> cal.times(10,20) 200 >>> cal.divide(10,20) 0.5 >>> """"
9.2 class 類 init 功能
class Calculator: name='good calculator' price=18
def __init__(self,name,price,height,width,weight): # 注意,這里的下划線是雙下划線
self.name=name self.price=price self.h=height self.wi=width self.we=weight """" >>> c=Calculator('bad calculator',18,17,16,15) >>> c.name 'bad calculator' >>> c.price 18 >>> c.h 17 >>> c.wi 16 >>> c.we 15 >>> """"
input輸入
10.1 input 輸入
11.1 元組 列表
a_tuple = (12, 3, 5, 15 , 6) another_tuple = 12, 3, 5, 15 , 6 a_list = [12, 3, 67, 7, 82]
11.2 list 列表
a = [1,2,3,4,1,1,-1] a.append(0) # 在a的最后面追加一個0
a.insert(1,0) # 在位置1處添加0
a.remove(2) # 刪除列表中第一個出現的值為2的項
print(a[0]) # 顯示列表a的第0位的值
print(a[-1]) # 顯示列表a的最末位的值
print(a[-3:]) # 顯示列表a的倒數第3位及以后的所有項的值
print(a[0:3]) # 顯示列表a的從第0位 到 第2位(第3位之前) 的所有項的值
print(a.index(2)) # 顯示列表a中第一次出現的值為2的項的索引
print(a.count(-1))# 統計列表中某值出現的次數
a.sort() # 默認從小到大排序
a.sort(reverse=True) # 從大到小排序
11.3 多維列表
a = [1,2,3,4,5] # 一行五列
multi_dim_a = [[1,2,3], [2,3,4], [3,4,5]] # 三行三列
在上面定義的List中進行搜索: print(a[1]) # 2
print(multi_dim_a[0][1]) # 2
11.4 dictionary 字典
模塊
12.1 import 模塊
12.2 自己的模塊
其他
13.1 continue & break
13.2 try 錯誤處理
try:,except...as...: try: file=open('eeee.txt','r') #會報錯的代碼
except Exception as e: # 將報錯存儲在 e 中
print(e) """ [Errno 2] No such file or directory: 'eeee.txt' """
13.3 zip lambda map
a=[1,2,3] b=[4,5,6] ab=zip(a,b) print(list(ab)) #需要加list來可視化這個功能
""" [(1, 4), (2, 5), (3, 6)] """
lambda定義一個簡單的函數,實現簡化代碼的功能

13.4 copy & deepcopy 淺復制 & 深復制


