一、資料型別是什麼鬼?

計算機顧名思義就是可以做數學計算的機器,因此,計算機程式理所當然地可以處理各種數值。但是,計算機能處理的遠不止數值,還可以處理文字、圖形、音訊、視訊、網頁等各種各樣的資料,不同的資料,需要定義不同的資料型別。

二、整形和浮點型


整形也就是整數型別(int)的,在python3中都是int型別,沒有什麼long型別的,比如說存年齡、工資、成績等等這樣的資料就可以用int型別,有正整數、負整數和0,浮點型的也就是小數型別(folat)的,帶小數點的

    age = 18
b = -50
c = 5.222

三、布林型別

什麼是布林型別,布林型別就是真和假,只有這兩種,True和Fasle,非真即假,除了True和False還有0和1,非0即真

a = True
b = False

四、字串和字串操作

上面說了存數字,那要是想存自己的名字呢,那用int型別的就不行了,不能一個人的名字叫數字吧,這樣怎麼辦呢,就有另一種資料型別應運而生,就是字串,它可以存任意型別的字串,比如名字,一句話等等。

  name = 'Sriba'
msg = 'Welcome to my blog.'

字串還有很多內建的方法,對字串進行操作,常用的方法如下,下面註釋帶有是否的,返回的都是一個布林值:

name = 'my \t name is {name},age is {age}.'
print(name.capitalize()) # 首字母大寫
print(name.center(50, '-')) # 50個-,把name放中間
print(name.startswith('u')) # 是否以x開頭
print(name.endswith('u')) # 是否以x結尾
print(name.expandtabs(30)) # 補\t的次數
print(name.find('n')) # 查詢字串的索引,返回下標,若沒有找到返回-1
print(name.index('a'))# 查詢字串的索引,返回下標,若沒有找到會報錯
print(name.format(name='chenshifeng', age=18)) # 這個是格式字串,在第一節的部落格裡面已經寫了
print(name.format_map({'name': 'chenshifeng', 'age': 19})) # 這個也是格式化字串,後面跟的是一個字典,字典在後面也會寫
print('abA123'.isalnum()) # 是否包含數字和字母
print('abA'.isalpha()) # 是否是英文字母
print('122'.isdigit()) # 是否是數字
print('aa'.isidentifier()) # 是否是一個合法的變數名
print('aa'.islower()) # 是否是小寫字母,字串中必須全部是小寫才行
print('AA'.isupper()) # 是否是大寫字母,字串中不能包含小寫字母
print('Loadrunner Book'.istitle()) # 是不是一個標題,判斷首字母是否大寫
print('+'.join(['hehe', 'haha', 'ee'])) # 拼接字串,拼接元素必須是字串
print(name.lower()) # 變成小寫
print(name.upper()) # 變成大寫
print('\nmysql \n'.lstrip()) # 預設去掉左邊的空格和換行
print('\nmysql \n'.rstrip()) # 預設去掉右邊的空格和換行
print('\nmysql \n'.strip()) # 預設去掉兩邊邊的空格和換行
print('achenshifenga'.strip('a'))  #去掉兩邊的a
p = str.maketrans('abcdefg', '1234567') # 前面的字串和後面的字串做對映
print('cc ae gg'.translate(p)) # 輸出按照上面maketrans做對映後的字串
# 下面是反解
new_p = str.maketrans('1234567', 'abcdefg')
print('cc ae gg'.translate(new_p))
print('mysql is db.'.replace('mysql', 'oracle', 1)) # 替換字串
print('mysql is is db'.rfind('is')) # 返回最右邊字元的下標
print('1+2+3+4'.split('+')) # 切割字串,返回一個list
print('1+2+3\n1+2+3+4'.splitlines()) # 按照換行符分割
print('Abcdef'.swapcase()) # 大小寫反轉

 五、列表和列表操作

上面說了字串和整形,那現在要是想存一個班級的人的名字,這個班有200個人,怎麼存呢,用字串的話,那就是names = 'marry lily king .....'這樣,但是這樣存是可以存,那要是想取到某個人的名字怎麼取呢,不能再去裡面看一遍吧,那累死人了,為了解決這個問題,又有一種新的資料型別應運而生,那就是列表,這也是我們在以後的開發過程中,最常用的資料型別之一,列表也叫陣列,列表定義,使用[]即可;列表裡面可以再套列表,一個裡面套一個列表,叫二維陣列;一個裡面套一個列表,裡面的列表再套一個列表,這個叫三維陣列,套幾層就是幾維,定義格式如下:

    list1 = [1,2,3,4] #一個普通的陣列
