python基礎_day3

來源:互聯網
上載者:User

標籤:順序   模式   讀一行   center   未在   ftp   例子   /usr   nan   

集合

集合是一個無序的,不重複的資料群組合,它的主要作用如下:
1、去重,把一個列表變成集合,就自動去重了
2.、關係測試,測試兩組資料之前的交集、差集、並集等關係

例子

list_1 = [1,3,4,7,8,4,3]list_1 = set(list_1)print(list_1,type(list_1))#type類型{1, 3, 4, 7, 8} <class ‘set‘>

基本集合

#!/usr/bin/env python# -*- coding:utf-8 -*-#Author:liyananlist_1 = [1,3,4,7,8,4,3]list_1 = set(list_1)#print(list_1,type(list_1))list_2= [1,5,22,4,9,0]list_2 = set(list_2)print(list_1,list_2)print(list_1.intersection(list_2)) #交集方法1print(list_1&list_2)#交集方法2print(list_1.union(list_2))#並集方法1print(list_1|list_2)#並集方法2print(list_1.difference(list_2))#差集,在1中不在2中print(list_1-list_2)#同上list_3=[5]list_3=set(list_3)print(list_3.issubset(list_2))#子集,3在2中print(list_2.issuperset(list_3))#2包含3print(list_1.symmetric_difference(list_2))#對稱差集方法1,在1和2中列出不同的,不列出相同的print(list_1^list_2)#對稱差集方法2#輸出{1, 3, 4, 7, 8} {0, 1, 4, 5, 9, 22}{1, 4}{1, 4}{0, 1, 3, 4, 5, 7, 8, 9, 22}{0, 1, 3, 4, 5, 7, 8, 9, 22}{8, 3, 7}{8, 3, 7}TrueTrue{0, 3, 5, 7, 8, 9, 22}{0, 3, 5, 7, 8, 9, 22}

增加

list_1.add(999) #增加一項list_2.update([88,888,8888])#增加多項print(list_1,list_2)#輸出{1, 3, 4, 7, 8} {0, 1, 4, 5, 9, 22}{1, 3, 4, 7, 8, 999} {0, 1, 4, 5, 9, 8888, 888, 22, 88}

刪除

list_2.remove(88) print(list_2)#輸出{0, 1, 4, 5, 9, 8888, 888, 22, 88}{0, 1, 4, 5, 9, 8888, 888, 22

其他

#摘用alex老師部落格len(s)  set 的長度  x in s  測試 x 是否是 s 的成員  x not in s  測試 x 是否不是 s 的成員  s.issubset(t)  s <= t  測試是否 s 中的每一個元素都在 t 中  s.issuperset(t)  s >= t  測試是否 t 中的每一個元素都在 s 中  s.union(t)  s | t  返回一個新的 set 包含 s 和 t 中的每一個元素  s.intersection(t)  s & t  返回一個新的 set 包含 s 和 t 中的公用元素  s.difference(t)  s - t  返回一個新的 set 包含 s 中有但是 t 中沒有的元素  s.symmetric_difference(t)  s ^ t  返回一個新的 set 包含 s 和 t 中不重複的元素  s.copy()  返回 set “s”的一個淺複製  
檔案

對檔案操作流程

1、開啟檔案,得到檔案控制代碼並賦值給一個變數
2、通過控制代碼對檔案進行操作
3、關閉檔案

#wenjian致橡樹  我如果愛你——  絕不像攀援的淩霄花,  借你的高枝炫耀自己;  我如果愛你——  絕不學癡情的鳥兒  為綠蔭重複單調的歌曲;  也不止像泉源  長年送來清涼的慰藉;  也不止像險峰  增加你的高度,襯托你的威儀。  甚至日光。  甚至春雨。  不,這些都還不夠!  我必須是你近旁的一株木棉,  作為樹的形象和你站在一起。  根,緊握在地下  葉,相觸在雲裡。  每一陣風吹過  我們都互相致意,  但沒有人  聽懂我們的言語。  你有你的銅枝鐵幹,  像刀、像劍  也像戟;  我有我紅碩的花朵  像沉重的歎息,  又像英勇的火炬。  我們分擔寒潮、風雷、霹靂;  我們共用霧靄、流嵐、虹霓。  彷彿永遠分離,  卻又終身相依。  這才是偉大的愛情,  堅貞就在這裡:不僅愛你偉岸的身軀,  也愛你堅持的位置,腳下的土地。

