1. 程式人生 > >python第三天學習復習,集合set,文件操作,函數(普通函數,遞歸,高階函數),字符編碼和解碼

python第三天學習復習,集合set,文件操作,函數(普通函數,遞歸,高階函數),字符編碼和解碼

下層 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,文件操作,函數(普通函數,遞歸,高階函數),字符編碼和解碼