Python基礎-week03

来源:https://www.cnblogs.com/Jame-mei/archive/2018/03/14/8563540.html
-Advertisement-
Play Games

本節內容: 1.集合及其運算 2.文件讀與寫詳解(1-3) 3.文件修改詳解 4.字元編碼轉化詳解(1-2) 5.函數與函數式編程(1-2) 6.函數式編程之參數詳解(1-2) 7.函數式編程與函數不同 8.局部變數與全局變數的作用域(1-2) 9.遞歸 10.高階函數 一.集合及其運算 1.集合的 ...


本節內容:

  1.集合及其運算

  2.文件讀與寫詳解(1-3)

  3.文件修改詳解

  4.字元編碼轉化詳解(1-2)

  5.函數與函數式編程(1-2)

  6.函數式編程之參數詳解(1-2)

  7.函數式編程與函數不同

  8.局部變數與全局變數的作用域(1-2)

  9.遞歸

  10.高階函數

 

一.集合及其運算

  1.集合的概念

    集合是一個無序的,不重覆的數據組合,它的主要作用如下

      *去重,把一個列表變成集合,就自動去重了

      *關係測試,測試兩組數據之前的交集、並集、差集、子集、父級、對稱差集,判斷沒有交集等關係

  2.常用操作:

    1):集合的增刪改查:

    

 1 #Author Jame-Mei
 2 #集合的增刪改查等基本操作
 3 
 4 list1=set([1,3,5,7])
 5 
 6 #1.增加
 7 list1.add(9) #添加單項,update添加多項。
 8 print (list1):
 9 {1, 3, 5, 7, 9}
10 
11 =======================================
12 #2.刪除
13 list1.remove(1) #刪除指定單個,如果指定不存在報錯
14 list1.pop()     #刪除任意並返回
15 list1.discard('absdf')  ##刪除指定單個,如果指定不存在返回None值(不報錯)
16 
17 print (list1):
18 {3, 5, 7}
19 =======================================
20 
21 #3.修改
22 list1.update([2,4,6]) #註意這裡格式,為列表的格式!!
23 list1.update(['a','A','b','C'])
24 
25 print (list1)#(輸出後,原來的數據不變,會添加到集合里,順序是隨機的!)
26 {1, 2, 3, 4, 5, 6, 7, 'b', 'C', 'a', 'A'}
27 
28 ========================================
29 
30 #4.查看
31 
32 #1):長度
33 print(len(list1))
34 
35 #2):查看元素是否在集合中(列表,字典,集合,字元串都可以用in 或者not in來判斷!!!)
36 print (5 in list1)
37 #3):查看元素是否不是list1中
38 print (9 not in list1)
39 
40 #4):測試list1是否是list2的子集
41 list2=set([1,3,5,7,9])
42 
43 
44 print(list1.issubset(list2))
45 #運算符
46 print (list1<=list2)
47 
48 #5):測試list2是否是list1的父級
49 print(list2.issuperset(list1))
50 #運算符
51 print (list2>=list1)
52 
53 #還有並集 | ,差集 - ,對稱差集 ^,淺coyp: list1.copy等等
View Code

    2):常見的集合運算和集合運算符

     

 1 #Author Jame-Mei
 2 
 3 #1.去除除列表中重覆值
 4 list1=[1,3,5,7,1,2,4,7]
 5 
 6 list1=set(list1)
 7 print (list1,type(list1))
 8 
 9 output:
