python 13 內建函式與閉包

2021-09-26 10:31:58 字數 4625 閱讀 1874

abs()

#返回絕對值--返回的是正數

enumerate

("可迭代物件","序號起始值"

)#列舉 預設起始值為0,返回的是元組形式

lst =[11

,22,33

]print

([i for i in

enumerate

(lst,1)

])# (1,11) (2,22) (3,33)

max(

"可迭代物件"

)#求最大值

min(

"可迭代物件"

)#求最小值

sum(

)#求和,字串不可用

dir(

)#檢視當前函式的方法

"""

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=false)

file: 預設是輸出到螢幕,如果設定為檔案控制代碼,輸出到檔案

sep: 列印多個值之間的分隔符,預設為空格

end: 每一次列印的結尾,預設為換行符

flush: 立即把內容輸出到流檔案,不作快取

"""print

(sep=

" ",end=

"\n"

)#預設

print(1

,2,3

,sep=

"*")

# 1*2*3

print

(111

,end="")

print(22

)#111222

print

(list

("alex"))

# ['a', 'l', 'e', 'x']

print

(dict

(a=1

,b=2))

#

zip()

# 拉鍊 -- 按照最少的進行合併,打包成乙個個元組。若是字典,取鍵

lst =

["a"

,"b"

,"c"

]lst1 =[1

,2,3

,4]print

(list

(zip

(lst,lst1)))

# [('a', 1), ('b', 2), ('c', 3)]

print

(zip

(lst,lst1)

)# zip函式的位址

print

(dict

(zip

(lst,lst1)))

#

變數 =

lambda 形參:返回值

"""1.匿名函式定義沒有def,可以賦值給變數,便於呼叫

2.lambda後面直接加形參(形參可不寫,也可接受多個)用逗號隔開

3.必須有返回值,返回乙個資料型別,可以是任意的資料型別,也可以將多個返回值寫成乙個資料型別

4.函式名是lambda,一行函式

"""

print((

lambda x,y:x+y)(2

,3))

#5print

(lambda x,y:x+y(2,

3))#lambda 位址

# 1

ls =

[lambda i:i*i for i in

range(5

)]print

(ls[2]

(5))

#25# 上面函式解開:

ls =

for i in

range(5

):deffunc

(i):

return i*i

print

(ls[2]

(5))

# 2ls =

[lambda

:i*i for i in

range(5

)]print

(ls[2]

())# 沒有傳進去引數,預設最後4*4 = 16

# 解開:

lst =

for i in

range(5

):deffunc()

:return i*i

print

(lst[2]

())# 3

lst =

[x for x in

(lambda

:i**i for i in

range(5

))]print

(lst[2]

())#解開:

lst1 =

deffunc()

:for i in

range(5

):deffoo()

:return i**i

yield foo

for x in func():

print

(lst1[2]

())

# format()

print

(format(13

,"08b"))

# 8位2進製

print

(format(13

,"08d"))

# 10進製

print

(format(13

,"08o"))

# 8進製

print

(format(13

,"08x"))

# 16進製制

# filter(function,iterable) # 篩選過濾

# 例:

lst=[1

,2,3

,4,5

,6,7

]ls =

filter

(lambda x:x>

3,lst)

print

(list

(ls)

)# [4, 5, 6, 7]

#或者:

ls =

[i for

infilter

(lambda x:x>

3,lst)

]print

(ls)

# map(function,iterable)  # 對映,把每個元素取出操作

print

(list

(map

(lambda x:x*x,[1

,2,3

,4])

))# [1, 4, 9, 16]

reversed

("有序的可迭代物件"

)# 反轉

"""產生乙個迭代器,操作時不改變原資料,重新開闢,因此位址不同

字串、列表、元組都可以用

"""ls =

reversed

("123"

)for i in ls:

print

(i)# 3 2 1

sorted

(iterable,key =

"函式名",reverse =

false

)# 預設是公升序, key是排序規則,reverse預設是公升序

# reverse = true 是降序

ls =[1

,5,6

,98,6

,7,3

]print

(sorted

(ls)

)#[1, 3, 5, 6, 6, 7, 98]

print

(sorted

(ls,reverse=

true))

#[98, 7, 6, 6, 5, 3, 1]

ls =[,

]print

(sorted

(ls,key=

lambda x:x[

"age"])

)

reduce()

#累計算

from functools import

reduce

print

(reduce

(lambda x,y:x-y,[1

,2,3

,4,5

]))# -13

在巢狀函式內,使用非全域性變數就是閉包

保證資料的安全性,裝飾器使用

print

(ret.__code__.co_freevars)

# 獲取的是自由變數,不會自動銷毀

ret.__closure__ 判斷是否是閉包

def

func()

: a =

1deff1(

):deffoo()

:print

(a)return foo

return f1

func()(

)()# ret = func()

# a = ret()

# a()

Python 13 模組和包

在電腦程式的開發過程中,隨著程式 越寫越多,在乙個檔案裡 就會越來越長,越來越不容易維護。為了編寫可維護的 我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式。在python中,乙個.py檔案就稱之為乙個模組 module 使用模組有什麼好...

python13 引數 變數 拆包

在這一章中,我們會涉及另一種輸入引數的方法。我們可以把變數傳給指令碼 scrip ps python是一種指令碼語言,所以,指令碼是 py檔案的另一種說法。看下示例先ex13.py from sys import argv script,first,second,third argv print t...

python 13 函式 物件導向

函式 允許遞迴 函式的定義分類 內建函式 標準庫函式 庫函式使用者自定義函式函式的定義和呼叫 使用def語句定義函式 def 函式名 引數列表 函式體 語句 形參之間用逗號做間隔 有沒有返回值的函式看函式有沒有return語句 練習,n階調和數 def myadd n sum 0.0 for i i...