1. 程式人生 > >pyton全棧開發從入門到放棄之數據類型與變量

pyton全棧開發從入門到放棄之數據類型與變量

映射類 分隔 無法 列表常用操作 可用 內置 鏈式 無需 上一個

一.變量

1 什麽是變量之聲明變量
#變量名=變量值
age=18
gender1=‘male‘ 
gender2=‘female‘
2 為什麽要有變量

變量作用:“變”=>變化,“量”=>計量/保存狀態
程序的運行本質是一系列狀態的變化,變量的目的就是用來保存狀態,變量值的變化就構成了程序運行的不同結果。
例如:CS槍戰,一個人的生命可以表示為life=active表示存活,當滿足某種條件後修改變量life=inactive表示死亡。
3 變量值之類型與對象
程序中需要處理的狀態很多,於是有了不同類型的變量值,x=‘egon‘,變量值‘egon‘存放與內存中,綁定一個名字x,變量值即我們要存儲的數據


在python中所有數據都是圍繞對象這個概念來構建的,對象包含一些基本的數據類型:數字,字符串,列表,元組,字典等
程序中存儲的所有數據都是對象,
一個對象(如a=1)有:
  一個身份(id)
  一個類型(type)
  一個值(通過變量名a來查看)
1 對象的類型也稱為對象的類別,python為每個類型都定制了屬於該類型特有的方法,極大地方便了開發者對數據的處理
2 創建某個特定類型的對象也稱為創建了該類型的一個實例工廠函數的概念來源於此
4 可變對象與不可變對象
實例被創建後,身份和類型是不可變的,
如果值是不可以被修改的,則是不可變對象
如果值是可以被修改的,則是可變對象

5 容器對象
某個對象包含對其他對象的引用,則稱為容器或集合

6 對象的屬性和方法

屬性就是對象的值,方法就是調用時將在對象本身上執行某些操作的函數,使用.運算符可以訪問對象的屬性和方法,如
a=3+4j
a.real

b=[1,2,3]
b.append(4)

7 身份比較,類型比較,值比較
x=1
y=1
x is y #x與y是同一個對象,is比較的是id,即身份
type(x) is type(y) #對象的類型本身也是一個對象,所以可以用is比較兩個對象的類型的身份
x == y #==比較的是兩個對象的值是否相等


7 變量的命名規範
  • 變量命名規則遵循標識符命名規則,詳見第二篇

8 變量的賦值操作

  • 與c語言的區別在於變量賦值操作無返回值
  • 鏈式賦值:y=x=a=1
  • 多元賦值:x,y=1,2 x,y=y,x
  • 增量賦值:x+=1
回到頂部

二.數據類型

回到頂部

2.1 什麽是數據類型及數據類型分類

程序的本質就是驅使計算機去處理各種狀態的變化,這些狀態分為很多種

例如英雄聯盟遊戲,一個人物角色有名字,錢,等級,裝備等特性,大家第一時間會想到這麽表示
名字:德瑪西亞------------>字符串
錢:10000 ------------>數字
等級:15 ------------>數字
裝備:鞋子,日炎鬥篷,蘭頓之兆---->列表
(記錄這些人物特性的是變量,這些特性的真實存在則是變量的值,存不同的特性需要用不同類型的值)

python中的數據類型
python使用對象模型來存儲數據,每一個數據類型都有一個內置的類,每新建一個數據,實際就是在初始化生成一個對象,即所有數據都是對象
對象三個特性
  • 身份:內存地址,可以用id()獲取
  • 類型:決定了該對象可以保存什麽類型值,可執行何種操作,需遵循什麽規則,可用type()獲取
  • 值:對象保存的真實數據
註:我們在定義數據類型,只需這樣:x=1,內部生成1這一內存對象會自動觸發,我們無需關心


這裏的字符串、數字、列表等都是數據類型(用來描述某種狀態或者特性)除此之外還有很多其他數據,處理不同的數據就需要定義不同的數據類型
標準類型 其他類型
數字 類型type
字符串 Null
列表 文件
元組 集合
字典 函數/方法
模塊










回到頂部

2.2 標準數據類型:

回到頂部

2.2.1 數字

定義:a=1

特性:

1.只能存放一個值

2.一經定義,不可更改

3.直接訪問

分類:整型,長整型,布爾,浮點,復數

回到頂部

2.2.1.1 整型:

Python的整型相當於C中的long型,Python中的整數可以用十進制,八進制,十六進制表示。

