1. 程式人生 > >第二模塊·函數編程-第1章 函數、裝飾器、叠代器、內置方法

第二模塊·函數編程-第1章 函數、裝飾器、叠代器、內置方法

原子 留學 rmp 調用方法 優化 文件操作 使用場景 書籍推薦 default

  • 01-雞湯之人醜就要多讀書
  • 02-三元運算
  • 03-文件處理
  • 04-文件處理-二進制模式
  • 05-文件處理-智能檢測編碼的工具
  • 06-文件處理-寫模式操作文件
  • 07-文件處理-追加模式操作文件
  • 08-文件處理-混合操作文件
  • 09-文件操作其他功能
  • 10-文件處理-文件修改功能
  • 11-函數-基本介紹
  • 12-函數-默認參數
  • 13-函數-關鍵參數
  • 14-函數-非固定參數
  • 15-函數-非固定參數2
  • 16-函數-返回值
  • 17-函數-局部變量
  • 18-函數-在函數裏修改全局變量
  • 19-函數-在函數裏修改列表數據
  • 20-函數-嵌套函數
  • 21-函數-作用域
  • 22-函數-匿名函數
  • 23-函數-高階函數
  • 24-遞歸介紹
  • 25-遞歸與棧的關系
  • 26-遞歸的作用
  • 27-遞歸的特性總結
  • 28-遞歸的作用
  • 29-尾遞歸優化
  • 30-函數-內置方法1
  • 31-函數-內置方法2
  • 32-函數-內置方法3
  • 33-函數-內置方法4
  • 34-函數-內置方法5
  • 36-函數-函數進階-雞湯
  • 37-函數-函數進階-命名空間
  • 38-函數-函數進階-作用域的查找空間
  • 39-函數-函數進階-閉包
  • 40-函數-函數進階-裝飾器
  • 41-函數-函數進階-裝飾器流程分析
  • 42-函數-函數進階-裝飾器帶參數的函數
  • 43-函數-函數進階-裝飾器帶參數2
  • 44-函數-函數進階-列表生成式
  • 45-函數-函數進階-生成器
  • 46-函數-函數進階-斐波那契數列
  • 47-函數-函數進階-生成器調用方法
  • 48-函數-函數進階-函數寫生成器
  • 49-函數-函數進階-生成器send方法
  • 50-函數-函數進階-叠代器
  • 51-函數-函數進階-作業需求

01-雞湯之人醜就要多讀書;

1、一個好的講師,不光傳授知識,也能給學生帶來心靈上的成長,雞湯也是要喝的;

2、讀書“真的”可以改變一個的氣質,變得有內涵;

3、去豆瓣網上看書評、影評;

4、讀書推薦《追風箏的人》、《白鹿原》;

5、任何有收益的事情,都不是“短平快”獲取的,“慢”是一種生活姿態;

6、套用錢鐘書夫人楊絳的一句話:我們大多數人的窘境都是:想法太多,讀書太少;

7、我們的人生Level一定程度上可以由讀書來決定;

8、改變人的幾種方式:讀書、看電影、去旅行、經歷一些事情;

9、電影推薦《阿甘正傳》、《辛德勒的名單》;

10、我們大多數人都不會覺得自己LOW,百分之八十的人都會覺得自己還“湊合”;

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

02-三元運算

1、三元運算初識;

三元運算又稱“三目運算”,是對簡單條件語句的簡寫,如:

技術分享圖片

技術分享圖片

技術分享圖片

03-文件處理

1、我們大家日常如何操作文件;

  • 1、安裝文本編輯器軟件,如windows自帶記事本、notepad++;
  • 2、選中鼠標右鍵,利用文本編輯器軟件打開;
  • 3、查看or寫入內容;
  • 4、保存、關閉;

2、文本的操作分為讀、寫、修改;

1)讀;

1 #! /usr/bin/env python
2 # -*- coding:utf-8 -*-
3 #__author__ = "tqtl"
4 # Date:2018/5/14 21:57
5 #f = open(file=‘兼職白領學生空姐模特護士的聯系方式.txt‘,mode=‘r‘)#UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf in position 9: illegal multibyte sequence
6 file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=r,encoding=utf-8)#打開文件;
7 file_data = file.read()#閱讀文件內容;
8 print(file_data)#打印文件內容;
9 file.close()#一定要關閉文件;
總結:以什麽編碼存儲文件,一定要使用相同的編碼打開;

