1. 程式人生 > >第三章、函數編程

第三章、函數編程

合並 ble iss 位置參數 body 函數默認參數 大小寫轉換 復用 getc

(一)三元運算

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

if 條件成立:

val =1

else:

val =2

三元運算:

val =1 if 條件成立 else 2

(二)文件處理

f=open(file="file_path",mode=‘r‘,encoding=‘utf-8‘)

data=f.read()

f.close()

1、二進制模式

r:文本只讀模式,默認將二進制轉換為字符串

rb:二進制模式讀取,不進行轉碼,硬盤怎麽存儲怎麽讀取。如網絡傳輸的文本或

img或視頻等。不寫encoding參數

2、智能檢測編碼工具,chardet

chardet.detect()

3、寫模式操作文件:

w:可寫模式,創建新文件。有則覆蓋,無責創建

wb:二進制模式寫入,無需encoding參數。寫視頻,圖片等。

4、追加模式:

a:普通追加模式

ab:二進制模式追加

5、混合模式:

r+:先讀取內容,支持內容追加

w+:先寫入(創建)內容,支持內容讀取

6、文件操作其他方法:

fileno()返回文件句柄在內核中的索引值,IO多路復用可用

flush()把文件從內存buffer(緩存)裏強制刷新到硬盤

readline()只讀一行,遇到\n或\r為止

seek()移動光標到指定位置 ,按字節移動光標,utf-8三個字節一個字符,gbk兩個字節一個字符

seekable()判斷文件是否可進行seek操作

tell()返回光標所在位置,按字節返回光標

truncate()按指定長度截斷文件,按指定長度截取文件,均從首位截取

writable()判斷文件是否可寫

7、文件修改

逐行,os.rename()重命名,truncate()截取

(三)函數編程

1、函數基本介紹

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

def sayhi():#函數名
print("Hello,I‘m nobody!")

減少重復代碼

使程序變的可擴展,易維護

2、函數默認參數

形參:只有在被調用時,才分配內存單元。只在內部有效。函數調用結束返回主調用函數後不能在使用該形參變量

實參:可以是常量、變量、表達式、函數等,無論類型,在調用時他們都必須有確定的值,以便將這些值傳

默認參數:默認參數必須跟在位置參數(非默認參數)後面

3、函數關鍵參數

只需要在調用的時候指定參數名,關鍵參數也必須放在位置參數之後。

4、非固定參數

*形參名,將參數組成元組。一般都寫成*args。可直接傳遞列表或元組。傳入列表將打包成元組的第一個參數,為避免該問題,在列表或元組前面加*符號。

**行參名,一般寫成**kwargs,單個字典傳入需在實參前加**符號

5、返回值

默認返回None,return只能放函數最後位置,表示一個函數終止。支持任意類型數據返回,包括函數名

6、函數局部變量

在函數內部定義的變量稱局部變量,只能在函數內部使用,函數執行完則回收。裏面能調用外面參數,外面不能調用函數內部變量。如果函數內部和外部都有一個同名變量,函數將從內至外查找。

7、函數全局變量

定義在函數外部一級代碼的變量,叫全局變量,從上至下全局可用。函數內部默認無法修改全部變量,修改默認則創建局部變量。

8、函數內部修改全局變量

用global關鍵字聲明

9、函數內部修改全局列表

可修改列表內容,不能修改列表整體。修改整體需global關鍵字。

10、函數嵌套

函數內部再定義函數。要想執行必須調用

11、函數作用域

在py中,一個函數就是一個作用域。局部變量放置在其作用域中。一個變量定義完成後,作用域就已經確定

12、匿名函數

多行語句變為一行,減少代碼量,看著更高級

#常規函數
def calc(x,y):
if x < y:
return x*y
else:
return x/y
#聲明匿名函數
func=lambda x,y:x*y if x<y else x/y
print(calc(9,8))
print(func(9,8))

和其他方法混用

#求一個列表元素平方
data=list(range(10))
print(data)

for index,i in enumerate(data):
data[index]=i*i
print(data)

#匿名函數方法
print(list(map(lambda x:x*x,data)))

13、高階函數

變量可以指向函數,函數的參數能接收變量,那麽一個函數就可以接受另一個函數作為參數,這種函數稱為高階函數。

(五)數據類型

1、浮點數

(1)、定義:有限小數和無線循環小數統稱為浮點數

(2)、Python中精確度:只能精確到小數點後16位,因存儲結構問題,其他語言也有相似問題。

(3)、高精度計算方法:用decimal中的getcontshext()和Decimal()方法

2、列表

列表是一個有序數據集合,集合內可以放任何數據,可對集合操作增刪改查操作。

(1)、創建:L1=[]或L1=list()

(2)、查詢:通過索引進行查詢。查找索引值index(),只能找到第一個匹配項。統計count()方法

(3)、切片:L2=L1[x:y:j],顧頭(x)不顧尾(x)原則,j為步長

(4)、增加:append()方法追加元素到末尾,insert(i,x)方法插入元素到指定位置,兩個列表相加可用"+"符號連接,也可用L1.extend(L2)方法

(5)、修改:L1[i]="new obj"或L1[x:y]="new obj"

(6)、刪除:L1.pop()刪除末尾元素並返回該對象。L1.remove(obj)刪除指定對象(查找的第一個),L1.remove(i)刪除index為i的元素。Del L1刪除列表L1對象,del L1[x:y]刪除多個元素。清空列表L1.clear()