10 {1, 2, 3, 4, 5, 7} <class 'set'>
11 =========================================================================================>>>>>>>>
12 
13 
14 #2.取交集:關係測試
15 list1=set([1,3,6,7,9])
16 list2=set([2,4,6,7,8])
17 #其中重覆為6,7
18 print (list1,list2):
19 {1, 3, 6, 7, 9} {2, 4, 6, 7, 8}
20 
21 #list3為交集的元素
22 list3=list1.intersection(list2)
23 print (list3):
24 {6, 7}
25 
26 #交集元算符:&  (兩邊無先後順序)
27 list1 & list2
28 =========================================================================================>>>>>>>>
29 
30 
31 #2.取並:union()
32 list1=set([1,3,5])
33 list2=set([2,4,6])
34 
35 list3=list1.union(list2)
36 print (list3):
37 {1, 2, 3, 4, 5, 6}
38 
39 #並集運算符:| (兩邊無先後順序)
40 list1 | list2
41 =========================================================================================>>>>>>>>
42 
43 
44 #3.差集:求list1和list2共有的以外的,各自的元素。
45 list1=set([1,3,5,7,9])
46 list2=set([2,4,6,7,9])
47 
48 #取list1的差集,list2中沒有的,屬於list1的。
49 list3=list1.difference(list2)
50 print (list3):
51 {1, 3, 5}
52 
53 #取list2的差集,list1中沒有的,屬於list2的。
54 list4=list2.difference(list1)
55 print (list4):
56 {2, 4, 6}
57 
58 #差集運算符: - (在左邊,不在右邊)
59 list1 - list2
60 
61 list2 - list1(差集的元素在list2中,不在list1中)
62 =========================================================================================>>>>>>>>
63 
64 
65 #4.子集:list1是否是list2的子集(兒子),list1裡面有的list2都有,list2裡面有的,list1不一定有(list2包括list1)
66 list1=set([1,3,5])
67 list2=set([1,3,5,7,9])
68 print (list1.issubset(list2)):
69 True
70 =========================================================================================>>>>>>>>
71 
72 
73 
74 #5.父級:list1是否是list2的父級(父親),list1包括list2,list1裡面有的list不一定有,list2有的list1一定有。
75 list2=set([1,3,5])
76 list1=set([1,3,5,7,9])
77 print(list1.issuperset(list2)):
78 True
79 =========================================================================================>>>>>>>>
80 
81 
82 #6.對稱差集:去除2者重覆後的所有元素,或者這兩者的差集相加,(互相都沒有的和)就是對稱差集。
83 list2=set([1,3,5,8,10,12])
84 list1=set([1,3,5,7,9])
85 
86 print (list1.symmetric_difference(list2)):
87 {7, 8, 9, 10, 12}
88 
89 #對稱差集的元算符: ^ (返回一個新的 set 包含 list1 和 list2 中不重覆的元素 ,無順序關係!)
90 list1 ^ list2
91 
92 =========================================================================================>>>>>>>>
93 #7.判斷沒有交集,True=沒有交集,False=有交集。
94 list1=set([1,3,5])
95 list2=set([2,4,6])
96 
97 flag=list1.isdisjoint(list2)
98 print(flag):
99 True
View Code

 

 

二.文件的讀與寫(操作1-3實例)

  *對文件操作流程:

    1):打開文件,得到文件句柄並賦值給一個變數

    2):通過句柄對文件進行操作

    3):關閉文件

  *打開文件的模式有:

  • r,只讀模式(預設)。
  • w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;】
  • a,追加模式。【可讀;   不存在則創建;存在則只追加內容;】

      "+" 表示可以同時讀寫某個文件:

  • r+,可讀寫文件。【可讀;可寫;可追加】
  • w+,寫讀
  • a+,同a

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

  • rU
  • r+U

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

  • rb
  • wb
  • ab

  

  

  

 

 

  1.文件的基本操作

    

 1 #Author:Jame Mei
 2 #在當前目錄新建yesterdaytext和yesterday兩個文件
 3 
 4 '''#1.預設方式為'r'的方式打開讀取文件
 5 file1=open("yesterdaytext",encoding='UTF-8').read()
 6 print (file1)
 7 '''
 8 
 9 
10 """
11 #2.讀取改進款,f為文件句柄(記錄文件的文件名、文件位置,文件大小等等),'r'打開文件的模式:註意位置,不寫預設r模式。
12 f=open('yesterdaytext','r',encoding='utf-8')
13 data1=f.read()
14 data2=f.read()
15 print (data1)  #data1正常輸出!!
16 print ("=========data2=====發現data2為空....無法再從頭讀一遍!===")
17 print (data2)
18 """
19 
20 '''#3.寫覆蓋模式w
21 f=open("yesterday",'w',encoding='utf-8')
22 f.write("我愛北京天安門\n")
23 f.write("天安門上紅旗飄揚")
24 '''
25 
26 '''#4.寫追加模式a
27 f=open("yesterday",'a',encoding='utf-8')
28 
29 f.write("one night beijin,我留下很多情!")
30 f.write('\n不敢在午夜問路,怕驚醒了帝都的魂!')
31 '''
View Code

 

  2.文件操作的一些方法

 1 #Author:Jame Mei
 2 
 3 '''#1.讀文件的前五行
 4 f=open('yesterdaytext','r',encoding='utf-8')
 5 
 6 for i in range(5):
 7     print (f.readline())
 8 '''
 9 