基本操作

#!/usr/bin/env python# -*- coding:utf-8 -*-#Author:liyananf = open(‘wenjian‘,encoding="utf-8")#檔案控制代碼first_line = f.readline()print("first line",first_line)#讀一行print(‘我是分割線‘.center(50,‘-‘))data = f.read()#讀取剩下的所有內容,檔案大時不要用print(data)f.close()

開啟檔案的模式有:

1、r,唯讀模式(預設)。
2、w,唯寫模式。不可讀;不存在則建立;存在則刪除內容;
3、a,追加模式。可讀; 不存在則建立;存在則只追加內容;

例子

#2、w,唯寫模式。f = open(‘wenjian2‘,‘w‘,encoding="utf-8")f.write("我愛北京天安門")

#a,追加模式f = open(‘wenjian2‘,‘a‘,encoding="utf-8")f.write("\n天安門前路很寬\n")

讀取多行

f = open(‘wenjian‘,‘r‘,encoding="utf-8")for i in range(7):    print(f.readline())#輸出致橡樹  我如果愛你——  絕不像攀援的淩霄花,  借你的高枝炫耀自己;  我如果愛你——  絕不學癡情的鳥兒  為綠蔭重複單調的歌曲;

"+" 表示可以同時讀寫某個檔案
r+,可讀寫檔案。可讀;可寫;可追加
w+,寫讀
a+,同a

例子

f = open(‘wenjian‘,‘r+‘,encoding="utf-8")print(f.readline())print(f.readline())print(f.readline())print(f.tell())f.write("-------後來加入的--------")#輸出致橡樹  我如果愛你——  絕不像攀援的淩霄花,78

但是:

沒辦法在中間寫入,因為記憶體位址被佔用。

修改

#!/usr/bin/env python# -*- coding:utf-8 -*-#Author:liyananf = open("wenjian2",‘r‘,encoding=‘utf-8‘)f_new = open("wenjian2.new",‘w‘,encoding=‘utf-8‘)for line in f:    if "路很寬" in line:        line = line.replace("路很寬","地方大")    f_new.write(line)f.close()f_new.close()#執行後新增加一個wenjia2.new檔案而且內容是

"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)
rU
r+U

"b"表示處理二進位檔案(如:FTP發送上傳ISO鏡像檔案,linux可忽略,windows處理二進位檔案時需標註)
rb
wb
ab

其他動作

for index ,line in enumerate(f.readlines()):    if index == 3:        print(‘------我是分割線-------‘)        continue    print(line.strip())#輸出致橡樹我如果愛你——絕不像攀援的淩霄花,------我是分割線-------我如果愛你——絕不學癡情的鳥兒為綠蔭重複單調的歌曲;也不止像泉源。。。
f = open(‘wenjian2‘,‘r‘,encoding="utf-8")print(f.tell())print(f.readline())print(f.tell())#輸出 ,讀取了23個字元。0我愛北京天安門23
with語句

為了避免開啟檔案後忘記關閉,可以通過管理上下文,即:

with open("wenjian","r",encoding="utf-8") as f:    print(f.readline())

如此方式,當with代碼塊執行完畢時,內部會自動關閉並釋放檔案資源。

在Python 2.7 後,with又支援同時對多個檔案的上下文進行管理,即:

with open("wenjian","r",encoding="utf-8") as f,        open("wenjian2","r",encoding="utf-8") as f2:    print(f2.readline())
字元編碼轉換

