python中一切皆對象,每個對象由:標識(identity),類型(type),value(值)組成
1.標識用於唯一標識對象, 通常對應於對象在計算機內存中的地址,使用內置函數id(obj)可返回對象obj的標識(就是在內存塊中的地址)
2.類型用於表示對象存儲的“數據”的類型,類型可以限制對象的取值范圍以及可執行的操作。可以使用type(obj)獲得對象的所屬類型。
3.值表示對象所存儲的數據的信息,使用print(obj)可以直接打印出值。
對象的本質就是:一個內存塊,擁有它特定的值,支持特定類型的相關操作。
在python中,變量也稱為對象的引用,因為,變量存儲的就是對象的地址,變量通過地址引用了“對象”。
變量位於:棧內存
對象位於:堆內存
變量不需要顯示聲明類型,根據變量引用的對象,python解釋器自動確定數據類型。
每個對象都有數據類型,只支持該類型支持的操作。
標識符:用於變量,函數,類,模塊等的名稱。標識符有如下特定的規則:
1.區分大小寫,如:sxt和SXT是不同的
2.第一個字符必須是字母,下劃線,其後字符可為字母,數字,下劃線
3.不能使用關鍵字,比如:if,or,while等
4.以雙下劃線開頭和結尾的名稱通常有特殊含義,盡量避免這種寫法,比如__init__是類的構造函數。
變量的聲明和賦值用於將一個變量綁定到一個對象上,格式如下:
變量名 = 表達式
可以通過del語句刪除不再使用的變量,例:del a
如果變量沒有變量引用,就會被垃圾回收器回收,清空內存空間。
鏈式賦值用於同一個對象賦值給多個變量
x=y=123 相當於:x=123;y=123
系列數據賦值給對應相同個數的變量(個數必須保持一致)
a,b,c = 4,5,6 相當於:a = 4;b = 5;c = 6
使用系列解包賦值可以實現變量交換
python不支持常量,沒有語法規則限制改變一個常量的值。只能約定常量不做更改
1.整數 2.浮點型 3.布爾型 4.字符串型
python中,除10進制,還有其他三種進制:
0b或0B 二進制
0o或0O八進制
0x或0X十六進制
這三種進制可以非常方便的進行“位運算'操作。
1.浮點數直接捨去小數部分,如:int(9.9)結果是:9
2.布爾值true轉為1,false轉為0,如:int(true)結果是1
3.字符串符合整數格式(浮點數格式不行)則直接轉成對應整數,否則報錯
整數和浮點數混合運算時,表達式結果自動轉型成浮點數,比如:2+8.0的結果是10.0
浮點數,稱為float。浮點數用科學計數法表示
1.類似int(),也可以使用float()將其他類型轉換成浮點數
2.整數和浮點數混合運算時,表達式結果自動轉型成浮點數
3.round(value)可以返回四捨五入的值(但不會改變原有值,而是產生新的值)
字符串的本質是:字符序列,python的字符串是不可變的,我們無法對原字符串做出任何修改。但是,可以將字符串的一部分復制到新創建的字符串,達到”看起來修改'的效果。
python不支持單字符類型,單字符也是作為一個字符串使用的。
python3直接支持Unicode,可以表示世界上任何書面語言的字符。python3的字符默認就是16位Unicode編碼,ASCII碼是Unicode編碼的子集。
使用內置函數ord()可以把字符轉換成對應的Unicode碼;
使用內置函數chr()可以把十進制數字轉換成對應的字符。
1.可用單引號或雙引號創建字符串。例如:a = ‘abc’;b = ‘’xuexi‘’
使用這兩種引號的好處是可以創建本身就包含引號的字符串,而不用使用轉義字符。(單夾雙,雙夾單)
2.連續三個單引號或三個雙引號,可以創建多行字符串。
python允許空字符串的存在,不包含任何字符且長度為0.
len()用於計算字符串含有多少字符。
使用“\+特殊字符",實現某些難以用字符表示的效果。
可以使用+將多個字符拼接起來。
a.若+兩邊都是字符串,則拼接。
b.若+兩邊都是數字,則加法運算。
c.若+兩邊類型不同,則拋出異常。
可以將多個字面字符串直接放到一起實現拼接。
使用*可以實現字符串復制
調用print時,會自動打印一個換行符。當不想自動換行時,可以通過使用參數end = ”任意字符串“。實現末尾添加任何內容。
使用input()從控制台讀取字符串
str()實現其他數據類型轉型為字符串
字符串的本質就是字符序列,我們可以通過在字符串後面添加[ ],在[ ]裡面指定偏移量,可以提取該位置的單個字符。
正向搜索:
最左側第一個字符,偏移量是0,第二個偏移量是1,以此類推。直到len(str)-1為止。
反向搜索:
最右側第一個字符,偏移量是-1,倒數第二個偏移量是-2,以此類推,直到-len(str)為止。
字符串是不可改變的。通過[ ] 可以獲取字符串指定位置的字符,但是不能改變字符串,否則報錯。
字符串不可改變。但是,有時必須替換某些字符。這時只能通過創建新的字符串來實現。
replace( )替換字符串的過程中。實際上是創建了新的字符串對象,並指向了變量a,而不是修改了以前的字符串,內存圖如下:
切片slice操作可以快速提取子字符串。標准格式為:
[起始偏移量 start:終止偏移量end:步長 step] 左閉右開
[ :]提取整個字符串
字符串實現逆序輸出:
將字符串中所有a字符輸出:
split()可以基於指定分隔符將字符串分割成多個子字符串(存儲到列表中),如果不指定分隔符,則默認使用空白字符(換行符/空格/制表符)。
join()的作用和split()作用剛好相反,用於將一系列子字符串連接起來。
拼接字符串要點:
使用字符串拼接符+,會生成新的字符串對象,因此不推薦使用+來拼接字符串。推薦使用join函數,因為join函數在拼接字符串之前會計算所有字符串的長度,然後逐一拷貝,僅新建一次對象。
測試兩類拼接符耗費時間:
import time time01 = time.time() #起始時刻 a = "" for i in range(100000): a += "study" time02 = time.time() #終止時刻 print("運算時間:"+str(time02-time01)) time03 = time.time() #起始時刻 li = [] for i in range(100000): li.append("study") a = "".join(li) #使用join連接字符串 time04 = time.time() #終止時刻 print("運算時間:"+str(time04-time03))
字符串駐留:僅保存一份相同且不可變字符串的方法,不同的值被存放在字符串駐留池中。python支持字符串駐留機制,對於符合標識規則的字符串(僅包含下劃線(_),字母和數字)會啟用字符串駐留機制。
format()基本用法
format函數可以接受不限個參數,位置可以不按順序。