1. 程式人生 > >Python3基礎之學習筆記 第二天 模組 pyc 資料型別 列表 元組 字典 集合

Python3基礎之學習筆記 第二天 模組 pyc 資料型別 列表 元組 字典 集合

目錄

1.模組

2.pyc

6.列表

7.元組

8.字串

7.字典

8.集合

1.模組

  1.1 sys模組

sys.path儲存模組搜尋路徑,當匯入模組時,先在當前目錄下查詢模組,如果沒有,則去儲存模組搜尋路徑中去尋找

獲取命令列輸入引數

   1.2 os模組

執行命令,成功返回0

執行系統命令將結果儲存到cmd_res變數裡

2.pyc

python是一門先編譯後解釋的語言,編譯是自動完成的

當Python程式執行時,編譯的結果儲存在位於記憶體的PyCodeObject中,當Python程式執行結束時,Python直譯器則將PyCodeObject寫回到pyc檔案中。當Python程式第二次執行時,首先程式會在硬碟中尋找pyc檔案,若找到,則直接載入,否則就重複上面的過程。因此可以說pyc檔案是PyCodeObject的一種持久化儲存方式。

3.資料型別

Python3 中有六個標準的資料型別:

  • Number(數字)Python3 支援 int、float、bool、complex(複數)。在Python 3裡,只有一種整數型別 int,表示為長整型,沒有 python2 中的 Long。
  • String(字串)
  • List(列表)
  • Tuple(元組)
  • Set(集合)
  • Dictionary(字典)

Python3 的六個標準資料型別中:

  • 不可變資料(3 個):Number(數字)、String(字串)、Tuple(元組);
  • 可變資料(3 個):List(列表)、Dictionary(字典)、Set(集合)。

4.三元運算子

a,b,c=1,2,3
result=a if b<c else b
#如果b<c,result=1,否則result=2

5.Bytes

在Python3以後,字串和bytes型別徹底分開了。字串是以字元為單位進行處理的,bytes型別是以位元組為單位處理的。bytes資料型別在所有的操作和使用甚至內建方法上和字串資料型別基本一樣,也是不可變的序列物件。bytes物件只負責以二進位制位元組序列的形式記錄所需記錄的物件,至於該物件到底表示什麼(比如到底是什麼字元)則由相應的編碼格式解碼所決定。Python3中,bytes通常用於網路資料傳輸、二進位制圖片和檔案的儲存等等。可以通過呼叫bytes()生成bytes例項,其值形式為 b'xxxxx',其中 'xxxxx' 為一至多個轉義的十六進位制字串(單個 x 的形式為:\x12

,其中\x為小寫的十六進位制轉義字元,12為二位十六進位制數)組成的序列,每個十六進位制數代表一個位元組(八位二進位制數,取值範圍0-255),對於同一個字串如果採用不同的編碼方式生成bytes物件,就會形成不同的值.

b = b''         # 建立一個空的bytes
b = byte()      # 建立一個空的bytes
b = b'hello'    #  直接指定這個hello是bytes型別
b = bytes('string',encoding='編碼型別')  #利用內建bytes方法,將字串轉換為指定編碼的bytes
b = str.encode('編碼型別')   # 利用字串的encode方法編碼成bytes,預設為utf-8型別
bytes.decode('編碼型別')  #:將bytes物件解碼成字串,預設使用utf-8進行解碼。

對於bytes,我們只要知道在Python3中某些場合下強制使用,以及它和字串型別之間的互相轉換,其它的基本照抄字串。簡單的省事模式:

string = b'xxxxxx'.decode() 直接以預設的utf-8編碼解碼bytes成string

b = string.encode() 直接以預設的utf-8編碼string為bytes

6.列表

6.1列表簡介

List(列表) 是 Python 中使用最頻繁的資料型別。

列表可以完成大多數集合類的資料結構實現。列表中元素的型別可以不相同,它支援數字,字串甚至可以包含列表(所謂巢狀)。

列表是寫在方括號 [] 之間、用逗號分隔開的元素列表。

和字串一樣,列表同樣可以被索引和擷取,列表被擷取後返回一個包含所需元素的新列表。

列表擷取的語法格式如下:

變數[頭下標:尾下標]

索引值以 0 為開始值,-1 為從末尾的開始位置。

t=['a','b','c','d']
#'a'的索引為0或者-4,'d'的索引為3或者-1
>>>t[0]
a
>>>t=[1:3]
#1:3是隻有1和2不包括3的
['b','c']

6.2列表使用