>>> 10
10         --------->默認十進制
>>> oct(10)
‘012‘      --------->八進制表示整數時,數值前面要加上一個前綴“0”
>>> hex(10)
‘0xa‘      --------->十六進制表示整數時,數字前面要加上前綴0X或0x

python2.*與python3.*關於整型的區別

python2.*
在32位機器上,整數的位數為32位,取值範圍為-2**31~2**31-1,即-2147483648~2147483647

在64位系統上,整數的位數為64位,取值範圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807
python3.*整形長度無限制

整型工廠函數int()

技術分享 python2.7 技術分享 python3.5 回到頂部

2.2.1.2 長整型long:

python2.*:
跟C語言不同,Python的長整型沒有指定位寬,也就是說Python沒有限制長整型數值的大小,
但是實際上由於機器內存有限,所以我們使用的長整型數值不可能無限大。
在使用過程中,我們如何區分長整型和整型數值呢?
通常的做法是在數字尾部加上一個大寫字母L或小寫字母l以表示該整數是長整型的,例如:
a = 9223372036854775808L
註意,自從Python2起,如果發生溢出,Python會自動將整型數據轉換為長整型,
所以如今在長整型數據後面不加字母L也不會導致嚴重後果了。

python3.*
長整型,整型統一歸為整型
技術分享 查看 回到頂部

2.2.1.3 布爾bool:

True 和False
1和0
回到頂部

2.2.1.4 浮點數float:

Python的浮點數就是數學中的小數,類似C語言中的double。
在運算中,整數與浮點數運算的結果是浮點數
浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,
一個浮點數的小數點位置是可變的,比如,1.23*109和12.3*108是相等的。
浮點數可以用數學寫法,如1.23,3.14,-9.01,等等。但是對於很大或很小的浮點數,
就必須用科學計數法表示,把10用e替代,1.23*109就是1.23e9,或者12.3e8,0.000012
可以寫成1.2e-5,等等。
整數和浮點數在計算機內部存儲的方式是不同的,整數運算永遠是精確的而浮點數運算則可能會有
四舍五入的誤差。

回到頂部

2.2.1.5 復數complex:

復數由實數部分和虛數部分組成,一般形式為x+yj,其中的x是復數的實數部分,y是復數的虛數部分,這裏的x和y都是實數。
註意,虛數部分的字母j大小寫都可以,
>>> 1.3 + 2.5j == 1.3 + 2.5J
True
回到頂部

2.2.1.6 數字相關內建函數

技術分享

回到頂部

2.2.2 字符串

定義:它是一個有序的字符的集合,用於存儲和表示基本的文本信息,‘’或“”或‘’‘ ’‘’中間包含的內容稱之為字符串
特性:
1.只能存放一個值
2.不可變
3.按照從左到右的順序定義字符集合,下標從0開始順序訪問,有序
補充:
  1.字符串的單引號和雙引號都無法取消特殊字符的含義,如果想讓引號內所有字符均取消特殊意義,在引號前面加r,如name=r‘l\thf‘
  2.unicode字符串與r連用必需在r前面,如name=ur‘l\thf‘
回到頂部

2.2.2.1 字符串創建

‘hello world’

回到頂部

2.2.2.2 字符串常用操作

移除空白
分割
長度
索引
切片
回到頂部

2.2.2.3 字符工廠函數str()

技術分享 字符串工廠函數 技術分享 python中str函數isdigit、isdecimal、isnumeric的區別 回到頂部

2.2.3 列表

定義:[]內以逗號分隔,按照索引,存放各種數據類型,每個位置代表一個元素
特性:
1.可存放多個值
2.可修改指定索引位置對應的值,可變
3.
按照從左到右的順序定義列表元素,下標從0開始順序訪問,有序
回到頂部

2.2.3.1 列表創建

list_test=[’lhf‘,12,‘ok‘]

list_test=list(‘abc‘)

list_test=list([’lhf‘,12,‘ok‘])
回到頂部

2.2.3.2 列表常用操作

索引
切片
追加
刪除
長度
切片
循環
包含
回到頂部

2.2.3.3 列表工廠函數list()

技術分享 查看

回到頂部

2.2.4 元組

定義:與列表類似,只不過[]改成()
特性:
1.可存放多個值
2.不可變
3.
按照從左到右的順序定義元組元素,下標從0開始順序訪問,有序
回到頂部

2.2.4.1 元組創建

ages = (11, 22, 33, 44, 55)

ages = tuple((11, 22, 33, 44, 55))
回到頂部

2.2.4.2 元組常用操作

索引
切片
循環
長度
包含
回到頂部

2.2.4.3 元組工廠函數tuple()

回到頂部

2.2.5 字典

