最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中的匿名函數(shù)及編寫無參數(shù)decorator詳解

 更新時間:2023年12月26日 09:08:20   作者:wrr-cat  
這篇文章主要介紹了python中的匿名函數(shù)及編寫無參數(shù)decorator詳解,高階函數(shù)可以接收函數(shù)做參數(shù),有些時候,我們不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便,需要的朋友可以參考下

一、前言

高階函數(shù)可以接收函數(shù)做參數(shù),有些時候,我們不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便。

在Python中,對匿名函數(shù)提供了有限支持。還是以map()函數(shù)為例,計(jì)算 f(x)=x2 時,除了定義一個 f(x)的函數(shù)外,還可以直接傳入匿名函數(shù):

>>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]

通過對比可以看出,匿名函數(shù) lambda x: x * x 實(shí)際上就是:

def f(x):
    return x * x

關(guān)鍵字lambda 表示匿名函數(shù),冒號前面的 x 表示函數(shù)參數(shù)。

匿名函數(shù)有個限制,就是只能有一個表達(dá)式,不寫return,返回值就是該表達(dá)式的結(jié)果。

使用匿名函數(shù),可以不必定義函數(shù)名,直接創(chuàng)建一個函數(shù)對象,很多時候可以簡化代碼:

>>> sorted([1, 3, 9, 5, 0], lambda x,y: -cmp(x,y))
[9, 5, 3, 1, 0]

返回函數(shù)的時候,也可以返回匿名函數(shù):

>>> myabs = lambda x: -x if x < 0 else x 
>>> myabs(-1)
1
>>> myabs(1)
1

二、舉例

利用匿名函數(shù)簡化以下代碼:

def is_not_empty(s):
    return s and len(s.strip()) > 0
filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])

定義匿名函數(shù)時,沒有return關(guān)鍵字,且表達(dá)式的值就是函數(shù)返回值。參考代碼:

print filter(lambda s: s and len(s.strip())>0, ['test', None, '', 'str', '  ', 'END'])

三、python 編寫無參數(shù) decorator

Python的 decorator 本質(zhì)上就是一個高階函數(shù),它接收一個函數(shù)作為參數(shù),然后,返回一個新函數(shù)。

使用 decorator 用Python提供的 @ 語法,這樣可以避免手動編寫 f = decorate(f) 這樣的代碼。

考察一個@log的定義:

def log(f):
    def fn(x):
        print 'call ' + f.__name__ + '()...'
        return f(x)
    return fn

對于階乘函數(shù),@log工作得很好:

@log
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)

結(jié)果:

call factorial()...3628800

但是,對于參數(shù)不是一個的函數(shù),調(diào)用將報錯:

@log
def add(x, y):
    return x + y
print add(1, 2)

結(jié)果:

Traceback (most recent call last): File "test.py", line 15, in <module> print add(1,2) TypeError: fn() takes exactly 1 argument (2 given)

因?yàn)?add() 函數(shù)需要傳入兩個參數(shù),但是 @log 寫死了只含一個參數(shù)的返回函數(shù)。

要讓 @log 自適應(yīng)任何參數(shù)定義的函數(shù),可以利用Python的 *args 和 **kw,保證任意個數(shù)的參數(shù)總是能正常調(diào)用:

def log(f):
    def fn(*args, **kw):
        print 'call ' + f.__name__ + '()...'
        return f(*args, **kw)
    return fn

現(xiàn)在,對于任意函數(shù),@log 都能正常工作。

四、舉例

請編寫一個@performance,它可以打印出函數(shù)調(diào)用的時間。

計(jì)算函數(shù)調(diào)用的時間可以記錄調(diào)用前后的當(dāng)前時間戳,然后計(jì)算兩個時間戳的差。參考代碼:

import time
def performance(f):
    def fn(*args, **kw):
        t1 = time.time()
        r = f(*args, **kw)
        t2 = time.time()
        print 'call %s() in %fs' % (f.__name__, (t2 - t1))
        return r
    return fn
@performance
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)

