函式式程式設計

2021-08-31 13:29:16 字數 2602 閱讀 6550

相同的:都是是每一元素進行操作

不同:map會生成乙個跟原來資料相對應的新佇列,filter只有符合條件的才會進入新的資料集合

filter函式怎麼寫:

利用給定函式進行判斷

返回值一定是個布林值

呼叫格式: filter(f, data), f是過濾函式, data是資料

filter內容是乙個可迭代的物件

把乙個序列按照一定演算法進行排列

sorted(list,reverse(正向排序還是反向排序))

例子

# 排序案例2

a = [-43,23,45,6,-23,2,-4345]

# 按照絕對值進行排序

# abs是求絕對值的意思

# 即按照絕對值的倒敘排列

al = sorted(a, key=abs, reverse=true)

print(al)

結果[-4345, 45, -43, 23, -23, 6, 2]

# 閉包常見坑

def count():

# 定義列表,列表裡存放的是定義的函式

fs =

for i in range(1,4):

# 定義了乙個函式f

# f是乙個閉包結構

def f():

return i*i

return fs

f1,f2,f3 = count()

print(f1())

print(f2())

print(f3())結果9

99出現問題:

- 造成上述狀況的原因是,返回函式引用了變數i, i並非立即執行,而是等到三個函式都返回的時候才統一使用,此時i已經變成了3,最終呼叫的時候,都返回的是 3*3

- 此問題描述成:返回閉包時,返回函式不能引用任何迴圈變數

- 解決方案: 再建立乙個函式,用該函式的引數繫結迴圈變數的當前值,無論該迴圈變數以後如何改變,已經繫結的函式引數值不再改變

修改後:

# 修改上述函式

def count2():

def f(j):

def g():

return j*j

return g

fs =

for i in range(1,4):

return fs

f1,f2,f3 = count2()

print(f1())

print(f2())

print(f3())結果1

49

import time

# 高階函式,以函式作為引數

def printtime(f):

print("time: ", time.ctime())

return f(*args, **kwargs)

在這裡我認為它是既可以執行修飾函式同時還可以執行當成引數的函式

# 上面定義了裝飾器,使用的時候需要用到@, 此符號是python的語法糖

@printtime

def hello():

print("hello world")

hello()

time: mon apr 2 21:14:52 2018

hello world

#裝飾器一旦定義,就可以裝飾任何函式,一旦被修飾,相當於裝飾器掛載到了定義函式功能上

l1 = [ 1,2,3,4,5]

l2 = [11,22,33,44,55]

z = zip(l1, l2)

print(type(z))

print(z)

for i in z:

print(i)

結果(1, 11)

(2, 22)

(3, 33)

(4, 44)

(5, 55)

em = enumerate(l1, start=100)

l2 = [ i for i in em]

print(l2)

結果[(100, 11), (101, 22), (102, 33), (103, 44), (104, 55)]

tuple

是乙個可以命名的型別

import collections

point = collections.namedtuple("point", ['x', 'y'])

p = point(11, 22)

print(p.x)

print(p[0])

結果11

11

比較方便的解決了頻繁刪除插入帶來的效率問題

from collections import deque

q = deque(['a', 'b', 'c'])

print(q)

print(q)

print(q)

結果deque(['a', 'b', 'c'])

deque(['a', 'b', 'c', 'd'])

deque(['x', 'a', 'b', 'c', 'd'])

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...

函式式程式設計

最近在看一些關於js方面的東東,除了些ajax的基本應用,還了解了些函式式程式設計 fp 的東東。雖然以前也玩過幾天lisp的,不過因為當時完全對fp的東西沒有概念,壓根就不知道原來這是list那一族最大的特性之一 另外我知道的還有個是gc,orz.光注意那些詭異的 表 去了。總結一下,傳統上認為f...

函式式程式設計

維基百科 函式式程式設計 英語 functional programming 或者函式程式設計,又稱泛函程式設計,是一種程式設計范型,它將計算機運算視為數學上的函式計算,並且避免使用程式狀態以及易變物件。函式程式語言最重要的基礎是 演算 lambda calculus 而且 演算的函式可以接受函式當...