一、基礎小知識
1、Python是一種腳本語言,源文件通常以.py作為擴展名,其運行方式與java類似,都是編譯成字節碼后再解釋執行的
2、Python2.x與Python3.x是不兼容的,不過2.x由于足夠成熟,第三方庫豐富,因此,應該根據需要選用,兩者并不沖突
3、Python的IDE不像Ms的VS環境那樣,獨一無二的好用的工具,一般是IDLE或者PythonWin以及其他一些開源的工具,或者就直接使用交互式命令行
4、注意,由于Python是解釋性腳本語言,因此,既可以寫成一個腳本文件整體執行,也可以在交互式命令環境中片段執行
5、在cmd命令提示符中,輸入python –V可以查看當前運行的python版本
6、Python可以在同一行寫入多條語句,使用分號隔開即可
7、若一行語句過長,需要折行繼續,則可以使用反斜杠\分隔,這個與C++一樣
8、Python腳本代碼可以直接在Shell中運行
9、倘若要從一個腳本文件運行,例如在D盤下創建一個main.py文件,其中輸入代碼print(“nihao”,”wohao”),然后進入到命令提示符,進入到D盤目錄下,輸入命令python?main.py,即可運行腳本。很多Python腳本文件都會在第一行指定解釋器的位置,但是,注意,真正正確的寫法是:#!/usr/bin/envpython
二、開發工具
1、PYPI,也即python?package index,是python官方的第三方庫的倉庫,官方推薦使用pip進行包的下載管理,pip相當于是linux中的yum,apt-get這樣的工具,pip需要較高版本的python環境支持,所以,盡量使用較高的版本
2、Python的IDE工具非常的多,除了自帶的IDLE外,還有很多,甚至一些商業的工具,有一些跨平臺的工具使用JAVA開發的,所以會要求有JVM,就我個人來說,寫片段代碼使用IDLE比較多,很方便,如果是正式開發,則使用pycharm,這是一個收費的工具,不過很好用
三、注釋及特殊運算符
1、#用來表示注釋一行,從#開始到這一行結束都表示被注釋
2、加減乘除以及取模運算符都是跟C一樣的,這里特別介紹除法和乘方操作符
3、使用三重引號可以進行多行注釋,只要不將這些字符串賦值給一個變量,都會被當成一個注釋,可以是三個單引號,也可以是三個雙引號這樣的三重引號形式,三重引號的字符串是可以賦值給變量的,會保留字符串中所有的格式
4、在Python中,可以使用分號;將多個語句放在一行上,不過不建議這么做
5、for循環,while循環,if語句的條件都不用放在小括號中,函數定義時,參數需要放在小括號中
四、變量類型
? 4.1基本規則
? ? ? ? I、Python是動態類型語言,不需要在使用變量之前先定義變量類型 ?,當給 Python?中的變量賦不同類型的值時,變量呈現不同的類型,例如aa=”nihao”,此時aa是字符串類型;aa=45,則此時aa是數字類型
? ? ? ? II、Python是一個強類型的語言,注意不要跟上面的動態類型搞混了,類似2+”2”這樣的計算是會報錯的,Python并不會進行自動的轉換。事實上,強類型是指變量必須有顯式的類型,無論這個類型是自動聲明還是人工聲明的,弱類型語言不需要聲明類型
? ? ? ? III、變量只能以字母或下劃線開頭,變量名沒有長度限制
? ? ? ? IV、在Python中,一切都是對象,包括基本數據類型例如int\float\string,例如x=100,注意,由于x是一個對象,因此x只是指向了100這個數值,而并不是x本身存儲了100
4.2連續賦值
? ? ? ?I、舉例:x,y=34,56,通過這樣的語法可以同時給x,y賦值,多個連續的變量可以賦不同類型的值,以上述為例,x,y=y,x,通過這樣的語法還可以直接交換x與y變量的值
4.3數據類型
? 4.3.1 數值類型
? ? ?I、int、float、long、bool,注意還直接支持complex類型,這是復數類型,Python中直接做了支持,果然是爽啊,不用再自己寫類了,定義方式是x=2+3j,注意這里的j是語法的一部分,不能改成其他字母。
? ? ?II、查看變量類型:通過type(變量名)可以查看,比如type(x)
? ?4.3.2 Decimal類型
? ? ? I、這個類型稱之為十進制數據類型,在進一步介紹這個類型之前,先看一個例子,dd=0.1+0.2,猜猜結果是多少,你一定認為是0.3吧,呵呵,請看:0.30000000000000004,是的,你沒有眼花,就是這個值,為什么呢,因為0.1和0.2都是float類型,這個類型存儲的是近似值而不是精確的值,那么decimal類型正是提供精確數字的一個類型,不過Decimal并不會內置類型,使用前需要引入decimal模塊,看一個例子:
import decimal#引入decimal包
>>>
cc=decimal.Decimal(0.1) #注意后面的Decimal類型D是大寫的
>>>dd=decimal.Decimal(0.2)
>>>ee=cc+dd
>>>ee
Decimal('0.30000')#可以看到,輸出了0.3
Decimal類型可以設置精度范圍:>>> decimal.getcontext().prec=1
將小數位設置為1位精度
? 4.3.3 數值計算
? ? / - Float Division,返回一個浮點數類型
? ?// - Integer Division,返回商的整數部分
? ? 注意,//并非一早就支持的運算符
4.3.4 字符串類型
? ?I、Python中的字符串可以放在雙引號中,也可以放在單引號中,也可以放在三引號中(沒錯,你沒看錯,是三引號)
? ?II、單引號與雙引號字符串的用途基本一致,如果字符串中存在單引號則字符串可以放在雙引號中,反之也是
? ?III、單或雙引號表示的字符串,再需要換行書寫時,需要換行符號\,例如: ? ? ? ?
? ? ? ? ? ?abc=”acd\
? ? ? ? ? ?jkk”
? ? ? ? ? ?此時,abc的值是”acdjkk”,注意,換行符與之前的串之間不需要空格
? ? IV、對于三引號的字符串,首先是可以直接換行的,不用使用換行符;另外在字符串中可以放入單引號,雙引號等符號;所謂的三引號,可以是這樣的”””,也可以是這樣的’’’
4.3.5字符串特點
I、字符串一旦創建就不能被修改,只能一直新建
Str1=”nihao”
Str1+=”mike”#到這一步,id(Str1)的地址已經是一個新地址了,等于是
#新建了一個字符串
這其實也是一種防止內存覆蓋的方法
4.3.6字符串操作
I、加號+用于字符串連接;
Str1=”hello”+”nihao”或者
Str1+=”end string”
II、星號*用于重復字符串
Str1=”nihao”*3
返回”nihaonihaonihao”
III、字符串切片
s=”welcome”
語法:s[start:end],返回從索引start到索引end-1的子串
例如字符串str=”welcome”,str[0:2]則返回”we”
start或者end可以不填寫,則默認start為0,end為末尾,或者說往后一直取值到末尾
若end為負數,比如s[0,-1]則表示從索引0開始,去除掉最后一位字符
負幾就是從后面開始去除掉幾位字符
例如:str[0:-1]返回”welcom”
Str[0:-3]返回”welc”
IV、取得ASCII碼
ord(“a”)ord(“\n”)ord(“ “)
參數中的字符串可以是單引號、雙引號、三引號的都可以,但是要注意只能放一個字符,不能使用多個字符組成的字符串
V、通過ASCII碼獲得字符
chr(97)返回’a’
llen(str)取得字符串長度
max(str)取得字符串中ASCII碼最大的字符
min(str)取得字符串中ASCII碼最小的字符
lin以及not in操作
用來判斷在字符串中是否存在另外一個串
“come” in “welcome”
返回true
“come” not in “welcome”
返回false
VI、字符串比較
可以使用>>=<<===!=進行比較
事實上字符串比較的是各個字符的ASCII碼,從左往右比較
例如:str1=”green”str2=”glue”
則比較到r>l,因此str1>str2
VII、循環遍歷
for iin str1:
print i
注意,默認情況下是不能支持中文的
VIII、判斷函數
isalnum()Returns True if string is alphanumeric
isalpha()Returns True if string contains onlyalphabets
isdigit()Returns True if string contains onlydigits
isidentifier()Return True is string is valid identifier
islower()Returns True if string is in lowercase
isupper()Returns True if string is in uppercase
isspace()Returns True if string contains onlywhitespace
IX、計算某個字符在字符串中出現的次數-count
Str=”nihaohello”
print Str.count(“o”)
計算字符o在Str中出現的次數,返回2
ls.endswith(“”)s.startswith(“”)
判斷字符串s是否是以參數中的子串開始或結束的
ls.find(“cc”)在s中查找cc出現的位置索引,搜索不到返回-1
s.rfind(“cc”)在s中從最右邊開始查找cc出現的索引,若s中有多個cc,則這里提供了搜索最右邊的cc的方法
ls.capitalize()
將字符串的首字母大寫
ls.lower()s.upper()
將字符串變形為小寫和大寫
ls.title()
將字符串中每個單詞的首字母都大寫
注意,只有字符串中的每個單詞之間都用空格分隔才有效
s=”hello world”
s.title()
返回”HelloWorld”
ls.swapcase()
將字符串中的大寫字母變成小寫字母,反之變成大寫字母
ls.replace(old,new)
s=”nihao”
s.replace(“n”,”J”)
返回”Jihao”
4.3.5 Lists類型
? ? ?l、列表,與C中的數組類似,使用中括號語法創建List,例如:List=[1,2,3,4,5],列表中的元素可以是不同類型的,這個是與C數組很大的區別,例如:List=[“nihao”,123,”hello”]
? ? ?II、列表可以嵌套,也即列表中可以再有列表
4.3.6 Lists創建
?I、除了上述的直接賦值創建方式,還有幾種常用的方式
List1=list() #創建一個空列表,當然也可以List1=[]這樣創建空列表
List2=list([23,34,45])
List3=list([“你好”,”hellow”,”myworld”])
上面兩種方式其實是一樣的,都是賦值法,只不過是放在了list()語句中了
也可以直接使用字符串來創建list4=list(“python”)
在這里可以看出,其實字符串就是一個列表
4.3.7 Lists訪問
? I、訪問方式與數組的中括號方式一樣
str=[1,2,3,4,5]
str[0]則訪問了第一個元素l也可以使用for遍歷
>>> list4=list("python")
>>> for i in list4:
print i
? II、修改元素
List4[0]=345
列表是可以修改的,這個是與字符串的差別
4.3.8 Lists通用操作
? I、個人感覺,list與字符串很是相像,或者說,字符串其實就是列表,基于以上的理解,很多對于字符串的通用操作,對于列表也適用:
xins判斷在列表s中是否存在元素x
x not in s判斷在列表s中是否不存在元素x
s1+s2串聯兩個列表,跟串聯兩個字符串一個意思
s1*n將s1復制n份然后串聯起來
s[i]取得列表中某個值,也可以通過這個方式修改某個列表元素
s[i:j]跟取得子串一個意思
len(s)取得列表長度
min(s) max(s)取得列表中ASCII碼最小和最大的元素
s1.count(e1)取得s1列表中元素e1出現的次數,
注意,與字符串不同,列表中未必是字符,也可能是數字,
因此e1的傳參要看情況,比如s1=[1,2,3,1],則要計算元素1出現的次數,語法為s1.count(1)
sum(s1)當列表s1中都是數字時,可以計算出數字合計值
4.3.9 Lists專用操作
s.append(23)
s.append(“nihao”)
用于在列表后附加元素
s1.extend(s2)
將列表s2附加到s1后面,相當于列表串聯
s1.index(“nihao”)
在s1中搜索第一次出現”nihao”的索引位置
s1.insert(1,“nihao”)
在列表索引1的位置插入一個元素”nihao”
s1.pop(index)
刪除掉列表s1中索引位置為index的元素,并且返回
若index參數為空,則默認處理列表最后一個元素
s1.remove(x)
從列表s1中刪除第一次出現的元素x
s1.reverse()
反轉列表s1
s1.sort()
按照ASC規則排序列表中元素
4.3.10 Lists推導式
I、推導式也是構造列表的一種方式,一般形式為:
[表達式for變量in列表]以及
[表達式for變量in列表if條件]
可以認為,這是一種通過for語句創建列表的方式,通過一個表達式構造出一個列表,或者說是推導出一個列表
上面的表達式是通過for后面的變量構造出來的,或者可以這么說,for后面是取值范圍,表達式是對取值范圍中的數據進一步加工而得出的列表
舉例:
Str=[x for x in [1,2,3,4,5]]
得出的列表為[1,2,3,4,5]
Str=[x+1 for x in [1,2,3,4,5]]
得出的列表為[2,3,4,5,6]
Str=[xfor x in [1,2,3,4,5] if x%2==0 ]
這里只是對取值范圍加了個條件
4.3.11 字典定義
I、字典用來存儲鍵值對,類似于哈希表或者PHP中的關聯數組,字典是可以被更改的語法看起來跟json非常相像,如下:Friends={‘tom’:’12’,’jerry’:’54’}
不同的鍵值對使用逗號分隔,key部分必須唯一不能重復
Key部分可以使用單引號也可以使用雙引號也可以使用三重引號,Value部分也可以并且Value部分也可以是一個列表或者是另外一個字典
lI、可以創建空字典myDic={}
4.3.12 字典處理
I、獲得某個key的值、修改以及新增
myDic[“key名”],通過這種語法可以取值也可以賦值
注意不能通過myDic[0]這樣取值,必須通過key名來訪問
若進行了賦值例如myDic[“newElement”]=678,則若myDic中不存在”newElement”這個key,相當于給字典新增了key-value
II、刪除某個key值
del myDic[“keyName”]
III、循環字典
使用for循環
fori in myDic
print myDic[i]
其實,從這里也可以看出,python中的for循環已經內建了迭代器
如果這里的print是print i則會輸出所有的key名
IV、通用處理
len(myDict)#取得字典的長度,也即有幾個key
key名in
myDict key名not in
myDict #判斷某個key是否在字典中
V、比較處理
注意,字典不像字符串可以進行大于小于這樣的比較,但是可以進行等于和不等于的比較,例如
d1= {"mike":41, "bob":3}
d2= {"bob":3, "mike":41}
>>>d1 == d2
True
>>>d1 != d2
False
>>
VI、專用處理
myDict.clear()#清空字典
myDict.get(key名)#獲得字典中某個key名的value值
myDict.pop(key名)#刪除某個key名,并返回相應的value值
myDict.popitem()#隨機刪除一個key,并返回相應的值
4.3.13 元組定義
? ?I、元組與列表非常像,不過元組一旦創建,就不能新增,刪除,替換以及重新排序,因此,元組是不能被修改的,這和列表以及字典都不一樣
? ?II、元組可以直接創建,使用圓括號
? ? ? ? ? T1=()
? ? ? ? ? T1=(11,22,33)
? ? ? ? ?也可以使用列表和字符串來創建
? ? ? ? ?T1=tuple([1,2,3,4,5])
? ? ? ? ?T1=tuple(“nihao”)
? ? ? ? ? 元組中也可以是字符串,不一定要都是數字,甚至可以是列表和字典
4.3.14 元組通用操作
?I、比如對于一個元組
T1=(1,2,3,4,5)
len(T1)#取得元組的長度
min(T1),max(T1)#取得元組中最小和最大的元素
如果元素是字符串,則比較ASCII碼
但是注意,對于sum(),只有元素都是數字的元組才有效
II、循環
這個跟列表,字典一樣,都是使用for循環處理
for i in t1:
print i
切片
這里與列表的處理也是一樣的
T1[0:2]則取得從索引0到1的元組數據,返回一個新的元組
III、取值
T1[0]取得元組第一個元素
T1[1]取得元組第二個元素
in以及not in操作
2 in t1
3 not in t2
分別返回true和false
4.3.15 類型轉換
I、Python中的類型轉換都可以通過BIF處理
? ? ? a=10#int轉換為float
? ? ?float(a)
? ? ?s=”123”#字符串轉換為int
? ? ?int(s)
? ? ?i=100#數字轉化為字符串
? ? str(i)
? ? i=23.97312#四舍五入
? ? round(i,2)或者round(i)
? ?第二個參數指定了保留的小數位數,若沒有指定則表示四舍五入到整數