python第三天學習復習,集合set,文件操作,函數(普通函數,遞歸,高階函數),字符編碼和解碼
阿新 • • 發佈:2017-12-08
下層 utf-8 只讀 sub pytho bsp for sca move
三元運算
age = 23 #就是if else的簡單寫法 a = age if age < 20 else 25
集合 set
#集合是無序切不重復的, #當對列表去重復的時候,可以直接使用 set(list),就將list轉為set,並去除中間重復的 list = [1,2,3,4,5,5,6,7,8,9,1] s = set(list)
運行結果:可以發現將 list中重復的去掉,並且類型變成set,再使用list(set),轉為list
集合操作
# Author:zylong set1 = set([1,2,3,4,5,5,6,7,8,9,1]) set2 = set([0,2,4,6,8,10])#交集 print(set1.intersection(set2)) print(set1 & set2) #並集 print(set1.union(set2)) print(set1 | set2) #差集 print(set1.difference(set2)) print(set1 - set2) #對稱差集,就是 用並集 - 交集 的結果 print(set1.symmetric_difference(set2)) print(set1 ^ set2) #是否是子集,父集 set1.issubset(set2) set1.issuperset(set2) #刪除 set1.remove(1)#當元素不存在時報錯 set1.discard(1)#不存在不報錯 #增加 set1.add(10) #判斷是否存在 print( 10 in set1) #修改 set1.update(set2) print(set1)
字符編碼和解碼
#python 內部編碼是unicode #編碼和解碼,就是 --通過重甲unicode進行轉換 #如果在文件頭指定編碼 #-*-coding:gbk-*- 這句話的意思是指,這個文件以什麽編碼解析,並不是文件中的內容以什麽編碼解析, # 文件中的內容還是以unicode編碼,並且編碼後都是字節 string = "你好" string_to_utf8= string.encode("utf-8") string_utf8_to_gbk = string_to_utf8.decode("utf-8").encode("gbk").decode("gbk")#這句話最後轉為的是unicode print(string_to_utf8) print(string_utf8_to_gbk)
文件操作
# Author:zylong #文件的增刪改查 #使用with 這種方式,with結束時,程序自動關閉程序,就是調用f.close()方法 with open("復習.py",mode="r",encoding="utf-8") as f: "按行讀取" for line in f: print(line) #open的打開模式 f = open("復習.py",mode="r",encoding="utf-8") #這個是只讀模式,不能寫,如果調用寫的方法報錯 # f1 = open("aa","w",encoding="utf-8") #這個w方式是創建新的文件,如果文件存在,則覆蓋原先文件 f1.write("你好") f1.close() #在文件末尾追加 f = open("aa","a",encoding="utf-8") f.write("\n好的\n") f.close() #這個是讀寫模式打開,這種模式寫,是在文件末尾追加 f = open("bb","r+",encoding="utf-8") print(f.tell()) print(f.readline())#讀取文件指針所在的往後一行 打印的結果是“你好” print(f.tell()) f.seek(3)#這裏不能設置 1,2,因為文件開頭是中文,中文站三個字節,這裏的是按字節位置的 print(f.readline())#打印的結果是 “好” f.write("\naaaa\n") f.close() #查找,就是使用循環,使用 for line in f:#這樣的效率高,這個是一行一行的讀 pass for line in f.readlines():#這種方式是將文件內容全部加載到內存中,當文件比較大的時候效率比較低 pass
函數:
# Author:zylong #函數定義:使用def 關鍵字,方法名,方法體 #沒寫返回值的,python默認返回 none def fun_test1(): print("第一個函數") #有返回值 def fun_test2(): return 0 #有參數 def fun_test3(x,y): print(x) print(y) #調用的時候,有兩種調用方式 #1.形參[按照參數的位置,進行調用] fun_test3(1,2) #2.實參 fun_test3(y=2,x=1) #函數參數上有默認值 def fun_test4(x=4,y=5): print(x) print(y) #這種調用的時候,可以傳參數,也可以不穿參數,當不傳值時,使用默認值 fun_test4() #形參必須在實參前面 fun_test3(1,y=2); #不定參數,後面不定參數,python包裝成一個元組 def fun_test5(x,*avgs): print(x) print(avgs) #調用有兩種方式 fun_test5(10,11,12,13,14,15) fun_test5(10,*[11,12,13,14,15]) fun_test5(10,*(11,12,13,14,15)) # def fun_test6(x,**kvavgs): # print(x) # print(kvavgs) #這樣調用會報錯,因為第一個形式參數,已經給x賦值了,後面的 實參有給x賦值,所以報錯,可以講參數名換一下 #這種傳遞的是一個字典,是以實參方式,python封裝成字典 def fun_test6(a,**kvavgs): print(a) print(kvavgs) fun_test6("a",x="b",y="c",z="d") #多返回值 def fun_test7(): return 0,"a",("b","c"),["d","e","e"],{"f","g"},{"name":"zhang","age":20} res = fun_test7() #這種將返回結果變成一個元組返回 print(res) #遞歸函數,函數自己調用自己 #遞歸函數必須有一下三個特別:1.有明確的結束條件,2每次進入更深一層,問題規模比上一次相應減少(下一層,使用上一層的結果)3遞歸效率不高 #求一個數,最終不能被2整除的余數 #當需要遞歸函數返回值的時候,調用遞歸的地方必須return ,這樣才能把下層的結果返回給上層 def fun_recursive(n): if n % 2 != 0: return n else: return fun_recursive(n/2) n = fun_recursive(30) print(n) #高階函數,就是函數的參數是個函數 def fun_HighOrde(x,y,f): print(f(x)+f(y)) fun_HighOrde(20,6,fun_recursive)
python第三天學習復習,集合set,文件操作,函數(普通函數,遞歸,高階函數),字符編碼和解碼