10 
11 '''#2.讀取文件,跳過第十行!
12 f=open('yesterdaytext','r',encoding='utf-8')
13 for index,line in enumerate(f.readlines()):
14     if index==9:
15         print ('-------------------------------------我是分割線------------------------------')
16         continue
17     print (line.strip())
18 '''
19 
20 '''#3.readline只適合讀取小文件,用下麵的方式來讀,效率高,記憶體中只保存一行,適合數據了大的場景!!
21 #f相當於迭代器
22 count=0
23 f=open('yesterdaytext','r',encoding='utf-8')
24 for line in f:
25     if count==9:
26         print ('---------------------------過濾第10行-------------------------->>>>>>>>>>>>>>')
27         count += 1
28         continue
29     print (line.strip())
30     count+=1
31 '''
32 
33 '''#4.對於read()讀過一遍後,無法再從頭讀,進行解答。
34 #重要函數readline(),seek()!
35 上文疑問實例預覽:
36 data1=f.read()
37 data2=f.read()
38 print (data1)  #data1正常輸出!!
39 print ("=========data2=====發現data2為空....無法再從頭讀一遍!===")
40 print (data2)
41 
42 #解決:
43 f=open('yesterdaytext','r',encoding='utf-8')
44 print (f.tell()) #告訴目前游標的位置!
45 print (f.readline()) #讀取一行
46 print (f.readline()) #讀取2行後,我現在想返回?
47 #print (f.read(5)) #去讀指定的個數字元
48 print (f.tell())
49 
50 f.seek(0)#返回開頭的游標的位置!
51 #f.seek(10) #把游標移動到第10個字元前,readline()從第10個字元讀到第一行的結尾。
52 print (f.readline())
53 print (f.tell()) #又到了讀完第一行的游標位置!
54 '''
55 
56 '''#5.enconding()方法,fileno()方法讀取文件的記憶體里的編號,isatty()判斷是否一個底層不可列印設備。
57 f=open('yesterdaytext','r',encoding='utf-8')
58 print(f.encoding):
59 utf-8
60 print (f.fileno()):
61 3
62 print (f.isatty()):
63 False
64 '''
65 
66 '''#6.seekable ,判斷是否可以移動。readable(),writeable()
67 f=open('yesterdaytext','r',encoding='utf-8')
68 
69 print (f.seekable()):
70 True
71 print (f.readable()):
72 True
73 print (f.writable()):
74 False
75 '''
76 
77 '''#7.flush(),在windows或者linux的終端視窗下效果比較明顯,防止斷電沒有從記憶體中寫入到磁碟。
78   #closed判斷文件是否關閉了,沒有關閉False!
79 f=open('yesterday02','w',encoding='utf-8')
80 f.write("hello") #在dos下寫過之後,查看yesterday02並沒有寫入,flush()之後才能看到存儲到文件中。
81 f.flush()
82 
83 print (f.closed):
84 False
85 '''
86 
87 '''#8.truncate()截斷,w如果不寫會清空文件,a如果不寫預設不操作。寫了10,從第10個字元截斷,後面的刪除。
88 f=open('yesterday02','a',encoding='utf-8')
89 #f.truncate()
90 f.seek(10) #游標跳到第10個字元,截圖前20個,後面的刪除!!
91 f.truncate(20)
92 '''
View Code

   實現windows or linux安裝進度條列印效果:

  

