一、SET集合
set集合是無序的,不重複的。
1.建立
第一種:
s1 = {"123","456"} #集合用大括号包起來,字元串用逗号隔開
第二種:
li = [11,22,33]
s2 = set(li)
#當執行set()的時候,實際上是調用set的__init__來對li裡邊的元素做一個for循環,然後轉成set。
2.功能
1.s1.add() #增加元素
2.s1.clear() #清空集合内容
3.s1.copy()#淺複制
4.s1.difference #a中存在,b中不存在
5.s1.symmetric_difference #a中存在,b中不存在拿出來 和 b中存在,a中不存在拿出來(也稱對稱差級)
6.s1.difference_update #a中存在,b中不存在拿出來,然後重新指派給左邊的變量s1
7.s1.symmetric_difference_update #a中存在,b中不存在拿出來 和 b中存在,a中不存在拿出來,然後重新指派給左邊的變量s1
8.s1.discard #移除特定元素,如果沒有元素不報錯
9.s1.remove #移動特定元素,如果沒有會報錯
10.s1.pop #随機移除,把移除的值賦給變量
11.s1.intersection #取兩個變量的交集(就是兩個變量裡邊相同的元素)
12.s1.inteersection_update #取兩個變量的交集,然後指派給左邊的變量s1
13.s1.isdisjoint #如果有交集,傳回True,否則傳回False
14.s1.issubset #一個變量是否是另一個變量的子序列
15.s1.union #并集,就是把兩個變量的元素聯合起來
16.s1.update #批量添加元素,接收一個可疊代的對象,例如:清單、元祖、字元串
3.集合練習題
有兩個字典,現在要把新的字典裡邊的内容添加到舊的字典裡,找出
1.應該删除的項
2.應該添加的項
3.應該更新的項
需求分析:
1.首先确定可以用set功能來實作
2.需要把字典的keys讀取出來轉成set集合
3.找出舊字典應該删除、添加、更新的項
#舊字典
old_dict = {
'#1':8,
'#2':4,
'#4':2,
}
#新字典
new_dict = {
'#1':4,
'#3':2,
old_set = set(old_dict.keys()) #把舊字典keys轉換成集合
new_set = set(new_dict.keys()) #把新字典keys轉換成集合
remove_set = old_set.difference(new_set) #找出應該删除的
add_set = new_set.difference(old_set) #找出應該添加的
update_set = old_set.intersection(new_set) #找出應該更新的
print(remove_set,add_set,update_set) #列印找出的删除、添加、更新
輸出:
{'#4'} {'#3'} {'#1', '#2'}
二、函數
函數分為自定義函數和内置函數
1、定義函數
1.函數關鍵字def
2.函數名
3.寫個()
4.函數體(具體内容)
5.傳回值
6.自定義的函數自己不被執行
例如:
def aa():
函數體
在PyCharm中可以點選代碼左端空白處,可以打斷點執行代碼,檢視代碼執行流程。
2、執行函數傳回值
函數利用try retrun來實作傳回值。
try :
函數體
except:
return False #失敗傳回False
else:
return True #成功傳回True
注意:
1.在函數中一旦執行了return,函數的執行過程立即終止,不會再往下走!
2.函數中如果沒有指定return,預設python傳回一個return值為None
3、函數的基本參數
1.普通參數 #一一對應,嚴格按照順序執行,将實際參數指派給行為參數;
2.預設參數 #當函數執行的時候沒有給變量指派的時候,使用預設參數;設定預設參數的行為參數要放到最後,可以連着多個;
3.指定參數 #給指定的參數指派
(函數冒号左邊括号裡邊的叫做行為參數;執行函數的時候,括号裡邊的參數叫做實際參數。)
4、函數的動态參數
1.行為參數之前加一個* 就可以接受多個實際參數(接收疊代參數清單、元組、字元串,不接收字典)輸出格式為元祖,按順序處理。
def f1(*args):
print ("abc","123")
例一:當實際參數前不加*時,函數會把疊代參數整體作為一個元素放到元祖裡。
def f1(*args):
print (args)
li = [11,22]
f1(li)
輸出:([11,22])
例二:當實際參數前也加一個*時,函數會對疊代參數裡邊的所有元做一個for循環,然後指派到元祖裡;
def f1(*args):
f1(*li)
輸出:(11,22)
2.行為參數之前加兩個* 就可以接受字典參數,輸出格式為字典,處理key、values鍵值對
def f1(**args):
print (args)
f1('n1'='aaa','n2'='ddd')
輸出:{'n1':'aaa','n2':'ddd'}
3.萬能參數(就是*args和**kwargs一起使用,它會自動識别是清單還是字典,然後指派給*args和**kwargs)
5、利用動态函數實作format功能
格式:str.format
功能:實作格式化輸出方法(同萬能參數功能,都是通過*args和**kwargs)
例如:s = "i am {0},age{}".format('abc','123') (括号裡邊的abc和123也可以寫成一個清單)
s = "i am {0},age{}".format(*['abc','123'])
輸出:i am abc,age 123
6、函數内容補充
例一:
def f1(a1,a2):
return a1+a2
def f1(a1,a2): #當運作到這裡的時候f1已經重新指派,記憶體段也不一樣了,
return a1*a2
result = f1(8*8)
print (result) #是以結果是64
例二:
python函數中,當傳遞參數的時候,python預設為引用參數,不是重新複制參數指派。
def f1(a1):
a1.append(111)
li= [11,22]
f1(li) #這裡的li為引用,不是重新指派
print (li) #結果為[11,22,999]
7、全局變量
1.作用域内的變量隻能作用域内使用;
2.全局變量所有作用域都可以讀取,但不能修改;
3.局部變量優先于全局變量;
4.作用域要修改變量,需要在作用域中加global+變量名;
5.如果全局變量是清單或者字典時,作用域不加global可直接添加元素,但不能重新指派;如果重新指派,要加global+變量名;
(注意:所有全局變量名要都用大寫,友善區分)
8、函數式程式設計實作登入和注冊
三、三元運算(也稱三目運算,if else的簡寫)
用來簡單的if else的運用;
正常的寫法:
if 1 == 1:
name = 'aaa'
name = 'bbb'
三元運算寫法:
name = 'aaa' if 1 == 1 else 'bbb'
四、lambda表達式
用作簡單函數的簡寫,對簡單的函數指派做操作,隻能寫一行。
def f1(a):
return a+100
lambda寫法:
f1 = lambda 1: a+100 #return預設隐含了
五、内置函數
1. .abs() #取絕對值
2. .all() #接收可以被疊代的對象。當括号裡所有為真時,為真;括号裡隻有一個為假時,就為假。
3. .any() #括号裡隻要有真,就為真。
4. .ascii() #自動執行某對象的的__str__方式
5. .bin() #接收十進制,然後轉成二進制 0b代表二進制
6. .oct() #接收十進制,然後轉成八進制 0o代表八進制
7. .nex() #接收十進制,然後轉成十六進制 0x代表十六進制
8. .bool() #真或假、True或False
9. .bytes() #把字元串轉成位元組類型 例如:bytes(s,encoding"utf-8")
10. .bytearry() #把字元串轉成位元組類型,放到一個清單裡。
五、檔案操作
1.打開檔案
f = open ('檔案名字','什麼方式')
打開檔案的方式有:
1.r 隻讀
2.w 隻寫(清空之後再寫)
3.x (如果檔案存在,就報錯;如果不存在,就建立再寫内容)
4.a 追加 永遠是追加到光标所在位置的最後
5.r+ 讀寫
6.w+ 先清空再寫讀
7.a+ 讀寫,但是永遠是追加到最後
8.x+ 讀寫
9.b 以二進制的方式讀寫
10.b+
2.操作檔案(檔案操作功能)
1.read()
2.tell()
3.seek()
4.write()
5.close()
6.flush()
7.readable()
8.seekable()
9.readline()
10.readlines()
11.truncate()
12.for循環檔案對象
例如;
f = open("aaa.txt",'r=')
for line in f: #會把f裡邊的一行一行讀取出來指派給line
print (line)
3.with 同時打開多個檔案
with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:
例一:同時打開兩個檔案,讀取第一個檔案,同時寫入第二個檔案,當寫到10行時退出;
with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:
times = 0
for line in f1:
times += 1
if times <= 10:
f2.write(line)
else:
break
例二:當有個檔案,把檔案裡邊的aaa改成bbb
with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:
new_str = line.replace('aaa','bbb')
f2.write(new_str)
本文轉自506554897 51CTO部落格,原文連結:http://blog.51cto.com/506554897/1795360,如需轉載請自行聯系原作者