python之閉包函式及匿名函式和三元運算

2022-04-10 20:21:58 字數 2225 閱讀 6185

# 互相巢狀的函式,如果內函式使用了外函式的區域性變數,並且外函式把內函式返回出來的過程,叫做閉包;裡面的內函式就是閉包函式。

​# 基本語法

def func():

name = "bajie"

def inner():

print(name)

return inner

res = func()

res()

# 複雜版本

def func():

money = 1000

​ def outer():

nonlocal money

money -= 300

print(money)

def inner():

nonlocal money

money -= 500

print(money)

def going():

return (outer,inner)

return going

​# 第一次執行函式

going_func = func()

res = going_func() # 拿到going_func的返回值 (outer,inner)

res[0]() # 執行outer money == 700

res[1]() # 執行inner money == 200

res[0]() # 再次執行outer money == -100

res[1]() # 再次執行inner money == -600​​

# 第二次執行函式( 函式名().__closure__ , cell_contents )

# 獲取閉包函式的使用變數

res1 = func().__closure__ # 如果是閉包,拿到 閉包函式 going 的返回值

# 用來獲取單元格物件當中的閉包函式

res1[0].cell_contents() # money == 500

# 內函式使用了外函式的區域性變數,該變數與閉包函式發生繫結,延長了該變數的生命週期

# 閉包的意義:閉包可以優先使用外函式中的變數,並對閉包中的值起到了封裝保護的作用.外部無法訪問

# 示例一

def func():

num = 0

def inner():

nonlocal num

num += 1

return print(num)

return [inner(),inner(),inner(),inner()]

​res = func()

​# 示例二

def func():

num = 0

def inner():

nonlocal num

num += 1

return print(num)

return inner

​res = func()

res()

res()

res()

res()

# 格式 ---> 真值 if 條件 else 假值

# 示例一

num = 10

if num > 0 :

print("true")

else:

print("false")

# 三元運算表示式

num = 10

print("true" if num > 0 else "false" )

# 格式 ---> lambda 引數 : 返回值

# 示例一

def func(n):

return type(n)

print(func(10))

​# lambda 表示式

print(lambda n : type(n))

# 示例一

def func(n):

if n % 2 == 0:

return "偶數"

else:

return "奇數"

示例二

print(lambda n : "偶數" if n % 2 == 0 else "奇數")

python匿名函式和閉包函式

一 匿名函式 在定義函式的時候,不想給函式起乙個名字。這個時候就可以用lambda來定義乙個匿名函式。語法 變數名 lambda 引數 表示式 引數 可選,通常以逗號分隔 表示式 不能包含迴圈 return,但是可以包含if.else.返回值就是該表示式的結果。如 建立乙個帶引數的匿名函式 add ...

javascipt之匿名函式和閉包

匿名函式的幾種形式 function function box 表示執行函式,並且傳參 var box function alert box 呼叫方式和函式呼叫相似 function box alert box 呼叫匿名函式當在乙個函式中定義另乙個函式時,就會產生閉包。內層函式和外層函式所包含的區域...

Go The Way 之 匿名函式和閉包

package main import fmt 匿名函式和閉包函式 func main 要說閉包,首先需要說匿名函式。匿名函式顧名思義就是把函式名稱給隱藏了 不要了,只有函式的關鍵字,引數列表 返回值列表和實現 func nimingtest a,b int int return sum a,b 簡...