list2 = ['marry','lily',[50,'monkey']] #二維陣列
list3 = ['name','sex',['lily',124,['aaaa','bbb']]] #三維陣列

通過下標訪問列表中的元素,下標從0開始計數,也就是說,比如說一個列表,有個5元素,那麼它第一個元素下標就是0,第二個就是1,以此類推,字串也有下標,和列表一樣 對列表的操作,分以下幾種增、刪、改、查

增:

            msg = '你好'
name = ['chenshifeng','wuqibiao','laodeng']
name.append(msg)#從最後面開始插入
name.insert(1,msg) #從指定位置插入,這個1代表下標
print(name)

改:

            msg = '你好'
name = ['chenshifeng','wuqibiao','laodeng']
name[1] = 'baby' #修改指定位置的值

查:

            msg = '你好'
name = ['chenshifeng','wuqibiao','laodeng']
print(name[0])#獲取第一個元素
print(name[-1])#-1代表最後一個元素

刪:

            msg = '你好'
name = ['chenshifeng','laowu','laodeng']
name.remove('baby')#刪除指定的值
del name[0]#刪除指定位置的值
name.pop()#不傳入下標的話,刪除最後一個值,傳入下標刪除指定位置的值
name.clear()#清空列表 

列表操作,一些內建的方法:

            msg = '你好'
name = ['chenshifeng','laowu','laodeng']
name2 = [1,2,3,4,['hehe','haha']]
print(name.index('laodeng'))#取索引
print(name.count('laodeng'))#取laodeng出現的次數
name.clear()#清空列表
name.sort()#排序,根據阿斯克碼來排序
name.extend(name2)#擴充套件列表,也就是把name2的值加到name裡面
name.reverse()#反轉陣列,會改變原陣列的值

切片,切片也就是另一種方式獲取列表的值,它可以獲取多個元素,可以理解為,從第幾個元素開始,到第幾個元素結束,獲取他們之間的值,格式是name:[1:10],比如說要獲取name的第一個元素到第五個元素,就可以用name[0:6],切片是不包含後面那個元素的值的,記住顧頭不顧尾前面的下標如果是0的話,可以省略不寫,這樣寫,name[:6],切片後面還有可以寫一個引數,叫做步長,也就是隔多少個元素,取一次,預設可以不寫,也就是隔一個取一次,切片操作也可以對字串使用,和列表的用法一樣,例項如下:

            names = ['chenshifeng','laowu','laodeng','laotian','zhangdezi']
names[1:4] #取下標1至下標4之間值,包括1,不包括4
names[1:-1] #取下標1至-1的值,不包括-1
names[0:3] #取下標0至3的值,不包括3
names[:3] #取下標0至3的值,不包括3,和上面的效果一樣,0可以省略不寫
names[2:]#取從第二個下標開始的後面所有元素
#下面是加上步長的
nums = [1,2,3,4,5,6,7,8,9,10]
nums[::2]#這個代表取所有的元素,然後每隔2個元素取一個
>>> 1 3 5 7 9 #輸出的結果
nums[1:8:3]#代表取第二個元素開始,到第八個結束,隔3個取一次
>>>[2,5,8] #輸出結果

六、元組

元組其實和列表一樣,不一樣的是,元組的值不能改變,一旦建立,就不能再改變了,比如說,要存資料庫的連線資訊,這個連線資訊在程式執行中是不能被改變的,如果變了那資料庫連不上了,就程式就完犢子了,這樣的就可以使用元組了,元組呢,也提示別人,看到是元組的話,就說明這個值是不能被改變的,元組的定義方式是用(),小括號;元組只有兩個方法,那就是count和index

  mysql_coon = ('192.168.1.109','root','123456',3306,'my_db')#定義元組

七、字典

