一、python 的四個作用域:名稱
描述l區域性作用域
e外部巢狀函式作用域
g全域性作用域
b內建作用域
二、lambda 表示式(又名匿名函式表示式)
作用:
建立乙個匿名函式物件
同def類似,但不提供函式名
語法:
lambda [形參1, 形參2, ...] : 表示式
語法說明
1. lambda 只是乙個表示式,它用來建立乙個函式物件
2. 當lambda表示式呼叫時,先執行冒號後的表示式,並返回表示式的結果的引用
3. lambda 表示式建立的函式只能包含一條表示式
4. lambda比函式簡單,且可以隨時建立和銷毀,有利於減少程式的偶合度
三、eval 和 exec 函式
3.1 eval函式:
作用:
把乙個字串當成乙個表示式執行,返回表示式執行後的結果
格式:
eval(source(string), globals=none, locals=none)
print(eval("x+y", )) # 30
print(eval("x+y", , )) # 3
print(eval("x+y", , )) # 21
先查詢區域性變數,沒有區域性變數則向上一級找全部變數
3.2 exec函式:
作用:
把乙個字串當成程式來執行
格式:
exec(source(string), globals=none, local=none)
示例:
s = 'x=100; print("hello"); x += 1; print(x)'
print(s)
exec(s)
四、高階函式 high order function
什麼是高階函式:
滿足下列條件中的乙個的函式即為高階函式
1. 函式接受乙個或多個函式作為引數傳入
2. 函式返回乙個函式
python內建(builtins)的高階函式:
map, filter, sorted
4.1 map 函式:
map(func, *iterables)用函式對可迭代物件中的每乙個元素作為引數計算出新的可迭代物件,當最短的乙個可迭代物件不再提供資料時,此可迭代物件生成結束
note:iterables前面有 *, 可以由多個可迭代引數物件
示例:
# 生成乙個可迭代物件, 要求此可迭代物件生成
# 1**4, 2**3, 3**2, 4**1
# 1 8 9 4
for x in map(pow, [1,2,3,4], [4,3,2,1]):
print(x)
# 求 1**9 + 2**8 + 3**7 + ... 9**1的和
print(sum(map(pow, range(1, 10), range(9, 0, -1))))
# *iterables: range(1, 10), range(9, 0, -1)
4.2 filter函式
格式:
filter(func, iterable)(note: iterable前面沒有*, 表示只能有1個引數)
作用:
篩選可迭代物件iterable中的資料,返回乙個可迭代物件,此可迭代物件將對iterable進行篩選
函式func 將對iterable中的每個元素進行求值,返回false時將此資料丟棄,返回true,則保留此資料
l = [x for x in filter(lambda x:x%2==0, range(10))]
print(l)
# 不能少
tarena@tedu
:~/myy
$ python3 isodd.py
[0, 2, 4, 6, 8]
4.3 sorted 函式:
作用:
將原可迭代物件的資料進行排序,生成排序後的列表
格式:
sorted(iterable, key=none, reverse=false)
引數說明:
引數描述
iterable
可迭代物件
key繫結函式,此函式用來提供乙個排序的依據
reverse
標誌用來設定是否降序排序(從大到小), 預設是公升序
input1:
names = ['lyusdnik', 'spike', 'ann', 'tykel']
name_sort = sorted(names, key=len, reverse=false)
print(name_sort)
output1:
['ann', 'spike', 'tykel', 'lyusdnik']
input2:
l = [5, -2, 3, -8, 1, 4]
print(sorted(l))
print(sorted(l, key=abs, reverse=false))
output2:
[-8, -2, 1, 3, 4, 5]
[1, -2, 3, 4, 5, -8]
input3:
defrev
(s):
return s[::-1] # 逆序
name_rev = sorted(names, key=rev) # key 排序的依據
print(name_rev)
output3:
['spike', 'lyusdnik', 'tykel', 'ann']
五、遞迴函式
遞迴說明:
遞迴一定要控制遞迴的層數,當符合某一條件時要終止遞迴
幾乎所有的遞迴都能用迴圈來代替
遞迴的優缺點:
優點:
遞迴可以把問題簡單化,讓路徑更為清晰,**更為簡潔
缺點:遞迴因系統環境影響大,當遞迴深度太大時,可以會得到不可預知的結果
遞迴實現的方法:先假設函式已經實現def
myfac
(x):
if x == 1: # 設定終止迭代條件
return
1return x * myfac(x - 1)
print(myfac(5))
# 遞迴實現斐波那契數列
deffab
(n):
# 遞迴呼叫必須有乙個出口即返回值
if n == 0
or n == 1:
return
1# 遞迴:函式的自身呼叫,變數必須有變化
return fab(n-1) +fab(n-2)
print(fab(10))
Python基礎語法2 函式
1.定義 def 函式名 引數1,引數2,引數n 函式體return 語句 例如 def greet name print name 早上好 2.呼叫 例如 greet 貝貝 4.return 可以返回多個值,對映資料型別元素 tuple def love name1,name2 face name...
Python入門基礎 函式(2)
函式也是一種型別,我們自定義的函式就是函式物件,函式名儲存了函式物件的引用 位址 def test print 我是測試函式 print test 函式名是變數,指向了函式物件 pf test pf變數也指向了函式物件,所以也可以通過pf呼叫test函式 pf 裝逼利器 不再使用def 函式名 這種...
python基礎 內建函式(2)
1 type 函式,用來檢視物件的資料型別 1.1 不要用保留字 內建函式 作為變數名稱,如果打錯,可以用del type刪除,會清除 2 id 關鍵字,用來檢視物件的記憶體位址 2.1 a is b 判斷是否為指向同乙個位址 2.2 a b是指是否為同乙個值 2.3 在0 256整數,賦值給不同的...