兼職白領學生空姐模特護士的聯系方式.txt

王心顏 上海 169 46  13813234424
馬纖羽 深圳 173 50 13744234523
喬亦菲 廣州 172 52 15823423525
羅夢竹 北京 175 49 18623423421
劉諾涵 北京 170 48 18623423765
嶽妮妮 深圳 177 54 18835324553
賀婉萱 深圳 174 52 18933434452
葉梓萱 上海 171 49 18042432324
杜姍姍 北京 167 49 13324523342
black girl 河北 167 50 13542342233

技術分享圖片

04-文件處理-二進制模式

1、那麽問題來了,如果我們事先不知道文件的編碼格式怎麽辦?!

1 #! /usr/bin/env python
2 # -*- coding:utf-8 -*-
3 #__author__ = "tqtl"
4 # Date:2018/5/14 22:22
5 # E-Mail: [email protected]
6 file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=rb)#b是binary的縮寫,以二進制的形式打開文件,用於網絡傳輸,給機器看,適用於不知道文件編碼格式的場景;
7 file_data = file.read()#閱讀文件內容;
8 print(file_data)#打印文件內容;
9 file.close()#一定要關閉文件;

技術分享圖片

05-文件處理-智能檢測編碼的工具

1、chardet工具(動態監測編碼的可能類型);

 1 #! /usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 #__author__ = "tqtl"
 4 # Date:2018/5/14 22:36
 5 # E-Mail: [email protected]
 6 # Wechat:cxz19930911
 7 #pip 安裝第三方模塊chardet,類似於yum安裝第三方軟件;
 8 
 9 import chardet
10 f = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=rb)
11 data = f.read()
12 print(data)
13 f.close()
14 print(chardet.detect(data))#{‘encoding‘: ‘utf-8‘, ‘confidence‘: 0.99, ‘language‘: ‘‘}

2、chardet工具的pip安裝;

技術分享圖片

技術分享圖片

技術分享圖片

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # __Author__:Administrator
 4 # Version:python3.6.5
 5 # Date:2018/5/19 0019 10:29
 6 import chardet#導入模塊;
 7 file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=rb)
 8 data = file.read()
 9 print(data)
10 print(chardet.detect(data))#{‘encoding‘: ‘GB2312‘, ‘confidence‘: 0.823045267489712, ‘language‘: ‘Chinese‘}
11 print(data.decode(GB2312))#解碼操作,顯示中文;
技術分享圖片
 1 C:\Users\Administrator\PycharmProjects\LFXC2018\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/LFXC2018/文件操作&函數/05-文件處理-智能檢測編碼的工具.py
 2 b\xcd\xf5\xd0\xc4\xd1\xd5 \xc9\xcf\xba\xa3 169 46  13813234424\n\xc2\xed\xcf\xcb\xd3\xf0    \xc9\xee\xdb\xda 173    50 13744234523\n\xc7\xc7\xd2\xe0\xb7\xc6    \xb9\xe3\xd6\xdd 172    52 15823423525\n\xc2\xde\xc3\xce\xd6\xf1    \xb1\xb1\xbe\xa9 175    49 18623423421\n\xc1\xf5\xc5\xb5\xba\xad    \xb1\xb1\xbe\xa9 170    48 18623423765\n\xd4\xc0\xc4\xdd\xc4\xdd    \xc9\xee\xdb\xda 177    54 18835324553\n\xba\xd8\xcd\xf1\xdd\xe6    \xc9\xee\xdb\xda 174    52 18933434452\n\xd2\xb6\xe8\xf7\xdd\xe6    \xc9\xcf\xba\xa3 171    49 18042432324\n\xb6\xc5\xe6\xa9\xe6\xa9 \xb1\xb1\xbe\xa9  167 49 13324523342\nblack girl  \xba\xd3\xb1\xb1  167 50  13542342233
 3 {encoding: GB2312, confidence: 0.823045267489712, language: Chinese}
 4 王心顏 上海 169 46  13813234424
 5 馬纖羽    深圳 173    50 13744234523
 6 喬亦菲    廣州 172    52 15823423525
 7 羅夢竹    北京 175    49 18623423421
 8 劉諾涵    北京 170    48 18623423765
 9 嶽妮妮    深圳 177    54 18835324553
