# 函式式程式設計
# 高階函式--把函式作為引數傳入,這樣的函式稱為高階函式,函式式程式設計就是指這種高度抽象的程式設計正規化。
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儲存的是無序集合,所以我...