1 #Author:Jame Mei
2 import sys,time
3 
4 #實現windows安裝進度條顯示..........
5 for i in range(30):
6     sys.stdout.write("#")
7     sys.stdout.flush()
8     time.sleep(0.3)
View Code

  3.文件操作的重要參數操作:

   r+、w+、a+、rb、wb等

 1 #Author:Jame Mei
 2 
 3 '''#1.open()的r+(讀寫)參數實例,打開讀並追加這個比較常用!!
 4 f=open('yesterdaytext','r+',encoding='utf-8')
 5 count=0
 6 for lin in f:
 7     if count==3:
 8         f.write("\n>>>>>列印前三行,開始w的操作>>>") #發現無論如何都無法在第三行之後寫,只能從最後開始追加寫入!!
 9         count+=1
10 
11     print(f.readline())
12     count+=1
13 '''
14 
15 
16 '''#2.open()的w+(寫讀)參數實例,依然和r+一樣,只能從文件的末尾追加寫入!這個應用場景比較少
17 f=open('yesterday02','w+',encoding='utf-8')
18 f.write("123456789\n")
19 f.write("23456789\n")
20 f.write("3456789\n")
21 
22 print(f.tell())
23 f.seek(10)
24 print (f.tell())
25 
26 print (f.readline())
27 
28 f.write("456789")
29 f.close()
30 '''
31 
32 
33 
34 '''#3.open()的a+ 追加讀寫,a不能讀其他和a+一樣
35 f=open('yesterdaytext','a+',encoding='utf-8')
36 print(f.readline()):
37 結果是列印出空白,不知道a+模式不是可以讀嗎??
38 
39 '''
40 
41 
42 
43 
44 '''#4.open()的rb,wb:以二進位格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是預設模式。一般用於非文本文件如圖片等。
45 f=open('yesterdaytext','rb') #可以以2進位的方式讀出來,不進行解碼decode()的話,會帶b''的方式顯示。
46 print (f.readline())
47 print (f.readline().decode()) #解碼成utf-8格式顯示
48 #如果不去掉enconfing='utf-8'則會valueError: binary mode doesn't take an encoding argument
49 
50 
51 f=open('yesterday02','wb') #二進位寫模式,要把字元串轉換bytes
52 f.write("cedfg".encode())  #encode預設utf-8
53 #字元串如果不轉換成bytes,則出現:TypeError: a bytes-like object is required, not 'str'
54 '''
View Code

 

 

    

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML基本知識 學習html首先我們先看看HTML本質: web框架本質 我們在學socket,我們創建一個socketserver,然後運行起來,有一個client客戶端要連接socket服務端,連接上之後,如果兩邊都沒有close,就一直不斷開,可以不斷的進行請求。 那我們說一個網站,我們在服 ...
  • 簡而言之: HTTPS = HTTP + SSL HTTP 的 URL 以 http:// 開頭,而 HTTPS 的 URL 以 https:// 開頭 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 標準埠是 80 ,而 HTTPS 的標準埠是 443 在 OSI 網路模型中,HTT ...
  • //假設有個全局對象Person var Person = { 'name' : 'alice' } //通過某種配置,獲得了字元串形式的對象名 var thisPerson = 'Person'; //需要取得該對象的值 var PersonName; //巧用window對象 PersonNam ...
  • 說完了出身,即出身自dojo/_base/目錄下的config模塊,那就要好好講講這對象有什麼可以寫的屬性了。 1. has屬性 官方說是用於更好的特征檢測的,具體有什麼用現在還不得知。 例如: 和 其中,dojo-amd-factory-scan子屬性表示AMD工廠掃描; dojo-firebug ...
  • 完整版文章請訪問我的個人博客查看:http://damienzhong.com/2018/03/12/%E5%BE%AE%E6%9C%8D%E5%8A%A1%EF%BC%88microservices%EF%BC%89%E3%80%90%E7%BF%BB%E8%AF%91%E3%80%91/ 微服務 ...
  • 使用行為(behavior)可以在不修改現有類的情況下,對類的功能進行擴充。通過將行為綁定到一個類,可以使得類具有行為本身所具有的屬性和方法,就好像是類本來就具有的這些屬性和功能一樣。 好的代碼設計,必須要同時滿足可復用性、可維護性和可擴展性。設計原則中有一條非常重要的一條:類應該對擴展開放,對修改 ...
  • 2018-03-14 一、this這個關鍵字,相當於普通話里的“我” ,例如: 小明說 “我吃了” 這個時候,“我” 代表小明 小紅說 “我吃了” 這個時候,“我” 代表小紅 "我"代表當前人物 。 1、this即代表當前對象: 2、通過this關鍵字訪問對象的屬性: 3、通過this調用其他的構造 ...
  • 2018-03-14 一、引用的概念,如果一個變數的類型是 類類型,而非基本類型,那麼該變數又叫做引用。 1、引用和指向: 代表創建了一個Hero對象但是也僅僅是創建了一個對象,沒有辦法訪問它為了訪問這個對象,會使用引用來代表這個對象 h這個變數是Hero類型,又叫做引用=的意思指的h這個引用代表右 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...