10 賀婉萱    深圳 174    52 18933434452
11 葉梓萱    上海 171    49 18042432324
12 杜姍姍 北京  167 49 13324523342
13 black girl  河北  167 50  13542342233
日誌輸出

技術分享圖片

06-文件處理-寫模式操作文件

1、如何不全部占用內存讀取文件內容?!

  • 循環文件,即每次只讀取一部分;
 1 #! /usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 #__author__ = "tqtl"
 4 # Date:2018/5/14 23:04
 5 # E-Mail: [email protected]
 6 # Wechat:cxz19930911
 7 file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=r,encoding=utf-8)
 8 for lines in file:
 9     print(lines)
10 file.close()
11 # 王心顏    上海 169 46    13813234424
12 #
13 # 馬纖羽     深圳    173    50    13744234523
14 #
15 # 喬亦菲    廣州    172    52    15823423525
16 #
17 # 羅夢竹     北京    175    49    18623423421
18 #
19 # 劉諾涵     北京    170    48    18623423765
20 #
21 # 嶽妮妮     深圳    177    54    18835324553
22 #
23 # 賀婉萱     深圳    174    52    18933434452
24 #
25 # 葉梓萱    上海    171    49    18042432324
26 #
27 # 杜姍姍 北京  167 49 13324523342
28 #
29 # black girl  河北  167 50  13542342233
30 #為什麽會有空行,如何消除文件之間的空行?!
31 #No.1文件中本身隱藏著\n換行符;
32 #No.2 print語句本身會換行,所以呈現的效果是換了兩行;

技術分享圖片

2、寫文件操作;

1 #寫文件操作
2 file = open(file=兼職.txt,mode=w,encoding=utf-8)
3 file.write(北大本科美國留學一次50,微信號:cxz19930911)
4 file.close()

技術分享圖片

技術分享圖片

1 file = open(file=兼職write.txt,mode=wb)
2 file.write("路飛學城!".encode(gbk))
3 file.close()#輸出:路飛學城!
1 file = open(file=兼職write.txt,mode=wb)
2 file.write("原子二號!".encode(gbk))
3 file.close()#輸出:原子二號!

小結:

1、註意write模式操作文件,永遠都不是修改,而是創建新文件;

2、原來文件與新文件名稱相同,就是清空文件內容,再重新寫入;

3、So,使用write時候,一定要慎重!防止把源文件內容清空,過程不可逆;

07-文件處理-追加模式操作文件

1、追加模式,將內容追加至尾部;

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __Author__:Administrator
# Version:python3.6.5
# Date:2018/5/19 0019 18:20
file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=ab)
file.write(\n杠娘 北京 167 55 135585834333.encode(gbk))
file.close()

技術分享圖片

08-文件處理-混合操作文件

1、混合模式之r+讀寫模式;

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __Author__:Administrator
# Version:python3.6.5
# Date:2018/5/19 0019 18:28
file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=r+,encoding=gbk)
data = file.read()
print("content",data)
file.write("\nnewline 1哈哈")
file.write("\nnewline 2哈哈")
file.write("\nnewline 3哈哈")
file.write("\nnewline 4哈哈")
print("\nnew content",file.read())
file.close()

技術分享圖片

技術分享圖片

PS:先讀取內容,然後寫入,再次去讀取,內容在寫入後讀取,所以未打印出來,但文件中的確已經寫入新的內容;

1、混合模式之w+寫讀模式;

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __Author__:Administrator
# Version:python3.6.5
# Date:2018/5/19 0019 18:28

#w+寫讀模式
file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=w+,encoding=gbk)
data = file.read()
print("content",data)
file.write("\nnewline 1哈哈")
file.write("\nnewline 2哈哈")
file.write("\nnewline 3哈哈")
file.write("\nnewline 4哈哈")
print("\nnew content",file.read())
file.close()

技術分享圖片

技術分享圖片

總結:

1、r+讀寫模式,即先讀後寫,相當於以“讀”的模式打開,支持向後面追加內容至文件中;

