python變量概念
python中的變量不需要聲明卵迂,但使用時必須賦值。
變量在創(chuàng)建時會在內(nèi)存中開辟一個空間聊浅。
基于變量的數(shù)據(jù)類型,解釋器會分配指定內(nèi)存现使,并決定什么數(shù)據(jù)可以被存儲在這段指定的內(nèi)存中低匙。
因此,變量可以指定不同的數(shù)據(jù)類型碳锈,這些變量可以存儲整數(shù)顽冶,小數(shù)或字符。
變量賦值即創(chuàng)建
counter = 100 # 賦值整型變量
miles = 1000.0 # 浮點型
name = "John" # 字符串
print(counter)
print(miles)
print(name)
多個變量賦值
同時為多個變量賦值相同的值:a = b = c = 1
創(chuàng)建一個整型對象售碳,值為1强重,三個變量被分配到相同的內(nèi)存空間上。
同時為多個變量指定不同類型的值:a, b, c = 1, 2, "john"
兩個整型對象 1 和 2 分別分配給變量 a 和 b贸人,字符串對象 "john" 分配給變量 c间景。
在 Python 中,變量就是變量艺智,它沒有類型倘要,我們所說的"類型"是變量所指的內(nèi)存中對象的類型。
標(biāo)準(zhǔn)數(shù)據(jù)類型
在內(nèi)存中存儲的數(shù)據(jù)可以有多種類型十拣。
Python定義了一些標(biāo)準(zhǔn)類型封拧,用于存儲各種類型的數(shù)據(jù)。
Python中有六個標(biāo)準(zhǔn)的數(shù)據(jù)類型:
- Number(數(shù)字)
- String(字符串)
- List(列表)
- Tuple(元組)
- Set(集合)
- Dictionary(字典)
Python3 的六個標(biāo)準(zhǔn)數(shù)據(jù)類型中:
- 不可變數(shù)據(jù)(3 個):Number(數(shù)字)夭问、String(字符串)泽西、Tuple(元組)
不可改變的數(shù)據(jù)類型,這意味著改變數(shù)字?jǐn)?shù)據(jù)類型會分配一個新的對象
- 可變數(shù)據(jù)(3 個):List(列表)甲喝、Dictionary(字典)尝苇、Set(集合)
可變數(shù)據(jù)類型铛只,意味著對以上數(shù)據(jù)類型進(jìn)行復(fù)制創(chuàng)建時,只是創(chuàng)建了相應(yīng)內(nèi)存內(nèi)容的一個新的連接
類型查看及判斷
內(nèi)置的type()
函數(shù)可以用來查詢變量所指的對象類型
type(counter)
使用print(type(counter)
方法輸出type()
結(jié)果時糠溜,python3顯示<class 'int'>
淳玩,而python2顯示<type 'int'>
此外還可以用isinstance()
來判斷:
isinstance(counter, int)
,函數(shù)返回一個布爾值
在使用時,兩種方法都可以用來判斷類型匹配非竿,似乎isinstance()
更方便些蜕着,實際上這兩種方法最重要的區(qū)別需要注意一下:
-
type()
不會認(rèn)為子類是一種父類類型。 -
isinstance()
會認(rèn)為子類是一種父類類型红柱。
class Foo(object):
pass
class Bar(Foo):
pass
print(type(Foo()) == Foo) #return True
print(type(Bar()) == Foo) #return False
print(isinstance(Bar(),Foo)) #return True
Number(數(shù)字)
數(shù)字?jǐn)?shù)據(jù)類型用于存儲數(shù)值承匣。
當(dāng)指定一個值時,Number對象就會被創(chuàng)建:var_int = 10
注意:
- Python3支持 int(整型)锤悄、float(浮點型)韧骗、bool(布爾型)、complex(復(fù)數(shù))
Python3只有一種整數(shù)類型 int零聚,表示為長整型袍暴,沒有 python2 中的 Long。python3的int沒有長度限制(實際上由于機(jī)器內(nèi)存的有限隶症,我們使用的整數(shù)是不可能無限大的)
- Python2支持int(有符號整型)政模、long(長整型)、float(浮點型)蚂会、bool(布爾型)淋样、complex(復(fù)數(shù))
long也可以代表八進(jìn)制和十六進(jìn)制,以L結(jié)尾以顯式聲明其類型胁住,建議不再使用這種類型
- 布爾型的值域為關(guān)鍵字True和False趁猴,注意首字母大寫,實際值分別對應(yīng)為1和0措嵌,可以和其他數(shù)值做計算
- 浮點型也可以使用科學(xué)計數(shù)法表示(
2.5e2 = 2.5 x 102 = 250.0
)
var_int = 10 #int型
var_bool = True #bool型
var_float = -21.9 #float型
var_complex = 4.53e-7j #complex型
var_science = 32.3e+5 #float型科學(xué)記數(shù)法
var_bool_add = var_int + var_bool #布爾值與int型做加減運(yùn)算
del var_int #通過使用del語句刪除單個對象的引用
del var_float, var_science,var_bool,var_complex,var_bool_add #通過使用del語句刪除多個對象的引用
String(字符串)
字符串或串(String)是由數(shù)字躲叼、字母、下劃線組成的一串字符,一般用單引號 ' 或雙引號 " 括起來企巢,同時使用反斜杠 \ 轉(zhuǎn)義特殊字符枫慷。
Python 沒有單獨(dú)的字符類型,一個字符就是長度為1的字符串浪规。
String類型可以作為一種字串列表對文本內(nèi)容進(jìn)行截取處理或听,有2種取值順序:
- 從左到右索引默認(rèn)0開始的,最大范圍是字符串長度少1
- 從右到左索引默認(rèn)-1開始的笋婿,最大范圍是字符串開頭
R | U | N | O | O | B |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 |
-6 | -5 | -4 | -3 | -2 | -1 |
實現(xiàn)從字符串中獲取一段子字符串可以使用 [頭下標(biāo):尾下標(biāo)] 來截取相應(yīng)的字符串誉裆,其中下標(biāo)是從 0 開始算起,可以是正數(shù)或負(fù)數(shù)缸濒,下標(biāo)可以為空表示取到頭或尾
[頭下標(biāo):尾下標(biāo)] 獲取的子字符串包含頭下標(biāo)的字符足丢,但不包含尾下標(biāo)的字符粱腻。
str = 'Hello World!'
print(str[0]) #'H' 字符串中的第一個字符
print(str[1:5]) #'ello' 第二位到第六位字符
print(str[2:]) #'llo World!' 從三個字符開始的字符串
print(str[:4]) #'Hell' 從開頭的4位字符
print(str[-7:-3]) #' Wor' 從倒數(shù)第7位到倒數(shù)第四位
print(str[:-3]) #'Hello Wor' 從倒數(shù)最后一位到倒數(shù)第四位
print(str[-3:]) #'ld!' 從倒數(shù)第三位到倒數(shù)第一位
print(str * 2) #'Hello World!Hello World!' 輸出字符串兩次
print(str + "TEST") #'Hello World!TEST' 輸出連接的字符串
print('H' in str) #如果字符串中包含給定的字符返回 True
print("M" not in str) #如果字符串中不包含給定的字符返回 True
字符串轉(zhuǎn)義
符串中的轉(zhuǎn)義字符為\,在其中包含的轉(zhuǎn)義字符如下:
轉(zhuǎn)義符 | 解釋 |
---|---|
\\ |
反斜杠\ |
\” |
雙引號 “ |
\’ |
單引號 ‘ |
\n |
換行 |
\r |
回車 |
\t |
制表 |
如果不想讓反斜杠發(fā)生轉(zhuǎn)義斩跌,可以在字符串前面添加一個 r,表示原始字符串:
print('Ru\noob') # Ru oob
print(r'Ru\noob') # Ru\noob
另外柬批,反斜杠()可以作為續(xù)行符袖订,表示下一行是上一行的延續(xù)
格式字符串 %
python格式化字符串有%和format_spec兩種字符串格式控制符氮帐。
字符串輸入數(shù)據(jù)格式類型(%格式操作符號)比較多,常用的就是 %s 和 %d
類型 | 含義 |
---|---|
%% | 百分號標(biāo)記 |
%c | 字符及其ASCII碼 |
%s | 字符串 |
%d | 有符號整數(shù)(十進(jìn)制) |
%e | 浮點數(shù)字(科學(xué)計數(shù)法) |
%f | 浮點數(shù)字(用小數(shù)點符號) |
%g | 浮點數(shù)字(根據(jù)值的大小采用%e或%f) |
使用格式規(guī)范(拓展):
%[(name)][flag][width][.][precision]type
name:可為空洛姑,數(shù)字(占位),命名(傳遞參數(shù)名,不能以數(shù)字開頭)以字典格式映射格式化,其為鍵名
flag = "+" | "-" | "#" | "0"
標(biāo)記格式限定符號,包含+-#和0,+表示右對齊(會顯示正負(fù)號),-左對齊,前面默認(rèn)為填充空格(即默認(rèn)右對齊)奄容,0表示填充0,#表示八進(jìn)制時前面補(bǔ)充0,16進(jìn)制數(shù)填充0x,二進(jìn)制填充0b
width:寬度(最短長度,包含小數(shù)點,小于width時會填充)
precision:小數(shù)點后的位數(shù)
type:輸入格式類型
樣例:
#簡單的:
print('本篇文章作者是%s ,發(fā)表于%s,年齡是%d歲'%('linghuanyun','CSDN',18))
#復(fù)雜的:
print("%.5f" %5) #輸出5.000000
print("%-7s3" %("python"))#輸出python 3
print("%.3e" %2016)#輸出2.016e+03,也可以寫大E
print("%d %s" %(123456,"myblog"))#輸出123456 myblog
print("%(what)s is %(year)d" % {"what":"this year","year":2016})#輸出this year is 2016
format_spec格式(拓展)
對字符串有更深的格式化需求時产徊,可以參考這種格式的樣例酌情使用
{[name][:][[fill]align][sign][#][0][width][,][.precision][type]}
用{}包裹name命名傳遞給format以命名=值 寫法,非字典映射
fill:指待格式化的字符串
align = "<" | ">" | "=" | "^"
#align是對齊方式,<是左對齊蜀细, >是右對齊舟铜,^是居中對齊奠衔。
sign = "+" | "-" | " "
#sign是符號, +表示正號痊夭, -表示負(fù)號
width:寬度(最短長度,包含小數(shù)點,小于width時會填充)
precision:小數(shù)點后的位數(shù)
type:輸入格式類型
樣例:
print("{:,}".format(123456)) #輸出123,456
print("{a:w^8}".format(a="8")) #輸出www8wwww,填充w
print("{0} with {1}".format("hello","fun")) #輸出hello with fun,這與CSharp的格式化字符(占位符)相似
print("{}{}{}".format("spkk",".","cn")) #輸出spkk.cn
print("{a[0]}{a[1]}{a[2]}".format(a=["spkk",".","cn"])) #輸出spkk.cn
print("{dict[host]}{dict[dot]}{dict[domain]}".format(dict={"host":"www","domain":"spkk.cn","dot":"."})) #輸出www.spkk.cn
print("{a}脏里".format(a="python",b="3")) #輸出python3
print("{who} {doing} {0}".format("python",doing="like",who="I")) #輸出I like python