定義:{key1:value1,key2:value2},key-value結構,key必須可hash
特性:
1.可存放多個值
2.可修改指定key對應的值,可變
3.無
回到頂部

2.2.5.1 字典創建

person = {"name": "sb", ‘age‘: 18}

person = dict(name=‘sb‘, age=18)
person = dict({"name": "sb", ‘age‘: 18})
person = dict(([‘name‘,‘sb‘],[‘age‘,18]))
{}.fromkeys(seq,100) #不指定100默認為None
註意:
>>> dic={}.fromkeys([‘k1‘,‘k2‘],[])
>>> dic
{‘k1‘: [], ‘k2‘: []}
>>> dic[‘k1‘].append(1)
>>> dic
{‘k1‘: [1], ‘k2‘: [1]} 
回到頂部

2.2.5.2 字典常用操作

索引
新增
刪除
鍵、值、鍵值對
循環
長度
回到頂部

2.2.5.3 字典工廠函數dict()

回到頂部

2.2.6 集合

定義:由不同元素組成的集合,集合中是一組無序排列的可hash值,可以作為字典的key
特性:
1.集合的目的是將不同的值存放到一起,不同的集合間用來做關系運算,無需糾結於集合中單個值
回到頂部

2.2.6.1 集合創建

{1,2,3,1}

定義可變集合set
>>> set_test=set(‘hello‘)
>>> set_test
{‘l‘, ‘o‘, ‘e‘, ‘h‘}
改為不可變集合frozenset
>>> f_set_test=frozenset(set_test)
>>> f_set_test
frozenset({‘l‘, ‘e‘, ‘h‘, ‘o‘})
回到頂部

2.2.6.2 集合常用操作:關系運算

   in
not in
==
!=
<,<=
>,>=
|,|=:合集
&.&=:交集
-,-=:差集
^,^=:對稱差分
回到頂部

2.2.6.3 集合工廠函數set()

技術分享 查看

回到頂部

2.2.7 bytes類型

定義:存8bit整數,數據基於網絡傳輸或內存變量存儲到硬盤時需要轉成bytes類型,字符串前置b代表為bytes類型

>>> x
‘hello sb‘
>>> x.encode(‘gb2312‘)
b‘hello sb‘
回到頂部

2.2.8 數據類型轉換內置函數匯總

技術分享

註:真對acsii表unichr在python2.7中比chr的範圍更大,python3.*中chr內置了unichar

回到頂部

三.運算符

1、算數運算:

技術分享

2、比較運算:

技術分享

3、賦值運算:

技術分享

4、位運算:

技術分享

註: ~ 舉例: ~5 = -6 解釋: 將二進制數+1之後乘以-1,即~x = -(x+1),-(101 + 1) = -110

按位反轉僅能用在數字前面。所以寫成 3+~5 可以得到結果-3,寫成3~5就出錯了

5、邏輯運算:

技術分享

and註解:

  1. 在Python 中,andor 執行布爾邏輯演算,如你所期待的一樣,但是它們並不返回布爾值;而是,返回它們實際進行比較的值之一。
  2. 在布爾上下文中從左到右演算表達式的值,如果布爾上下文中的所有值都為真,那麽 and 返回最後一個值。
  3. 如果布爾上下文中的某個值為假,則 and 返回第一個假值

or註解:

  1. 使用 or 時,在布爾上下文中從左到右演算值,就像 and 一樣。如果有一個值為真,or 立刻返回該值
  2. 如果所有的值都為假,or 返回最後一個假值
  3. 註意 or 在布爾上下文中會一直進行表達式演算直到找到第一個真值,然後就會忽略剩余的比較值

and-or結合使用:

  1. 結合了前面的兩種語法,推理即可。
  2. 為加強程序可讀性,最好與括號連用,例如:
    (1 and ‘x‘) or ‘y‘

6、成員運算:

技術分享

7.身份運算

技術分享

8.運算符優先級:自上而下,優先級從高到低

技術分享

回到頂部

四.標準數據類型特性總結

按存值個數區分

標量/原子類型 數字,字符串
容器類型 列表,元組,字典

按可變不可變區分

可變 列表,字典
不可變 數字,字符串,元組

按訪問順序區分

直接訪問 數字
順序訪問(序列類型) 字符串,列表,元組
key值訪問(映射類型) 字典

可變數據類型:在Id不變的情況下,value可以改變
num=10 列表
id 字典
type
value
不可變數據類型:value改變,id也跟著改變
數字
字符串
布爾

補充:
True===>1
false==>0

pyton全棧開發從入門到放棄之數據類型與變量