python函數式編程

高階函數:就是把函數當成參數傳遞的一種函數

一、函數名能夠進行賦值;html

二、函數名能夠做爲函數參數,還能夠做爲函數的返回值;python

a、函數是第一類對象app

b、函數能夠被賦值ide

c、能夠被當作參數函數

d、能夠當作返回值spa

e、能夠做爲容器類型的元素code

def f(n):
    return n*n
def foo(a,b,func):
    ret = func(a) + func(b)
    return ret
foo(1,2,f)
print(foo(1,2,f))
#傳入參數a=1,b=2,func=f;
#ret = f(1) + f(2);
#f(1)=1,f(2)=4此時調用f函數;
#ret=5;

map函數:

描述orm

map() 會根據提供的函數對指定序列作映射。htm

第一個參數 function 以參數序列中的每個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。對象

語法

map() 函數語法:

map(function, iterable, ...)

參數

  • function -- 函數
  • iterable -- 一個或多個序列

返回值

Python 2.x 返回列表。

Python 3.x 返回迭代器。

實例

>>>def square(x) :            # 計算平方數
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 計算列表各個元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函數
[1, 4, 9, 16, 25]
 
# 提供了兩個列表,對相同位置的列表數據進行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
msg = [1,12,33,42,15,16]
#需求自增1
def add_one(x):
    return x+1
#需求自減1
def reduce(x):
    return x-1
#需求平方
def pf(x):
    return x**2
#實現邏輯
def fangfa(func,red):
    ret = []
    for i in red:
        res = func(i)
        ret.append(res)
    return ret
print(fangfa(add_one,msg))
print(fangfa(reduce,msg))
print(fangfa(pf,msg))

print(fangfa(lambda x:x+1,msg)) #用lambda函數替換add_one函數
print(fangfa(lambda x:x-1,msg)) #用lambda函數替換requce函數
print(fangfa(lambda x:x**2,msg))#用lambda函數替換pf函數

print(list(map(lambda x:x+1,msg))) #map處理的結果是一個可迭代對象,python3中需用list轉換;
print(list(map(lambda x:x-1,msg))) #map的第一個參數是邏輯,第二個參數是可迭代對象;
print(list(map(lambda x:x**2,msg)))
View Code

 filter函數:

描述

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個爲函數,第二個爲序列,序列的每一個元素做爲參數傳遞給函數進行判,而後返回 True 或 False,最後將返回 True 的元素放到新列表中。

語法

如下是 filter() 方法的語法:

filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回值

返回列表

實例

如下展現了使用 filter 函數的實例:

def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)

[1, 3, 5, 7, 9]
lise_l = ["sb_asd","sb_we","sb_ig","rng"]
#需求去掉開頭是sb的
def sh_show(n):
    return n.startswith("sb")
#實現邏輯
def filter_test(func,array):
    red = []
    for i in array:
        if not sh_show(i):
            red.append(i)
    return red
print(filter_test(sh_show,lise_l))

print(filter_test(lambda n:n.startswith("sb"),lise_l))#lambda

print(list(filter(lambda n:not n.startswith("sb"),lise_l)))#filter
View Code

 reduce函數

描述

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(鏈表,元組等)中的全部數據進行下列操做:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 一、2 個元素進行操做,獲得的結果再與第三個數據用 function 函數運算,最後獲得一個結果。

在 Python3 中,reduce() 函數已經被從全局名字空間裏移除了,它如今被放置在 fucntools 模塊裏,若是想要使用它,則須要經過引入 functools 模塊來調用 reduce() 函數:

from functools import reduce
from functools import reduce

def add(x,y):
    return x + y

print (reduce(add, range(1, 101)))
 

語法

reduce() 函數語法:

reduce(function, iterable[, initializer])
 

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回值

返回函數計算結果。

實例

如下實例展現了 reduce() 的使用方法:

