日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

函数小知识点(文档字符串,闭包等)

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数小知识点(文档字符串,闭包等) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 文檔字符串(Documentation Strings)

一般被稱為docstring,一款你應當使用的重要工具,它能夠幫助你更好地記錄程序并讓其更加易于理解。令人驚嘆的是,當程序實際運行時,我們甚至可以通過一個函數來獲取文檔! Python 的??help()??函數,它所做的便是獲取函數的??__doc__??屬性并以一種整潔的方式將其呈現給你。
def print_max(x, y):'''Prints the maximum of two numbers.打印兩個數值中的最大數。The two values must be integers.這兩個數都應該是整數'''     #該函數的文檔字符串# 如果可能,將其轉換至整數類型x = int(x)  y = int(y)if x > y:print(x, 'is maximum')else:print(y, 'is maximum')print_max(3, 5)
print(print_max.__doc__)    #通過使用函數的  __doc__  屬性(屬于函數的名稱)來獲取函數  print_max  的文檔字符串屬性。只消記住                                                                                                            Python 將所有東西都視為一個對象,這其中自然包括函數。---5 is maximum
---Prints the maximum of two numbers.打印兩個數值中的最大數。---The two values must be integers.這兩個數都應該是整數

2 函數名的使用方法

(這玩意兒其實就是一個內存地址,可以當作變量來使用)

2.1 可以被當做值或變量引用

def func():print(111)print(func)         # <function func at 0x00000218A911AB70> --函數在內存中的地址
f = func             # 將其傳給變量f
print(f)                 # <function func at 0x00000279A5A6AB70>
f()                        # 111

?2.2?函數可以被當做容器類型的元素存儲?

# 將其當做容器存儲在列表中
def func1():print('func1')def func2():print('func2')def func3():print('func3')lis = [func1, func2, func3]
lis[0]()        # func1
lis[1]()       # func2
lis[2]()       # func3

2.3?可以當做函數的參數和返回值

#當做參數和返回值
def func1():print('func1')def func(argv):argv()return argv  # func1作為返回值
f = func(func1)  # func1作為參數
f()
# 輸出
func1
func1

3 閉包

閉包:?

  在一個外函數中定義了一個內函數,內函數里運用了外函數的臨時變量,并且外函數的返回值是內函數的引用。這樣就構成了一個閉包。

內層函數,對外層函數(非全局)的變量的引用
# 閉包函數的基本用法
def func():name = 'eva'def inner():print(name)return innerf = func()       #這里不好理解,改用fun()()應該好接受一點,調用函數里面的內嵌函數
f()              # eva

閉包函數的意義及應用領域:

  ?閉包的意義:返回的函數對象,不僅僅是一個函數對象,在該函數外還包裹了一層作用域,這使得,該函數無論在何處調用,優先使用自己外層包裹的作用域

  應用領域:延遲計算(原來我們是傳參,現在我們是包起來)

用法:

def multipliers():return [lambda x : i*x for i in range(4)]print [m(2) for m in multipliers()] output:
# [6, 6, 6, 6]

如何輸出[0,2,4,6]呢?

def multipliers():# 添加了一個默認參數i=ireturn [lambda x, i=i: i*x for i in range(4)]print [m(2) for m in multipliers()] output:
# [0, 2, 4, 6]

?這里的multipliers就是一個閉包函數。Python的延遲綁定其實就是只有當運行嵌套函數的時候,才會引用外部變量i,不運行的時候,并不是會去找i的值,這個就是第一個函數,為什么輸出的結果是[6,6,6,6]的原因。

閉包在開發中的實際作用:

  幫助開發者維護一個“私密”空間,用于為以后執行提供數據。

def f1(a1,a2):def inner():ret = a1 + a3 return ret return innern1 = f1('安安','張三') # 內存 a1=安安,a2=張三
n2 = f1('馬哥','小鮮肉') # 內存 a1=馬哥,a2=小鮮肉
n3 = f1('渣渣輝','小李子') # 內存 a1=渣渣輝,a2=小李子
n1()      

3.1 檢測閉包函數的公共屬性:__closure__

# 閉包函數
# 輸出結果如果有 cell 就是閉包函數
def wrapper():name = '是閉包'def inner():print(name)  # 是閉包
inner()print(inner.__closure__)        # (<cell at 0x000001945CE07588: str object at 0x000001945CE06B70>,)
wrapper()# 非閉包函數
# 輸出結果如果是 None 就不是閉包函數
name = '不是閉包'
def wrapper():def inner():print(name)  # 不是閉包
inner()print(inner.__closure__)  # None
wrapper()

3.2 帶有參數的閉包函數

#帶有參數的閉包函數
def wrapper(a):     #a是外部傳入的參數b = 10def inner():#在內函數inner中 用到了外函數的臨時變量bprint(a + b)        #20inner()    #對inner函數進行調用,這步必不可少

wrapper(10)

轉載于:https://www.cnblogs.com/LearningOnline/p/8457453.html

總結

以上是生活随笔為你收集整理的函数小知识点(文档字符串,闭包等)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。