命名空間實際上就是以個字典,是用來儲存變數的字典
locals()函式是用來獲取當前作用域的命名空間
如果在全域性作用域中呼叫locals()函式則獲取的是全域性命名空間
如果在函式作用域中呼叫,則獲取的是函式的命名空間
a=
10s=
locals()
#獲取的是全域性命名空間
deffn(
):b=2
s1=locals()
#獲取的是函式命名空間
a=
123s=
locals()
s['b']=
20#向字典中新增key-value,相當於在全域性中建立乙個變數
print
(b)
以上**中新增變數的方式一般不使用這種方法
遞迴簡單來說就是自己呼叫自己
遞迴函式就是在函式中自己呼叫自己
遞迴函式的兩個條件:
1、基線條件:問題可以被分解為最小的問題,當滿足基線條件的時候,遞迴就不在執行
2、遞迴條件:將問題可以分解的條件
例:建立乙個函式用來檢查任意字串是否是回文字串,如果是返回true否則返回false
注:回文字串即從後往前讀和從前往後讀是一樣的。例:abcba
def
fn(n):if
0<
len(n)
<2:
return
true
elif n[0]
!=n[-1
]:return
false
ruturn fn(n[1:
-1])
a=fn(
'abcba'
)print
(a)
滿足以下兩個條件的都是高階函式
1、接受函式作為引數
2、將函式作為返回值的函式
當使用乙個函式作為引數時,實際上是將指定的**傳遞給了目標函式
例:將指定列表中的偶數儲存到乙個新的列表中並返回
def
fn(lis)
:def
fn1(n)
:if n%2==
0:return
true
new_list=
for i in lis:
if fn(i)
:return new_list
將上面**改為高階函式
def
fn(n)
:if n%2==
0:return
true
deffn1
(fun,lis)
:#接受乙個函式作為引數。fn1()函式就是乙個高階函式
new_list=
for i in lis:
if fun(i)
:return new_listl=[
1,2,
3,4,
5,6,
7,8,
9,10]
a=fn1(fn,l)
print
(a)
匿名函式是乙個lambda表示式
匿名函式最大的好處就是只會呼叫一次,用完就會從記憶體中消失
匿名函式一般都是作為引數使用,其他地方不不用
lambda函式表示式是用來建立一些簡單的函式,是函式另一種方式
lambda語法:lambda 引數列表:返回值
print
(lambda a,b:a+b)
#定義乙個函式實現兩個數的和
fn0=
lambda a,b:a+b#將匿名函式賦值給乙個變數
print fn0(1,
3)
filter()函式
該函式可以從序列中過濾出符合條件的元素,儲存到乙個新的序列
使用時需要兩個引數1、函式(根據該函式來過濾序列),2、需要過濾的序列
def
fn(n)
:if n%2==
0:return
truel=[
1,2,
3,4,
5,6,
7,8,
9,10]
a=list
(filter
(fn,l)
)print
(a)
map()函式
改函式可以對可迭代物件中所有元素做指定操作,然後將其新增到乙個新的物件中返回
l=[1
,2,3
,4,5
,6,7
,8,9
,11]#將l中所有元素加1
lambda i : i+1,l
r=map
(lambda i:i+
1,l)
print
(list
(r))
sort()函式
該函式可對列表當中的元素進行排序
關鍵字key需要乙個函式作為引數,每次都會以列表中的乙個元素作為引數來呼叫函式,並且使用函式的返回值來比較大小
lst=
['bb'
,'aaa'
,'c'
,'ddddddd'
]lst.sort(key=
len)
print
(lst)
sorted()函式
改函式會返回乙個新的列表
lst=[3
,'2',1
,'6']r=
sorted
(lst,key=
int)
print
(r)
將函式作為返回值返回,也是一種高階函式
通過閉包可建立一些只有當前函式才能訪問的物件,還可以將一些私有的資料藏在閉包中
形成閉包的條件:
函式巢狀
將內部函式作為返回值返回
內部函式必須使用到外部函式的變數
deffn(
):deffn2()
: a=
10print
('我是fn2'
,a)return fn2-
--在內部函式將fn2作為返回值返回
r=fn()r(
)
裝飾器的作用:不修改原函式,對函式進行拓展
def
fn(a,b)
: r=a+b
return r
現要求在上面函式執行前列印「開始執行」函式執行後列印「結束執行」
#裝飾器
defstart_end
(old)
:#----用來對其他函式進行擴充套件
#old為要拓展的函式物件
defnew_function
(*args,
**kwargs)
:#---*args,**kwargs裝包
print
('開始執行'
) result=old(
*args,
**kwargs)
#---*args,**kwargs解包
print
('結束執行'
)return result
return new_function
@start_end
deffn
(a,b)
: r=a+b
return r
a=fn(1,
3)print
(a)
python基礎之高階函式(下)
高階函式是滿足下列條件之一的即為高階函式。高階函式的引入 1 1 定義乙個函式,將指定列表中的偶數,儲存到乙個新的列表中。list list range 1 11,1 deffn a new list for i in list if i 2 0 return new list print fn l...
python 基礎 4 3 高階函式下和匿名函式
一 匿名函式 顧名思議就是沒有名字的函式,那為什麼要設立匿名函式,他有什麼作用呢?lambda 函式就是一種快速定義單行的最小函式,可以用在任何需要函式的地方。常規版 def fun x,y return x y lambda 示例 usr bin python coding utf 8 time ...
js基礎函式(下)
儲存對 的熱愛,並儲存懷疑態度 入口 引數 function fn a fn 1 實參 利用陣列的索引和長度配合迴圈,獲取arguments中儲存的實參 應用場景 當函式的實參個數不確定時,可以使用arguments找到所有實參 function fn a 形參 console.log argume...