上面說了,整形、浮點型、字串、列表和元組,下面說個新的資料型別,字典,字典也是我們開發過程中最常用的一種資料型別;想一個問題,現在要存整個北京市的所有人的資訊,每個人有姓名、年齡、性別、家庭住址、學歷等等,那要是用列表存的話,那就得定義N多個數組,然後存上每個人的資訊,那累死人了。。。這時候又有一種新的資料型別出現了,那就是字典,dict,全稱是dictionary,它具有極快的查詢速度;字典是一種key-value的資料型別,比如說要存每個人的資訊,那麼每個人的編號就是key,value就是每個人的資訊,這樣的話,一個字典就能存所有人的資訊了。字典的定義使用{},大括號,每個值用“,”隔開,key和value使用“:”分隔。

舉個列子,如果用列表存每個人的資訊的話,需要用兩個列表,一個存人名,一個存資訊:

    names = ['marry','amy','lily']
infos = [[18,18612512981,'北京'],[20,18612512991,'山東'],[25,18612532981,'河南']]

給一個名字,如果要查他的對應資訊,那就要先從names裡面找到它的位置,然後再從infos中找到它的資訊,如果這個列表越長,那麼它的查詢速度越慢。

如果用字典實現的話,只需要一個名字和資訊對應的一個表,這樣就很快的根據名字找到它對應的資訊,無論這個表有多大,查詢速度都不會變慢。

   infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
infos['marry'] #取marry的資訊

為什麼dict查詢速度這麼快?因為dict的實現原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往後翻,直到找到我們想要的字為止,這種方法就是在list中查詢元素的方法,list越大,查詢越慢。

第二種方法是先在字典的索引表裡(比如部首表)查這個字對應的頁碼,然後直接翻到該頁,找到這個字。無論找哪個字,這種查詢速度都非常快,不會隨著字典大小的增加而變慢,這種就是字典的實現方式。

字典的特性:

字典是無序的,因為它沒有下標,用key來當索引,所以是無序的

字典的key必須是唯一的,因為它是通過key來進行索引的,所以key不能重複,天生就去重

字典的增刪改查:

增:

   infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
infos['andy']=[22,18712512981,'河北']#增加

修改:

        infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
infos['marry']=[38,18612512981,'北京']

刪除:

        infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
infos.pop('marry')#標準的刪除方法
del infos['marry']#使用del方法刪除
info.popitem() #隨機刪除一個值

查詢:

        infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
infos.get('maryy')#獲取marry的資訊,這種方式如果key不存在的話,會返回None
infos['marry']#獲取marry的資訊,這種方式如果key不存在的話,會報錯
'marry' in infos #判斷marry是否在這個字典中,返回True或者False

字典的內建方法:

        dic = {'stu1':'chenshifeng','stu2':'laowu','stu3':'laodeng'}
print(dic.values())#列印所有value
print(dic.keys())#列印所有的key
print(dic.setdefault('stu1','zhangdezi'))#如果這個key存在的話,那就不動它,不存在的話,新增一個
dic2 = {'stu1':'sriba','stu10':'baidu'}
dic.update(dic2)#更新字典值,如果key存在的話,就更新,不存在的話就新增
print(dic.items())#字典轉換成一個list

迴圈字典:

        dic = {'stu1':'chenshifeng','stu2':'laowu','stu3':'xiaotian'}
for k in dic:
print(k,dic[k])#列印key和value的值,推薦使用這種方式,速度快
for k,v in dic.items():
print(k,v)#列印key和value的值,這種方式不推薦,因為會把字典轉換成列表,效率不高

八、資料運算

算數運算子

操作符 描述 例子
+ 加法 - 對操作符的兩側增加值 a + b = 30
- 減法 - 減去從左側運算元右側運算元 a - b = -10
* 乘法 - 相乘的運算子兩側的值 a * b = 200
/ 除 - 由右側運算元除以左側運算元 b / a = 2
% 模 - 由右側運算元和餘返回除以左側運算元 b % a = 0
** 指數- 執行對操作指數(冪)的計算 a**b = 10 的冪 20
// 地板除 - 運算元的除法,其中結果是將小數點後的位數被除去的商 9//2 =  4 而 9.0//2.0 = 4.0

比較運算子

