python學習筆記-基礎
#=====================python筆記=====================
學習環境:python3.7 + JetBrains PyCharm 2018.2.6 x64
根據自身學習情況進行記錄
#=====================註釋=====================
# 註釋的寫法:
#單行註釋
'''
第一行註釋
第二行註釋
'''
#=====================變數=====================
#數字型別的變量表示
二進位制:0b0001;八進位制:0o0767;十六進位制0xFFFF
#=====================運算子=====================
a = 9+3-2 # +,-跟正常算術運算子一模一樣
a = 9 * 4 # 乘號用星號(*)代替
a = 9/4 # 除號用斜槓(/)代替,得到的是2.25
a = 9 % 4 # % 取餘運算
a = 9 // 4 # // 表示取商運算,也叫地板除
a = 9 ** 4 # ** 表示冪運算
#邏輯運算的短路
#邏輯表示式中,前一個表示式如果能運算出最終結果,則不在向下計算
a = True or xxxxxxxxxxx
#=====================引數=====================
# 引數混合呼叫:定義的時候一般找普通引數,關鍵字引數,收集引數tuple,收集引數dict
def func(a, b=1, *l, **d)
#收集引數的解包問題
arg = ([1, 2, 3, 4],) # args的表示形式是字典內一個list型別的元素
#list、tuple需要使用"*"進行解包;dict 使用"**"進行解包
#=====================函式文件=====================
#在函式內部開始的第一行使用三引號字串定義符
# 檢視函式文件
help(stu)
stu.__doc__
#=====================變數作用域=====================
全域性(global): 在函式外部定義
區域性(local):在函式內部定義
globals();locals() #通過globals和locals顯示出區域性變數和全域性變數
#字串當成表示式來執行
eval("print('')")函式:返回執行後的結果
exec("print('')")函式:不返回結果
#=====================list=====================
l = [a, b, c] 或 l = list() #list的建立
del l, #list物件的刪除
#list分片:
#陣列預設增長值為1,最後一個數字的下標是-1
#list的值擷取:list[1:5];list[:5];list[1:];list[:];list[-5:-1];list[-1:-5:-1]
#列表遍歷:算數+巢狀+for+條件表示式
c = [ 10*m + n for m in a for n in b if m+n < 250]
#list相關的常用函式
len(l), max(l), min(l),
l("123") #轉化成list型別
l.count("111") #查詢指定元素在列表中的數量
l.append("111") #list的最後一位追加指定元素
l.insert(3,111) #list的指定位置插入指定元素,大量消耗資源
l.pop() #list刪除最後一位元素,返回最後一位元素
l.remove("111") #list刪除指定的元素
l.index("111") #指定元素在list中的索引位置,如果需要查詢的數字是多個,則返回第一個
del l[1] #list刪除指定位置的元素
l.reverse() #list的翻轉(同地址)
l.clear() #list的清空
l.extend(list2) #list的擴充套件(同地址),也可使用"+","*"操作(不同地址)
list2 = list1.copy() #list的淺拷貝(不同地址的list)(淺拷貝:只拷貝一層地址),傳值(地址不同)
#=====================tuple=====================
#是一個不可更改的list。
t = (1,) 或 t = 1 或 t = 1,2,3,4 #list的建立,注意:tuple中只有一個整數表示
t = () #定義一個空的tuple
#tuple相關的常用函式
tuple([1,2,3,4,5]) #轉化成tuple型別
#list具有的一些操作基本一致,比如索引,分片(區別:tuple切片可以超界),序列相加,相乘,成員資格操作等
#雙層元組的遍歷
t = ((1,2,3), (2,3,4),(3,4,5))
for k,m,n in t:
pass
#=====================set=====================
#一堆確定的"無序"的"唯一"的資料
s = set() 或 s = {a, b, c} #set的建立,"{}"中一定要有元素,否則set為dict型別
#集合內部資料元素具有唯一性,可以用來排除重複資料
#集合內的資料,str, int, float, tuple,冰凍集合等,即內部只能放置可雜湊資料
#len,min,max,copy與list用法相同
s.add("111") #set追加指定元素
s.clear() #set的清空
s.remove("111") #remove:移除指定的元素,直接改變原有值,如果要刪除的值不存在,報錯。
s.discard("111") #discard:移除集合中指定的值,跟remove一樣,如果要刪除的值不存,不報錯。
s.pop() #隨機移除一個元素,返回這個元素
# 集合函式
# intersection: 交集
# difference:差集,也可以使用"-"操作
# union: 並集
# issubset: 檢查一個集合是否為另一個子集
# issuperset: 檢查一個集合是否為另一個超集
s = frozenset() #冰凍集合是不可以進行任何修改的集合
#=====================dict=====================
#dict的建立
d = dict()
d = {}
d = {1:"1", 2:"2", 3="3"}
d = dict({1:"1", 2:"2", 3="3"})
d = dict(a=1, b=2, c=3)
d = dict( [("one",1), ("two",2), ("three",3)])
#字典是序列型別,但是是無序序列,所以沒有分片和索引
#字典中的資料每個都有鍵值對組成,即kv對
#key: 必須是可雜湊的值,比如int,string,float,tuple, 不能是 list,set,dict 不行
#value: 任何值
a = d["one"] #dict的訪問
d["two"] = 2 #dict的修改
del d["two"] #dict元素的刪除
#dict在in,not in中檢測的是key值
---與list、tuple、set不同的特殊用法
for k,v in dict.item()
#dict的生成
d = {k:v for k,v in dist.item() if v % 2 == 0}
#dict的相關函式
len(),max(),min(),dict()
str(d) #返回字串
d.items() #返回字典的鍵值對組成的元組格式,同理keys(),values()
d.get() #根據指定鍵返回相應的值(沒有返回None),與dict["one"]區別。
# fromkeys: 使用指定的序列作為鍵,使用一個值作為字典的所有的鍵的值
# 注意fromkeys兩個引數的型別
# 注意fromkeys的呼叫主體
l = ["eins", "zwei", "drei"]
d = dict.fromkeys(l, "111")
#=====================書寫規範=====================
#定義及呼叫是的引數寫法:函式內"="前後不加空格,","後加空格
def function(a=a, b=0, c="11"):
pass
function(a=a, b=0, c="11")
#定義變數的寫法:"="前後加空格
a = "aa"
b = 0
#=====================補充=====================
#python無"switch-case"語句
#range[1,5],list[1,6],包含左,不包含右
#randint是特例,他左右都包含
a,b = b,a #python的變數交換
type() #返回"()"內的型別
id() #返回id號,以判斷引用地址
#思考:a = b之後,a和b的id號一樣,為什麼再b賦新值後,a和b的值不一樣?
#解答:傳址(複雜變數)與傳值的區別
#可雜湊資料與不可雜湊資料:
#可變型別的資料不可雜湊,如list,字典:同值不同址,不同值同址
#數值、字母、字串、數字、元組不可變:同值同址,不同值不同址