2、w+寫讀模式,以寫的模式打開,支持讀取,我們知道,寫模式是以創建的模式打開文件,會把之前的內容先覆蓋掉,然後再寫入,但可以讀取到後續寫入的內容,使用場景:幾乎用不到;

09-文件操作其他功能

1、文件操作的其他方法;

技術分享圖片

1)手工將buffer刷入硬盤中,file.flush()方法;

 1 C:\Users\Administrator\PycharmProjects\LFXC2018\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2018.1.3\helpers\pydev\pydevconsole.py" 50524 50525
 2 import sys; print(Python %s on %s % (sys.version, sys.platform))
 3 sys.path.extend([C:\\Users\\Administrator\\PycharmProjects\\LFXC2018, C:/Users/Administrator/PycharmProjects/LFXC2018])
 4 PyDev console: starting.
 5 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
 6 file = open(file=file_flush_test.txt,mode=w,encoding=gbk)
 7 file.write(\n測試文件的flush操作)
 8 13
 9 file.write(\n再次測試文件flush操作2)
10 15
11 file.flush()

技術分享圖片

2)Linux中一切皆文件,在Linux系統中判斷文件的屬性是否可讀,返回值為布爾值,buffer中的內容不可讀取;

C:\Users\Administrator\PycharmProjects\LFXC2018\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2018.1.3\helpers\pydev\pydevconsole.py" 50583 50584
import sys; print(Python %s on %s % (sys.version, sys.platform))
sys.path.extend([C:\\Users\\Administrator\\PycharmProjects\\LFXC2018, C:/Users/Administrator/PycharmProjects/LFXC2018])
PyDev console: starting.
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
file = open(file=file_flush_test.txt,mode=w,encoding=gbk)
file.write(\n測試文件的flush操作)
13
file.write(\n再次測試文件flush操作2)
15
file.flush()
file.readable()
False

技術分享圖片

技術分享圖片

3、file.readline()每次只讀一行;

技術分享圖片

4、seek及tell方法,讀取以及跳轉至制定光標的位置;

技術分享圖片

seek方法找到的是字符嗎?

技術分享圖片

技術分享圖片

技術分享圖片

總結:

1、tell與seek方法是按照字節來讀取內容的,而read是按照字符;

2、具體內容的展示,與編碼格式有關,比如gbk2個字節,utf-83個字節(中文情況下);

技術分享圖片

5、truncate方法,按照制定長度截斷文件;

技術分享圖片

10-文件處理-文件修改功能

1、替換模式修改文件;

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __Author__:Administrator
# Version:python3.6.5
# Date:2018/5/19 0019 19:32
file = open(file=兼職白領學生空姐模特護士的聯系方式.txt,mode=r+,encoding=utf-8)
file.seek(10)
file.write("[路飛學城]luffycity")
file.close()

技術分享圖片

2、vim於word打開文件的原理說明(硬盤存儲機制與原理決定);

3、既省內存又能讀取大文件的方法——邊讀邊改(不占內容空間但是占用硬盤空間);

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # __Author__:Administrator
 4 # Version:python3.6.5
 5 # Date:2018/5/19 0019 21:29
 6 import os
 7 file_name = "兼職白領學生空姐模特護士的聯系方式.txt"
 8 file_new_name = "%s.new"%file_name
 9 old_str = "喬亦菲"
10 new_str = "杠娘"
11 file = open(file = file_name,mode=r,encoding=utf-8)
12 file_new = open(file = file_new_name,mode=w,encoding=utf-8)
13 #循環遍歷整個文件;
14 for line in file:#定義臨時變量line
15     if old_str in line:
16         line = line.replace(old_str,new_str)
17     file_new.write(line)
18 file.close()
19 file_new.close()
20 os.rename(file_new_name,123.txt)
王心顏 [路飛學城]luffycity424
馬纖羽    深圳 173    50 13744234523
喬亦菲    廣州 172    52 15823423525
羅夢竹    北京 175    49 18623423421
劉諾涵    北京 170    48 18623423765
嶽妮妮    深圳 177    54 18835324553
賀婉萱    深圳 174    52 18933434452
葉梓萱    上海 171    49 18042432324
杜姍姍 北京  167 49 13324523342
black girl  河北  167 50  13542342233

練習題

