Python學習筆記(五)

2021-07-02 20:30:10 字數 3610 閱讀 8781

# 函式式程式設計

# 高階函式--把函式作為引數傳入,這樣的函式稱為高階函式,函式式程式設計就是指這種高度抽象的程式設計正規化。

def xx(a):

return a*a

def func (a,b,c):

return c(a)+c(b)

print(func(-10,-12,xx))

# map()--函式接收兩個引數,乙個是函式,乙個是序列,map將傳入的函式依次作用到序列的每個元素,並把結果作為iterators(迭代器)返回

i = map(str,[1,2,3,4])

for x in i:

print(x)

i = map(abs,[-1,-2,-3,-4])

l = list(i)

print(l)

# filter()--filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。

def is_even(n):

return n % 2 == 0

lf = filter(is_even, [x for x in range(1,100)])

lf = list(lf)

print(lf);

# sorted 函式

k = sorted(['a', 'b', 'c', 'd', 'e'])

print(k)

# 返回乙個函式

def lazy_sum(*args):

def sum():

ax = 0

for n in args:

ax = ax + n

return ax

return sum

f = lazy_sum(1, 3, 5, 7, 9)

f1 = lazy_sum(1, 3, 5, 7, 9,10)

print(f,'\n',f(),'\n',f1())

# 通過cout返回三個函式(以list形式返回,函式平沒有執行),因為i在變,函式的結果為呼叫時當前i值。

# 如下函式f1(),f2(),f3()在呼叫時i值都已為3

def count():

fs =

for i in range(1, 4):

def f():

return i*i

return fs

f1, f2, f3 = count()

print(f1())

print(f2())

print(f3())

# 通過建立乙個函式,用該函式的引數繫結變數當前的值,變數的改變,對已返回函式的值沒有影響

def count():

fs =

for i in range(1, 4):

def f(j):

def g():

return j*j

return g

return fs

x = ()

x = count()

print(x[0])

print(x[1])

print(x[2])

f1,f2,f3 = count()

print(f1())

print(f2())

print(f3())

# 匿名函式--lambda

def is_radices(x):

return x%2 == 1

# is_radices與 lambda x: x%2 == 1 意義相同

la = filter(is_radices, [x for x in range(1,10)])

int1 = 0

for v in la:

int1 = int1 + v

print(int1)

la1 = filter(lambda x: x%2 == 1, [x for x in range(1,10)])

int2 = 0

for v in la1:

int2 = int2 + v

print(int2)

# 裝飾器--decorator(本質上也是乙個函式)

def hello(name):

print('hello',name)

hi = hello

hello('老李')

hi('老張')

# 呼叫函式物件的__name__屬性(顯示函式名稱)

print(hello.__name__)

print(hi.__name__)

# 定義decorator接受函式,返回函式(任意個引數)

import functools # 匯入functools模組

def wlog(func): #定義沒有引數的decorator

@functools.wraps(func) #若缺少,函式的name屬性將改變為wrlog(最終的返回函式)

def wrlog(*args, **kw):

print ('write %s()start:' % func.__name__)

call = func(*args, **kw)

print ('write %s()end:' % func.__name__)

return call

return wrlog

def rlog(text): #定義有引數的decorator

def decorator(func): #若缺少,函式的name屬性將改變為rlog(最終的返回函式)

@functools.wraps(func)

def relog(*args, **kw):

print ('%s %s():' % (text, func.__name__))

return func(*args, **kw)

return relog

return decorator

# 將decorator作用於函式

@wlog # 呼叫沒有引數的decorator

def say(name):

print('say',name)

say('小小')

print(say.__name__)

@rlog('success') # 呼叫有引數的decorator

def talk(name):

print('talk',name)

talk('大大')

print(talk.__name__)

# 偏函式(固定函式的部分引數,使函式生成新的函式)

import functools

def square(x,n):

i,sum = (0,0)

while i <= x:

j = 1

temp = 1

while j <= n:

temp = temp*i

j = j + 1

sum = sum + temp

i = i + 1

return sum

square1 = functools.partial(square, n=3)

print(square1(3))

python學習筆記(五)

python裡的流程控制語句 if expression statements s else statements s identationerror 縮排錯誤,縮排4個空格 true 非空的值 string,tuple,list,set,dict false 0,null,其他空值 需要多次判斷使...

python 學習筆記 (五)

遞迴函式,如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。該包下的iterable方法是用來判斷物件是否可以迭代 from collections import iterable 遞迴算階乘 def fact n if n 1 return 1 return n fact n 1 print ...

Python學習筆記(五)

set set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。建立 呼叫 set 並傳入乙個 list,list的元素將作為set的元素 s set a b c set會自動去掉重複的元素。訪問 由於set儲存的是無序集合,所以我...