Python初學基礎


初入坑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 模塊安裝

基於windows的numpy安裝,首先到網站上下載符合你的python版本的電腦系統的numpy文件,后綴名為whl。網址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
如果不確定自己的python版本,可在cmd中輸入python查看。如下圖所示,cp為python版本,32和64分別為符合windows32位和64位的版本。下載完成后放到Scripts所在的文件夾。我的安裝路徑是:D:\Program Files (x86)\Python\Scripts
為了能安裝wheel文件,需要安裝wheel這個包,在cmd中進入Scripts所在的位置,方法如下圖所示,輸入pip install wheel。

如果直接在cmd中輸入pip install numpy也顯示安裝成功,但是有可能不帶mkl,會出現一些問題,所以建議安裝下載。在cmd中輸入pip install numpy-1.13.1+mkl-cp36-cp36m-win_amd64.whl,如圖顯示安裝成功。
此外,你可以通過pip uninstall numpy來卸載numpy,pip install -U  numpy來更新numpy的版本。

文件讀取

8.1 讀寫文件1

"\n"換行命令
open讀文件方式
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()
“\t”tab對齊

8.2 讀寫文件2

給文件增加內容,以’a‘方式打開文件,a表示append以增加內容的形式打開。例子如下: 
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

(1)讀取文件內容file.read()可以讀取所有的內容
file= open('my file.txt','r')
content=file.read() 
print(content)
(2)按行讀取file.readline()
讀取的內容與適用的次數有關
(3)讀取所有行file.readlines()
將把每一行的結果存儲在list中,執行的結果如下圖所示

class類

9.1 class 類

class 定義一個類, 后面的類別首字母推薦以大寫的形式定義,可以先定義自己的屬性,可跟def函數,如def add(self,x,y):,self是默認值。
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 功能

完成初始化功能,運行c=Calculator('bad calculator',18,17,16,15),然后調出每個初始值的值。看如下代碼。 
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 >>> """"
如何設置屬性的默認值, 直接在def里輸入即可,如下:
def __init__(self,name,price,height=10,width=14,weight=16):

input輸入

10.1 input 輸入

variable=input() 表示運行后,可以在屏幕中輸入一個數字,該數字會賦值給自變量。input返回的類型是string類型,所以可根據需要進行類型轉換,如variable=int(input())
元組、列表、字典

11.1 元組 列表

元組 tuple:以小括號或者無括號表示,是一連串有順序的數字,list以中括號命名。 
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 多維列表

一個一維的List是線性的List,多維List是一個平面的List:
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
用行數和列數來定位list中的值。這里用的是二維的列表,但可以有更多的維度。

11.4 dictionary 字典

List是有順序地輸出輸入,字典的存檔形式則是無需順序的。
在字典中,有key和 value兩種元素,每一個key對應一個value, key是名字, value是內容。數字和字符串都可以當做key或者value, 在同一個字典中, 並不需要所有的key或value有相同的形式。 這樣說, List 可以說是一種key為有序數列的字典。
字典的value可以多樣,可以是字典、函數等等。

模塊

12.1 import 模塊

(1)import time
print(time.localtime())  #這樣就可以print 當地時間了
(2)import time as_ 下划線縮寫部分可以自己定義
print(t.localtime()) # 需要加t.前綴來引出功能
(3)from time import time,localtime,只import自己想要的功能
print(localtime())
(4)from time import * 輸入模塊所有功能
print(localtime())

12.2 自己的模塊

其他

13.1 continue & break

break用法,在循環語句中,使用 break, 當符合跳出條件時,會直接結束循環。而continue直接進入下一次循環。

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

zip函數接受任意多個(包括0個和1個)序列作為參數,合並后返回一個tuple列表,豎向合並。
a=[1,2,3] b=[4,5,6] ab=zip(a,b) print(list(ab))  #需要加list來可視化這個功能
""" [(1, 4), (2, 5), (3, 6)] """

lambda定義一個簡單的函數,實現簡化代碼的功能

map是把函數和參數綁定在一起。
 

13.4 copy & deepcopy 淺復制 & 深復制

什么是id?一個對象的id值在CPython解釋器里就代表它在內存中的地址
當使用淺拷貝時,python只是拷貝了最外圍的對象本身,內部的元素都只是拷貝了一個引用而已。也就是第一次列表被指定到另外的空間,而第二層列表即內部元素還是相同的內存空間。
deepcopy對外圍和內部元素都進行了拷貝對象本身,而不是對象的引用。外圍對象和內部元素都指定到了另外的空間。
 
ctrl+c 強行停止運行  crtl+[ 改變Tab結構 Alt+P上一條命令 Alt+N下一條命令

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM