第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

純函數(shù)優(yōu)化

純函數(shù)優(yōu)化

慕勒3428872 2022-10-18 17:40:47
純函數(shù)是一個函數(shù),它的返回值對于相同的參數(shù)是相同的,并且沒有任何副作用。CPython 是否認識到返回值將是相同的并且只調(diào)用一次函數(shù)進行優(yōu)化?如果沒有,其他python解釋器會這樣做嗎?下面我使用 編寫了一個示例os.path.join,假設(shè)它是一個純函數(shù)(我實際上并不知道它的實現(xiàn)),但問題擴展到所有純函數(shù)。dirpath = "C:\\Users"dirname = "Username"mylist = [["another\\directory", 6], ["C:\\Users\\Username", 8], ["foo\\bar", 3]]count = 0for pair in mylist:    if os.path.join(dirpath, dirname) == pair[0]:        count = pair[1]dirpath并且dirname不會在 for 循環(huán)內(nèi)進行修改。給定相同的輸入,os.path.join總是有相同的返回值。
查看完整描述

2 回答

?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

標準的 python 實現(xiàn)幾乎沒有對用戶代碼進行優(yōu)化。

但是,您可以在純函數(shù)上使用lru 緩存裝飾器來獲得您想要的功能。

from functools import lru_cache


def fib(n):

    """

    Calculate the n'th fibanaci number

    With O(N^2) <quadratic> runtime

    """

    if n < 2: return n

    return fib(n-1) + fib(n-2)


@lru_cache

def fib2(n):

    """

    Calculate the n'th fibanaci number

    With O(N) <linear> runtime

    """

    if n < 2: return n

    return fib2(n-1) + fib2(n-2)


查看完整回答
反對 回復 2022-10-18
?
尚方寶劍之說

TA貢獻1788條經(jīng)驗 獲得超4個贊

嚴格來說,Python 沒有純函數(shù)。隨時修改函數(shù)的含義是明確的。


>>> def add(a, b): return a + b

>>> def sub(a, b): return a - b

>>> add(10, 5)

15

>>> add.__code__ = sub.__code__

>>> add(10, 5)

5

此外,可以更改函數(shù)訪問的builtins,和 閉包。globals


參考實現(xiàn) CPython 沒有基于函數(shù)的純度進行優(yōu)化。


PyPy 的實現(xiàn)使用能夠進行純優(yōu)化的跟蹤 JIT 。請注意,這適用于低級操作(不一定是整個函數(shù)),并且僅適用于常用代碼。


查看完整回答
反對 回復 2022-10-18
  • 2 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號