(7)、循環:

(8)、排序:L1.sort(),只能通類型排序。L1.reverse()反轉序列

(9)、copy:只能第一層列表獨立即淺復制,需要整個列表對象完全獨立需用導入copy模塊,用copy.deepcopy()方法

3、字符串

字符串是一個有序的字符的集合,用於存儲和表示基本的文本信息,一對單、雙、三引號中間包含的內容稱之為字符串。

1、特性:

?.有序

?.不可變

2、方法:

s.swapcase()大小寫轉換

s. capitalize()首字母大寫,其他小寫

s. casefold()轉換成小寫

s.center()格式化字符串,指定字符串長度和兩邊占位符

s.count()統計字符串,可指定統計範圍

s.endswith()判斷是否以某字符結尾

s.expandtabs()擴展table鍵,即指定table鍵的長度

s.find()返回指定字符索引,找不到返回-1,也可指定範圍

s.format()字符串格式化,

s.index()返回自定字符的索引,可指定開始和結束

s.isalnum()是否是阿拉伯字符,包括數字和字母

s.isalpha()是否全是字母

s.isdigit()類似s.isdecimal()或s.isnumeric()是是否全是整數

s.isidentifier()是否為可用變量名

s.isprintable()

s.isspace()判斷是否為空格

s.istitle()第一個字符均大寫

s.isupper()是否均為大寫

s.lower()轉換為小寫

s.upper()轉換為大寫

s.join()字符串拼接

s.ljust()從左邊開始,將字符串變為指定長度字符串,類似rjust()

s.strip()去掉指定字符串,默認為空格和換行

s.lstrip()去掉左邊指定字符串rstrip()

str.maketrans()創建對應表格

s.translate()更具表格翻譯字符串

s.partition()以某字符串將字符串分割成兩半,左邊查找到的第一個字符rpartition相反

s.replace()替換字符串,可指定更換個數

s.rfind()查找最右邊指定字符,找不到返回-1

s.rindex()類似rfind,找不到則報錯

s.strip()根據自定字符分割成列表

s.rstrip()默認和strip無區別

s.splitlines()按行分割

s.startwith()判斷以某字符串開始

s.endwith()判斷以某字符結束

s.title()變為title格式

s.zfill()將字符串變為指定長度,不夠的左邊填零

3、元組

一旦創建,便不能再修改,也叫只讀列表

?功能:

index

count

切片

?作用:顯示告知,不能修改,如配置信息等

4、hash

將任意長度的消息壓縮到某一固定長度的消息後再輸出。不通的輸入通過散列算法可能會散列成相同的輸出,所以不能從散列值來唯一確定輸入值。因此被hash的值必須是不可變的,如數字、字符串、元組等。

用途:

文件簽名

Md5加密

密碼驗證

語法:

hash(obj)

5、字典

字典是一種key-value的數據類型,key必須唯一,且可hash,字典無序的,且查找速度快。

判斷是否存在:in方法

獲取:get(),有則返回,無則返回None。直接中括號獲取,無則報KeyError

刪除:pop(‘key‘)刪除指定key並返回key對應的value,popitem()隨機刪除一個,clear(),del d[‘key‘]

多級嵌套:

copy():類似列表copy

values():打印所有值

keys():打印所有key

items():key和value組成元組,並放入一個列表中

update():類似list中extend(),兩個字典合並成一個,重復key則覆蓋

setdefault():有key則獲取,無key則設置

fromkeys():批量生成字典

6、集合

無序,不重復的數據集合。作用為去重(把列表變為集合自動去重)和關系測試

列表和元組可轉換為集合。

add():增加,只能添加一個

pop():隨機刪除一個值

remove():刪除指定對象,不存在則報錯

discard():刪除指定對象,不存在也不報錯

update():兩個集合聯合在一起,可添加多個值,列表方式

clear():清空

關系測試:

交集:intersection()或&

差集:difference()或-

並集:union()或|

取交集相反(對稱差集):symmetric_difference()

判斷是否子集:issubset()或<=

判斷是否為超集:issuperset()或>=

判斷兩個集合是否相交:isdisjoint()

(六)進制拾遺

1、python中進制轉換

oct(int):轉八進制

hex(int):轉十六進制

bin(int):轉二進制

2、為何使用十六進制

八進制很少使用。

在操作系統和編碼中均使用十六進制,方便查看,統一規範,便於網絡抓包分析。

3、十六進制與二進制轉換

二進制轉16進制:取四合一(從左朝右取四位二進制轉換成10進制)

16進制轉二進制:剛好與二進制轉16進制相反

表示:0x前綴(有時會將0忽略掉)或BH後綴

(七)字符編碼

1、UTF是unicode編碼設計得一種在存儲和傳輸時節省空間得編碼方案

2、decode(),encode()

3、可通過type()查看字符類型

4、python3中文件默認為utf-8編碼,字符串編碼是unicode

python2文件默認是ascii嘛,字符串默認是ascii碼,若文件頭有聲明編碼類型,則字符串編碼也就是該類型。unicode類型在python2中是單獨一個類型。

5、python中bytes類型:

?、在py2中,bytes和str是一回事兒,因為要表示圖片視頻等二進制格式得數據,所以有bytes類型。py2以utf8編碼的字符串在Windows下無法顯示。decode()或聲明為unicode。

?、在py3中,str等於unicode

第三章、函數編程