運算子 描述 例項
== 檢查兩個運算元的值是否相等,如果是則條件變為真 (a == b) 為false
!= 檢查兩個運算元的值是否相等,如果值不相等,則條件變為真 a != b) 為 true.
> 檢查左運算元的值是否大於右運算元的值,如果是,則條件成立 (a > b) 不為 true.
< 檢查左運算元的值是否小於右運算元的值,如果是,則條件成立 (a < b) 為 true.
>= 檢查左運算元的值是否大於或等於右運算元的值,如果是,則條件成立 (a >= b) 不為 true.
<= 檢查左運算元的值是否小於或等於右運算元的值,如果是,則條件成立 (a <= b) 為 true.

Python賦值運算子

運算子 描述 示例
= 簡單的賦值運算子,賦值從右側運算元左側運算元 c = a + b將指定的值 a + b 到  c
+= 加法AND賦值操作符,它增加了右運算元左運算元和結果賦給左運算元 c += a 相當於 c = c + a
-= 減AND賦值操作符,它減去右邊的運算元從左邊運算元,並將結果賦給左運算元 c -= a 相當於 c = c - a
*= 乘法AND賦值操作符,它乘以右邊的運算元與左運算元,並將結果賦給左運算元 c *= a 相當於 c = c * a
/= 除法AND賦值操作符,它把左運算元與正確的運算元,並將結果賦給左運算元 c /= a 相當於c = c / a
%= 模量AND賦值操作符,它需要使用兩個運算元的模量和分配結果左運算元 c %= a 相當於 c = c % a
**= 指數AND賦值運算子,執行指數(功率)計算操作符和賦值給左運算元 c **= a 相當於 c = c ** a
//= 地板除,並分配一個值,執行地板除對操作和賦值給左運算元 c //= a 相當於 c = c // a

邏輯運算子

運算子 描述 示例
and 所謂邏輯與運算子。如果兩個運算元都是真的,那麼則條件成立。 (a and b) 為 true.
or 所謂邏輯OR運算子。如果有兩個運算元都是非零然後再條件變為真。 (a or b) 為 true.
not 所謂邏輯非運算子。用於反轉運算元的邏輯狀態。如果一個條件為真,則邏輯非運算子將返回false。 not(a and b) 為 false.

身份運算子

運算子 描述 示例
is is判斷兩個識別符號是否引用自一個物件 x is y,如果id(x)等於id(y) ,返回True
is not is not判斷兩個識別符號是否引用不同的物件 x is not y,如果id(x)不等於id(y),返回True

九、模組初識

模組是匯入別人已經寫好的python檔案,裡面已經有一些寫好的功能,可以直接拿來使用,使用import
關鍵字匯入需要的模組,匯入模組時,預設會在當前目錄下去尋找該檔案,如果當前目錄下沒有的話,回去python的環境變數中找,如果找不到就報錯,下面有一些簡單的python標準模組,os和sys模組:

    import sys,os #匯入sys模組和os模組
arg = sys.argv #獲取傳入的引數,第一個引數是檔名,返回的是一個list
sys.path #python的環境變數,返回的也是一個list
os模組是和作業系統相關的命令
os.system('ls')#執行作業系統命令,返回的是一個執行結果,成功或者失敗,成功返回0
os.popen('ls') #這個也是執行作業系統的命令,和system區別就是,這個命令返回的是執行結果,也就是返回了什麼東西,而不是返回的執行成功或者失敗,讀取內容需用read方法
os.popen('ls').read()
os.mkdir('test')#建立資料夾
os.path.sep#路徑分隔符,根據不同的作業系統,分割符會變化

十、三元運算子

三元運算子就是在賦值變數的時候,可以直接給它加上判斷,然後賦值

    res = 值1 if 條件 else 值2
a = 5
b = 4
c = a if a>b else b #如果a大於b的話,c=a,否則c = b ,如果不用三元運算子的話,就得下面這麼寫
if a>b:
c = a
else:
c = b

當然三元運算子也可以用在列表和字典中,這麼寫的話,就比較簡單了,不過如果搞不明白三元運算子的話,還是不用為好

    nums = [1,2,3,4,5,6,7,8,9,10]
odd_num = [num for num in nums if num%2!=0]#迴圈nums,如果nums裡面的值,不能被2整除的話,就寫到odd_num這個list中,也就是算奇數,等於下面這麼寫
odd_num = []
for num in nums:
if num % 2 !=0:
odd_num.append(num)

轉載自https://www.cnblogs.com/feng0815/p/7583451.html