>>>def add(x, y) :            # 兩數相加
...     return x + y
... 
>>> reduce(add, [1,2,3,4,5])   # 計算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函數
15

 python的內置函數

    內置函數    
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() reduce() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reverse() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()  
delattr() help() next() setattr()  
dict() hex() object() slice()  
dir() id() oct() sorted() exec 內置表達式
 

 

print(abs(-1))#取絕對值
print(all([1,2,3]))#用於判斷給定的可迭代參數 iterable 中的全部元素是否都爲 TRUE,若是是返回 True,不然返回 False。元素除了是 0、空、FALSE 外都算 TRUE。
print(any([1,2,3]))#用於判斷給定的可迭代參數 iterable 是否所有爲 False,則返回 False,若是有一個爲 True,則返回 True。元素除了是 0、空、FALSE 外都算 TRUE。
print(bin(10))#返回一個整數 int 或者長整數 long int 的二進制表示。
print(hex(10))#用於將10進制整數轉換成16進制,以字符串形式表示。
print(oct(10))#函數將一個整數轉換成8進制字符串。
print(chr(97))#返回值是當前整數對應的ascii字符。
print(bool(0))#用於將給定參數轉換爲布爾類型,若是沒有參數,返回 False。
print(dict(a="1"))#用於建立一個字典
print(dir(list))#函數不帶參數時,返回當前範圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表。若是參數包含方法__dir__(),該方法將被調用。若是參數不包含__dir__(),該方法將最大限度地收集參數信息。
print(divmod(10,3))#函數把除數和餘數運算結果結合起來,返回一個包含商和餘數的元組(a // b, a % b)。
print(list(enumerate(["lw","xa","ww"])))#用於將一個可遍歷的數據對象(如列表、元組或字符串)組合爲一個索引序列,同時列出數據和數據下標,通常用在 for 循環當中。
print(eval("2+2"))#用來執行一個字符串表達式,並返回表達式的值。
def is_odd(n):
    return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])#用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。該接收兩個參數,第一個爲函數,第二個爲序列,序列的每一個元素做爲參數傳遞給函數進行判,而後返回 True 或 False,最後將返回 True 的元素放到新列表中。
print(list(newlist))
print(float(1))#用於將整數和字符串轉換成浮點數。
#"{1} {0} {1}".format("hello", "world")  # 設置指定位置,format 函數能夠接受不限個參數,位置能夠不按順序。
print(globals())#以字典類型返回當前位置的所有全局變量。
print(hash("test"))#用於獲取取一個對象(字符串或者數值等)的哈希值。
print(help(dict))#用於查看函數或模塊用途的詳細說明。
print(id(list))#用於獲取對象的內存地址。
print(int("13",8))#用於將一個字符串或數字轉換爲整型。8表明進制數;
print(len("asdfghj"))#返回對象(字符、列表、元組等)長度或項目個數。
print(max(10,90,1000))#返回給定參數的最大值,參數能夠爲序列。
print(min(10,90,1000))#返回給定參數的最小值,參數能夠爲序列。
p = {"name":"alex","age":18,"hobby":"gilr"}
print(list(zip(p.keys(),p.values())))#拉鍊函數,兩個參數均爲序列,用於將可迭代的對象做爲參數,將對象中對應的元素打包成一個個元組,而後返回由這些元組組成的列表。
內置函數用法

 

max和min高級用法:

用法

一、max進行比較時傳入的數據類型必須是可迭代對象(基本原理就是一個for循環依次取出可迭代對象中的每個元素進行比較);

二、比較時從第一個元素進行比較(按ascii碼進行排序),若是第一個元素分出大小則後面就不進行比較了;

ll = ["10a","A20","A10"]
print(max(ll))
A20

 

msg = {"age1":18,"age2":20}
print(max(zip(msg.values(),msg.keys())))
(20, 'age2')

 

people = [
    {"name":"alex","age":70},
    {"name":"wpq","age":100},
    {"name":"lhf","age":30},
    {"name":"lw","age":50}
]
print(max(people,key=lambda dic:dic["age"])) #傳入key參數
相關文章
相關標籤/搜索