Python 3最重要的新特性大概要算是對文本和位元據作了更為清晰的區分,不再會對bytes位元組串進行自動解碼。文本總是Unicode,由str類型表示,位元據則由bytes類型表示。在py3中encode,在轉碼的同時還會把string 變成bytes類型,decode在解碼的同時還會把bytes變回string。

例子

msg = "我"msg_gb2312=msg.encode("gb2312")#py3預設是unicodegb2312_to_unicode=msg_gb2312.decode("gb2312")gb2312_to_utf8=msg_gb2312.decode("gb2312").encode("utf-8")print(msg)print(msg_gb2312)print(gb2312_to_unicode)print(gb2312_to_utf8)#輸出我b‘\xce\xd2‘我b‘\xe6\x88\x91‘

函數

定義: 函數是指將一組語句的集合通過一個名字(函數名)封裝起來,要想執行這個函數,只需調用其函數名即可。

特徵:
1、減少重複代碼
2、使程式變的可擴充
3、使程式變得易維護

標準定義:

def hello():#函數名    print("你好")hello()#調用函數

帶參數:

def jia(x,y):    jia = x+y    return jia#返回函數執行結果c = jia(1,3)print(c)#輸出4

參數

形參:
變數只有在被調用時才分配記憶體單元,在調用結束時,即刻釋放所分配的記憶體單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變數
實參:
可以是常量、變數、運算式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值

預設參數

def list(name,age,salary="1000"):    print("-----list-----")    print("姓名",name)    print("age",age)    print("工資",salary)list("張三",1,100)list("李四",2,200)list("王五",3)#輸出-----list-----姓名 張三age 1工資 100-----list-----姓名 李四age 2工資 200-----list-----姓名 王五age 3工資 1000

在調用list這個函數中,王五的salary不輸入,預設使用salary="1000",這個預設值。指定了的話,就用你指定的值。

關鍵參數(特別注意)
正常情況下,給函數傳參數要按順序,不按順序就可以用關鍵參數,指定參數名即可,注意:關鍵參數必須放在位置參數之後。

list(age="4",salary="400",name="一一")

非固定參數
若你的函數在定義時不確定使用者想傳入多少個參數,就可以使用非固定參數

def test(x,*args):    print(x)    print(args)test(1,2,3,4)#輸出1(2, 3, 4)

*args 會把多傳入的參數變成一個元組形式

def test4(name,age=18,**kwargs):    print(name)    print(age)    print(kwargs)test4(‘liyanan‘,age=‘24‘,sex=‘man‘,salary=‘6000‘)#輸出liyanan24{‘sex‘: ‘man‘, ‘salary‘: ‘6000‘}

*kwargs 會把多傳入的參數變成一個dict形式

全域變數和局部變數

school = "oldboy edu" #全域變數def school_name(school):    print("改之前",school)    school = "mage linux" #局部變數    print("改之後",school)school_name(school)print(school)#輸出改之前 oldboy edu改之後 mage linuxoldboy edu

在子程式中定義的變數稱為局部變數,在程式的一開始定義的變數稱為全域變數。
全域變數範圍是整個程式,局部變數範圍是定義該變數的子程式。
當全域變數與局部變數同名時:
在定義局部變數的子程式內,局部變數起作用;在其它地方全域變數起作用。

傳回值
要想擷取函數的執行結果,就可以用return語句把結果返回

注意:

1、函數在執行過程中只要遇到return語句,就會停止執行並返回結果,so 也可以理解為 return 語句代表著函數的結束
2、如果未在函數中指定return,那這個函數的傳回值為None

遞迴
在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞迴函式。

def jia(n):    print(n)    if int(n+n)<100:        return jia(int(n+n))    print("--->",n)jia(1)#輸出1248163264---> 64

遞迴特性:
1、必須有一個明確的結束條件
2、每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
3、遞迴效率不高,遞迴層次過多會導致棧溢出

高階函數
一個變數可以使用函數,那麼這個函數就可以接受另一個函數作為參數,這叫高階函數。

python基礎_day3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.