工欲善其事必先利其器—Python基礎
1. Anaconda使用總結
conda是開源包和虛擬環境的管理系統,可以方便地安裝、更新、卸載包,建立多個虛擬環境,用於隔離不同項目所需的不同版本工具包,以防止版本衝突等,是數據分析不可或缺的工具軟體。
1)Python包管理:
- 安裝一個package(可以同時安裝多個包): conda install package_name
例如:同時安裝numpy,scipy和pandas:conda install numpy scipy pandas
- 移除一個package:conda remove package_name
- 升級package版本:conda update package_name
- 查看所有的package:conda list
2)管理Python環境:
- 默認的環境是root,可以創建一個新環境:
conda create -n env_name(需要創建的環境名稱) list of packages(環境中需要安裝的工具包)
例如,創建Python 2 環境,並安裝pandas包:conda create -n py2 python=2.7 pandas
- 進入名為env_name的環境:activate env_name
- 退出當前環境:deactivate env_name
- 刪除名為env_name的環境:conda remove -n env_name
- 顯示所有的環境:conda env list
2. Python 數據類型
Python中的變數不需要聲明,每個變數在使用前都必須賦值,變數賦值之後該變數才會被創建。等號(=)用來給變數賦值。
Python標準數據類型:6種,分別是數字Number,字元串String,列表List,元組Tuple,集合Sets,字典Dictionary。
6個標準數據類型中,不可變數據(3個)有:數字、字元串、元組。可變數據(3個)有:列表、字典、集合。
1)數字Number
整型int、浮點型float、布爾bool和複數complex。
2)字元串String
字元串用單引號括起來。字元串截取的語法格式:變數[頭下標:尾下標],索引值以0為開始值,-1為從末尾的開始位置。
3)列表List
列表可以完成大多數集合類的數據結構實現。列表中元素的類型可以不相同,它支持數字,字元串,也可以包含其他列表(嵌套)。
列表元素寫在方括弧([])之間、用逗號分隔開。列表也可以被索引和截取,列表被截取後返回一個包含所需元素的新列表。列表截取的語法格式:變數[頭下標:尾下標]。
List可以使用+操作符進行拼接。
# 創建nameList列表:nameList = [cat,bat,rat,elephant]print(nameList)
運行結果:[cat, bat, rat, elephant]
# 增加列表元素:appendnameList.append(dog)print(nameList)
運行結果:[cat, bat, rat, elephant, dog]
# 刪除列表元素:deldel nameList[2]print(nameList)
運行結果:[cat, bat, elephant, dog]
# 查詢列表元素:使用下標索引/切片# 列表切片中,第一個整數是切片開始處的下標,第二個整數是切片結束處的下標。# 切片向上增長,直到第二個下標的值,但不包括它。nameList[0:2]
運行結果:[cat, bat]
# 修改列表元素:直接指定下標的值nameList[1] = aardvarkprint(nameList)
運行結果:[cat, aardvark, elephant, dog]
# 列表連接:+操作符[1,2,3] + [A,B,C]
運行結果:[1, 2, 3, A, B, C]
4)元組Tuple
與列表類似,不過元組的元素不能修改。元組寫在小括弧 () 里,元素之間用逗號隔開。元組中的元素類型也可以不相同。
元組與字元串類似,可以被索引且下標索引從0開始,-1 為從末尾開始的位置。元組也可以進行截取。
# 元組:寫在小括弧()里,元素之間用逗號隔開:tuple =(abcd, 786 , 2.23, rainbow, 70.2)print(tuple)len(tuple) # 元組長度
運行結果:(abcd, 786, 2.23, rainbow, 70.2)
5# 元組切片tuple[0:3]
運行結果:(abcd, 786, 2.23)
# 修改元組元素的操作是非法的tuple[0] = 11
運行結果:TypeError Traceback (most recent call last)
<ipython-input-12-c5c087bb42a9> in <module>() 1 # 修改元組元素的操作是非法的 ----> 2 tuple[0] = 11 TypeError: tuple object does not support item assignment# 構造包含0個元素的元組:tup1 = ()print(tup1)# 構造包含1個元素的元組:也需要在元素後添加逗號tup2 = (1,)print(tup2)
運行結果:()
(1,)
5)集合Set
集合(set)是一個無序不重複元素的序列,基本功能是進行成員關係測試和刪除重複元素。可以使用大括弧 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。
# 創建學生姓名集合:student = {Tom, Jim, Mary, Tom, Jack, Rose}print(student) # 輸出集合,重複的元素被自動去掉
輸出結果:{Jim, Rose, Mary, Tom, Jack}
# 向集合中增加元素:updatestudent.update([Mike,Lucy])print(student)
輸出結果:{Jim, Rose, Lucy, Mike, Mary, Tom, Jack}
# 刪除集合中的元素:discardstudent.discard(Mike)print(student)
輸出結果:{Jim, Rose, Lucy, Mary, Tom, Jack}
# 查找元素是否在集合中:inif(Rose in student) : print(Rose 在集合中)else : print(Rose 不在集合中)
輸出結果:Rose 在集合中
# 修改集合元素:先刪除,再添加student.discard(Lucy)student.update([Lily])print(student)
輸出結果:{Jim, Rose, Lily, Mary, Tom, Jack}
# set可以進行集合運算a = set(abracadabra)b = set(alacazam)print(a)print(a - b) # a和b的差集print(a | b) # a和b的並集print(a & b) # a和b的交集 print(a ^ b) # a和b中不同時存在的元素
輸出結果:{c, d, b, r, a}
{r, d, b}{c, d, b, l, z, r, m, a}
{a, c} {r, m, d, l, b, z}6)字典Dictionary
列表是有序的對象集合,字典是
的對象集合。字典是一種映射類型,用花括弧"{ }"標識,它是一個無序的鍵(key) : 值(value)對集合。鍵(key)必須使用不可變類型。在同一個字典中,鍵(key)必須是唯一的。
因為字典是不排序的,所以不能像列表那樣切片。
# 定義字典scoreDict = {01:Lily,02:Jim,03:Mike,04:Tom}print(scoreDict) # 輸出整個字典print(scoreDict.keys()) # 輸出所有鍵print(scoreDict.values()) # 輸出所有值
輸出結果:{01: Lily, 02: Jim, 03: Mike, 04: Tom}
dict_keys([01, 02, 03, 04]) dict_values([Lily, Jim, Mike, Tom])# 向字典中增加元素:scoreDict[05] = Jackprint(scoreDict)
輸出結果:{01: Lily, 02: Jim, 03: Mike, 04: Tom, 05: Jack}
# 從字典中刪除元素:deldel scoreDict[05]print(scoreDict)
輸出結果:{01: Lily, 02: Jim, 03: Mike, 04: Tom}
# 修改字典元素:scoreDict[01] = Lucyprint(scoreDict)
輸出結果:{01: Lucy, 02: Jim, 03: Mike, 04: Tom}
# 查詢字典元素:value = scoreDict[03]print(value)
輸出結果:Mike
3. Python條件控制:if語句
if condition_1: statement_block_1 elif condition_2: statement_block_2else: statement_block_3
- 如果 "condition_1" 為 True 將執行 "statement_block_1" 塊語句;
- 如果 "condition_1" 為False,將判斷 "condition_2";
- 如果"condition_2" 為 True 將執行 "statement_block_2" 塊語句;
- 如果 "condition_2" 為False,將執行"statement_block_3"塊語句。
每個條件後面要使用冒號 :,表示接下來是滿足條件後要執行的語句塊;Python使用縮進來劃分語句塊,相同縮進數的語句在一起組成一個語句塊。
邊界條件判斷:值比較和邏輯比較。代碼練習:
# 條件判斷print(Please enter your name: )name = input()print(Enter your age: )age = int(input())if name == Alice: print(Hi,Alice.)elif age < 12: print(You are not Alice, kiddo.)else: print(Enter your name again please.)
4. 循環:for循環/while循環
1)while循環的一般形式:(需要注意冒號和縮進)
while 判斷條件: 語句
只要while語句的條件為True,while子句中的代碼就會執行。
# 用while循環計算1到100的求和:n = 100sum = 0counter = 1while counter <= n: sum = sum + counter counter += 1 print("1 到 %d 的和為: %d" % (n,sum))
運行結果:1 到 100 的和為: 5050
無限循環:可以使用Ctrl+C退出當前循環。
跳出循環:break語句,用於退出整個循環。如果執行遇到break語句,馬上退出循環子句。
continue語句,用於跳出當前循環。如果程序執行遇到continue語句,就會馬上跳回到循環的開始處,重新對循環條件進行求值。
# 跳不出的循環:除非輸入your name,否則循環的條件永遠為False,程序將永遠問下去name = while name != your name: print(Please type your name: ) name = input()print(Thank you.)# 跳出循環:break語句while True: print(Please type your name: ) name = input() if name == your name: breakprint(Thank you.)# continue:用於跳出當前循環while True: print(Who are you?) name = input() if name != Joe: continue print(Hello, Joe. What is the password?) password = input() if password == swordfish: breakprint(Access granted.)
2)for循環的一般格式:
for <variable> in <sequence>: <statements>else: <statements>
批量處理:循環在容器中的數據全部被訪問過之後停止。
# 用for循環實現1到100求和:sum = 0for x in range(101): sum = sum + xprint(sum) # 求和結果為5050
5. 函數
1)函數是可以重複使用的、用來實現特定功能的代碼段。自定義函數:
def 函數名(參數列表): 函數體
python 函數的參數傳遞:
- 不可變類型:整數、字元串、元組。如函數參數為這三種不可變數據類型,傳遞的只是它的值,沒有影響該對象本身。比如在 function(a)內部修改 a 的值,只是修改另一個複製的對象,不會影響 a 本身。
# 傳不可變對象實例 def ChangeInt( a ): a = 10b = 2ChangeInt(b)print( b ) # 結果是 2
- 可變類型:列表,字典。如函數參數為可變數據類型,則是將該參數真正的傳過去,修改後function外部的值也會受影響。
# 傳可變對象實例def changeme( mylist ): "修改傳入的列表" mylist.append([1,2,3,4]) print ("函數內取值: ", mylist) return # 調用changeme函數mylist = [10,20,30]changeme( mylist )print ("函數外取值: ", mylist)
運行結果:函數內取值: [10, 20, 30, [1, 2, 3, 4]]
函數外取值: [10, 20, 30, [1, 2, 3, 4]]
自定義函數代碼練習:
# 自定義函數,計算面積:def area(width, height): return width * heightw = 4h = 5print("width =", w, " height =", h, " area =", area(w, h))
運行結果:width = 4 height = 5 area = 20
2)變數作用域
在被調用函數內賦值的變數,處於該函數的局部作用域,在所有函數之外賦值的變數,屬於全局作用域。一個變數必是其中一種,不能既是局部的又是全局的。
全局作用域中的代碼不能使用任何局部變數;但是局部作用域可以訪問全局變數。一個函數的局部作用域中的代碼不能使用其他局部作用域中的變數。
務必注意:局部變數不能在全局作用域中使用;局部作用域不能使用其他局部作用域中的變數;全局變數可以在局部作用域中讀取。
6. 模塊
模塊是一個包含所有你定義的函數和變數的文件,其後綴名是.py。模塊可以被別的程序引入,以使用該模塊中的函數等功能。這也是使用 python 標準庫的方法。
模塊的引入:
import package_nameimport package_name as shortnamefrom package_name import function_name
7. 數據結構
堆棧:最先進入的元素最後一個被釋放(後進先出)。用append()方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來。
隊列:在隊列里第一加入的元素,第一個取出來。但是拿列表用作這樣的目的效率不高。在列表的最後添加或者彈出元素速度快,然而在列表裡插入或者從頭部彈出速度卻不快(因為所有其他的元素都得一個一個地移動)。
推薦閱讀:
※html5可以做什麼?HTML5市場需求有哪些?
※學編程有哪些好點的網站?
※如何學好HTML5?學Web前端需不需要基礎?
※關於Vert.x的冷知識
※大數據時代對編程有什麼影響?