#追加
names=['zhangsan','lisi']
names.append("小明")
#插入
#names=['zhangsan','lisi','小明']
names.insert(1,'小紅')
#names=['zhangsan','小紅','lisi','小明']
#刪除
names.remove('小紅')
del names[1]
names.pop()#刪除最後一個
names.clear()#清空列表
del names#刪除列表
print(names.index('小紅'))#獲取下標
print(names.count(‘小紅’))#獲取次數
#反轉
names.reverse()
#排序
names.sort()
names2=[1,2,3,4]
names.extend(names2)#將names2列表新增到names列表裡
#複製
names3=names2.copy()#複製一份如果列表裡包含列表,列表裡列表裡改變了,複製的也會改變
a=['a','b','c',[1,2,3]]
b=a.copy()
a[3][0]=4
b=['a','b','c',[4,2,3]]
#淺copy應用在共同變數
#三種淺複製方法
b=copy.copy(a)
b=copy[:]
b=list(a)
#要完整複製使用copy模組
import copy
b=a.deepcopy()
for i in b:
    print(i)
print(b[::2])#print(b[0:-1:2])
#列印下標和值,enumerate(b)結果是一個元組
for index,item in enumerate(b):
    print(index,item)
#判斷列表長度
print(len(b))
#列印紅字
print('\033[31;1m紅字\033[0m')

7.元組

#元組和list差不多,只是一旦建立無法改變
name=(1,2)
#只有index和count方法

8.字串

name="my \tname is zhangsan"
#首字母大寫
print(name.capitalize())
#統計a個數
print(name.count('a'))
#居中
print(name.center(50,"-"))#居中不足用-補充
#判斷字串以什麼結尾
print(name.endswith("an"))
#將tab轉成多少個空格
prnt(name.expandtabs(tabsize=30))
#查詢字元下標
print(name.find("y"))
#格式化map
print(name.format_map({'name':'xia'}))
#判斷是否是字母或數字包含小數
print(name.isalnum())
#判斷是否純字母
print(name.isalpha())
#判斷是否是十進位制
print(name.isdecimal())
#判斷是否是整數
print(name.isdigit())
#判斷是不是一個合法的識別符號(變數名)
print(name.isidentifier())
#判斷是否全部小寫
print(name.islower())
#判斷是否全部大寫
print(name.isupper())
#join將列表變為字串
print(','.join(['1','2','3']))#結果為1,2,3
#長度不足50右邊以*填充
print(name.ljust(50,'*'))
#長度不足50左邊以*填充
print(name.rjust(50,'*'))
#去除空格和回車
print('\nalex'.strip())
#將字串轉換成對應值
p=str.maketrans('abcdef','123456')
print('a'.translate(p))
#結果為 1
#替換
print('a'.replace('a','b',1))
#找到最右邊的值下標,前面有的忽略
print('alex lil'.rfind('l'))
#結果為7
#分割成列表
print('a b'.split(' '))
#大寫變小寫,小寫變大寫
pritn('abdcA'。swapcase())
#不夠左邊0填充
print('a'.zfill(50))

7.字典

字典是一種key-value的資料型別 

語法:

info={
    'name':'zhangsan',
    'age':22
}

字典的特性:

    dict是無序的,key必須是唯一的,所以天生去重

#修改
info['name']="lisi"
#建立
info['grade']=80.5
#刪除
del info['name']
info.pop('name')
info.popitem()#隨機刪除
#查詢
print(info.get('name'))#沒有返回None
#判斷key是否存在
print('name' in info)
#獲取所有值
print(info.values())
#獲取所有keys
print(info.keys())
#先查詢是否存在key為school,沒有則建立有則返回
info.setdefault('school','清華大學')
#將字典合併有的話就更新
a={'bir':'7月22日'}
info.update(a)
#將一個字典轉換成列表,鍵和值變為元組
info.items()
#建立一個字典並都初始化為後面的值,共享一個記憶體地址
c=dict.fromkeys(['name','age'],['zhangsan',22])
#字典的迴圈
for i in info:
    print(i,info[i])#i為key
for k,v in info.items():
    print(k,v)

8.集合

集合(set)是一個無序不重複元素的序列。

基本功能是進行成員關係測試和刪除重複元素。

可以使用大括號 { } 或者 set() 函式建立集合,注意:建立一個空集合必須用 set() 而不是 { },因為 { } 是用來建立一個空字典。

建立格式:

parame = {value01,value02,...}
或者
set(value)
set_1=set([1,2,3,4,5])
set_2=set([2,4,6,7,8])
#獲取交集
print(set_1.intersection(set_2))
print(set_1&set_2)
#並集
print(set_1.union(set_2))
print(set_1|set_2)
#差集(保留1裡面有的2裡面沒有的)
print(set_1.difference(set_2))
print(set_1-set_2)
#判斷set_1是否是set_2的子集
print(set_1.issubset(set_2))
#對稱差集將兩個集合合併成一個集合去除重複的
print(set_1.symmetric_difference(set_2))
print(set_1^set_2)
#判斷集合是否有交集
print(set_1.isdisjoint(set_2))
#基本操作
#新增
set_1.add('20')
#新增多個
set_1.update([33,44])
#刪除
set_1.remove('1')
#長度
len(set_1)
#x是否是set_11成員
x in set_1
#x not in set_1
x not in set_1
#測試是否s中的每一個元素都在set-1中
s.issubset(set_1)
s<=set_1
#刪除並返回刪除的元素
set_1.pop()
#刪除固定元素
set_1.discard(1)