2017 06 05 Python 相關概念(二)

2021-07-31 16:00:22 字數 2555 閱讀 1886

map/reduce

-map的格式是map(f,[a,b,c]),就是把a,b,c依次的代入到f函式中直行,並且返回乙個list型別的結果。其目的是將函式的作用抽象化

- 返回的結果是乙個list,所以需要先y = list(map(f,)),然後再print(x)

-reduce的作用是把乙個函式作用在乙個序列[x1, x2, x3, ...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算,reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

-使用reduce的時候需要from functools import reduce

filter

- 也是接收兩個引數,其中乙個是函式,另乙個輸入是序列。但是不同於map的點在於,輸入函式的返回值要求是bool型的。比如,刪掉序列中的不是5的倍數的元素

# -*- coding:utf-8

defis_5

(x):

return x % 5 == 0

x = list(filter(is_5,[1,2,3,5,10,7,8,15,4,20]))

print(x)

廖雪峰的**上的講解題目是「埃氏演算法」尋找序列中的素數,其中用到了lambda,還需要理解,尤其是如何將變數序列傳遞進去,因為

# -*- coding: utf-8 -*-

#判斷是否可除盡

defis_divisible

(n):

return

lambda x : x % n != 0

defjud

(x):

return list(filter(is_divisible(x[0]),x))

deffind_prime

(x):

l =

while( len(x) > 1 ):

x = jud(x)

return l

# 測試

sorted也是乙個高階函式,可以接收乙個key函式進行檢索,格式如下:sorted(list,key = func_name),表示對list進行函式func_name的變換之後,再進行排序。甚至可以傳入多個函式

比如sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower, reverse=true),表示先將首字母小寫之後排序,並且是逆序

返回函式

就是定義在函式內部的函式,並且通過return返回該函式以及該函式的一些引申。但是,如果不加括號(),就可以不得到函式的運算值,加了括號()就可以獲得函式的值。

要注意的是:在函式中不要代入會改變的值,比如迴圈的值,因為只會得到最後的代入值結果。

匿名函式

lambda應該就是匿名函式。我們在傳入函式時,有些時候,不需要顯式地定義函式,直接傳入匿名函式更方便。

所以這樣就可以解釋前面提到的使用lambda的地方了?(還是不能解釋為什麼沒有傳遞,x就進入到裡面共呼叫了)

裝飾器

之前講過函式可以賦值給變數,那麼可以通過呼叫變數的__name__屬性來檢視函式的名字。(注意是兩個下劃線)

裝飾器:在函式定義之前放置@裝飾器的名稱,這樣在呼叫函式的時候,首先會執行裝飾器的內容,然後執行函式本身

不想看裝飾器的後面部分了

偏函式

就是在有的時候傳入的變數數目太多,而且有有一些固定的時候,可以使用偏函式建立新函式,固定住一些函式。比如int2 = functools.partial(int,base = 2)就是固定住傳進去的base,然後重新生成乙個函式。使用的時候需要import functools

20170605初學筆記之python

csv文字格式的讀寫 對元組中的資料進行集體處理 ctypes庫的使用 python函式的效能分析 操作符的使用 讀寫函式由python自帶庫csv提供,無論讀寫,均需要建立讀寫物件。以下為 import csv class csvapi object def init self,file self...

Python的標準庫sys copy os相關用法

1.sys庫相關函式 1.1 sys.argv sys.argv是用來專門向python直譯器傳遞引數,所以稱為命令列引數 舉例說明 import sys print the file name sys.argv 0 print the number of argument len sys.argv...

python筆記 json與string相互轉化

我在從web獲取到json資料時,需要儲存在本地文字檔案中,這就需要json轉換為string,使用快取資料時,又需要string轉json。注意,如果要存入文字文件,一定先將dict轉為string,string裡面key要使用雙引號,要不然存在文字文件裡的就是單引號,取出來的string不能轉換...