練習題1 —— 全局替換程序:

  • 寫一個腳本,允許用戶按以下方式執行時,即可以對指定文件內容進行全局替換;

      `python your_script.py old_str new_str filename`
    
  • 替換完畢後打印替換了多少處內容;

練習題2 —— 模擬登陸:

  • 用戶輸入帳號密碼進行登陸;
  • 用戶信息保存在文件內;
  • 用戶密碼輸入錯誤三次後鎖定用戶,下次再登錄,檢測到是這個用戶也登錄不了;

11-函數-基本介紹

書籍推薦——JInPIngMei(博客園,不讓使用中文);

1、函數初識;

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __Author__:Administrator
# Version:python3.6.5
# Date:2018/5/19 0019 22:45
def helloworld():#函數名sayhi
    print("Hello,I‘m TQTL.")
print(helloworld)#直接打印是內存地址:<function sayhi at 0x0000020147E219D8>
helloworld()#通過函數名進行調用;
#函數可以帶有參數
def sayhi(name):
    print("Hello",name)
    print("My name is black girl.")
#sayhi()#TypeError: sayhi() missing 1 required positional argument: ‘name‘ 報錯,缺少位置參數;
sayhi(TQTL)#Hello TQTL

#寫一個計算兩個數的乘方的程序;
a,b = 5,3
c = a**b
print(c)#125
#使用函數改造以上程序;
def calc(x,y):
    res = x**y
    print(res)
calc(2,10)#1024
calc(2,5)#32
#函數的特性:
"""
較少重復代碼,提升程序員的逼格兒;
使程序變得可拓展,引用函數的位置,修改一處即可完成擴展操作;
使程序變得容易維護,比如之前報警使用郵件,現在改為微信,修改一處即可;
"""

12-函數-默認參數

1、函數參數的作用;

  • 形參變量
  • 是參變量

技術分享圖片

2、默認參數;

技術分享圖片

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # __Author__:Administrator
 4 # Version:python3.6.5
 5 # Date:2018/5/19 0019 23:11
 6 def stu_register(name,age,country,course):#形參
 7     print("學生註冊信息".center(30,-))
 8     print(name,age,country,course)
 9 stu_register("王山炮",22,"CN","Python")#實參
10 stu_register("張叫春",21,"CN","Linux")#實參
11 stu_register("劉老根",25,"CN","Devops")#實參
12 print("兩段程序的分割線".center(40,#))
13 #def stu_register(name,age,country = "CN",course):#形參,SyntaxError: non-default argument follows default argument
14 def stu_register(name,age,course,country = "CN"):#形參
15     print("學生註冊信息".center(30,-))
16     print(name,age,course,country)
17 stu_register("王山炮",22,"Python")#不傳實參
18 stu_register("張叫春",21,"Linux","JP")#傳了其他的實參JP
19 stu_register("劉老根",25,"Devops","CN")#傳了默認參數CN,
小結:默認參數必須放在位置參數之後;

13-函數-關鍵參數

14-函數-非固定參數

15-函數-非固定參數2

16-函數-返回值

17-函數-局部變量

18-函數-在函數裏修改全局變量

19-函數-在函數裏修改列表數據

20-函數-嵌套函數

21-函數-作用域

22-函數-匿名函數

23-函數-高階函數

24-遞歸介紹

25-遞歸與棧的關系

26-遞歸的作用

27-遞歸的特性總結

28-遞歸的作用

29-尾遞歸優化

30-函數-內置方法1

31-函數-內置方法2

32-函數-內置方法3

33-函數-內置方法4

34-函數-內置方法5

36-函數-函數進階-雞湯

37-函數-函數進階-命名空間

38-函數-函數進階-作用域的查找空間

39-函數-函數進階-閉包

40-函數-函數進階-裝飾器

41-函數-函數進階-裝飾器流程分析

42-函數-函數進階-裝飾器帶參數的函數

43-函數-函數進階-裝飾器帶參數2

44-函數-函數進階-列表生成式

45-函數-函數進階-生成器

46-函數-函數進階-斐波那契數列

47-函數-函數進階-生成器調用方法

48-函數-函數進階-函數寫生成器

49-函數-函數進階-生成器send方法

50-函數-函數進階-叠代器

51-函數-函數進階-作業需求

第二模塊·函數編程-第1章 函數、裝飾器、叠代器、內置方法