到此這篇關(guān)于python中的匿名函數(shù)及編寫無參數(shù)decorator詳解的文章就介紹到這了,更多相關(guān)python匿名函數(shù)及無參數(shù)decorator內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python開發(fā)的桌面級文件備份工具

    基于Python開發(fā)的桌面級文件備份工具

    在數(shù)字化時代,數(shù)據(jù)備份已成為個人和企業(yè)數(shù)據(jù)管理的重要環(huán)節(jié),本文將詳細(xì)介紹如何使用Python開發(fā)一款功能全面的桌面級文件備份工具,該工具不僅支持即時備份,還能實(shí)現(xiàn)定時自動備份、增量備份等專業(yè)功能,需要的朋友可以參考下
    2026-01-01
  • Flask框架里面sse的使用示例

    Flask框架里面sse的使用示例

    本文主要介紹了Flask框架里面sse的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • opencv3/C++實(shí)現(xiàn)視頻讀取、視頻寫入

    opencv3/C++實(shí)現(xiàn)視頻讀取、視頻寫入

    今天小編就為大家分享一篇opencv3/C++實(shí)現(xiàn)視頻讀取、視頻寫入,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python如何讀取、寫入CSV數(shù)據(jù)

    Python如何讀取、寫入CSV數(shù)據(jù)

    這篇文章主要介紹了Python如何讀寫CSV數(shù)據(jù),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • PyCharm 中安裝并使用 Codex的實(shí)戰(zhàn)指南

    PyCharm 中安裝并使用 Codex的實(shí)戰(zhàn)指南

    本文介紹了在PyCharm中安裝和配置CodexAgent的詳細(xì)步驟,包括安裝前準(zhǔn)備、推薦安裝流程、遇到地區(qū)報錯時的處理方法、安裝完成后的驗(yàn)證與模型選擇,以及常見問題與排查清單
    2026-05-05
  • 基于Python設(shè)計(jì)實(shí)現(xiàn)一個高級IP掃描工具

    基于Python設(shè)計(jì)實(shí)現(xiàn)一個高級IP掃描工具

    在網(wǎng)絡(luò)運(yùn)維和安全審計(jì)工作中,IP掃描是基礎(chǔ)但至關(guān)重要的任務(wù),本文介紹一款基于Python開發(fā)的跨平臺IP掃描工具,它結(jié)合了簡潔的GUI界面和高效的掃描引擎,能夠快速檢測主機(jī)可達(dá)性
    2025-06-06
  • numpy:np.newaxis 實(shí)現(xiàn)將行向量轉(zhuǎn)換成列向量

    numpy:np.newaxis 實(shí)現(xiàn)將行向量轉(zhuǎn)換成列向量

    今天小編就為大家分享一篇numpy:np.newaxis 實(shí)現(xiàn)將行向量轉(zhuǎn)換成列向量,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • pycharm創(chuàng)建一個python包方法圖解

    pycharm創(chuàng)建一個python包方法圖解

    在本篇文章中小編給大家分享了關(guān)于pycharm怎么創(chuàng)建一個python包的相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-04-04
  • Python Tkinter GUI編程入門介紹

    Python Tkinter GUI編程入門介紹

    這篇文章主要介紹了Python Tkinter GUI編程入門介紹,本文講解了Tkinter介紹、Tkinter的使用、Tkinter的幾何管理器等內(nèi)容,并給出了一個完整示例,需要的朋友可以參考下
    2015-03-03
  • Python的動態(tài)重新封裝的教程

    Python的動態(tài)重新封裝的教程

    這篇文章主要介紹了Python的動態(tài)重新封裝的教程,本文來自于IBM的官方開發(fā)者文檔,需要的朋友可以參考下
    2015-04-04

最新評論

丰宁| 彭山县| 古丈县| 汽车| 涡阳县| 梧州市| 团风县| 焉耆| 城步| 丽水市| 蒙山县| 许昌县| 龙泉市| 凉山| 五莲县| 怀集县| 镇巴县| 新密市| 五常市| 平阴县| 望都县| 新蔡县| 抚宁县| 津市市| 颍上县| 乐清市| 思茅市| 呼伦贝尔市| 白玉县| 安远县| 北碚区| 南康市| 西畴县| 芷江| 义马市| 鄢陵县| 百色市| 平谷区| 富锦市| 寿光市| 灌阳县|