python多次判断_python - 怎么判断函数或方法多次使用是否需要定义临时变量?

问 题

自学一直有一个困扰(因为教程里不太会提及这种问题)

比如一些简单的函数或方法,如 len()、isdigit()

多次使用的情况下

string = 'something'

if len(string) == 1:

pass

elif len(string) == 2:

pass

是否需要定义一个临时的变量

string = 'something'

length = len(string)

if len(length) == 1:

pass

elif len(length) == 2:

pass

这样变量多了一个,但是函数少计算一次

哪一种益处更大呢?

-是所有此类情况都用临时变量呢?

-还是具体函数具体分析,简单的不需要临时变量?

从资源合理利用的角度,怎么权衡这两种方案

解决方案

先講結論:

對於這個問題的情境,我支持不另外定義新的變數

我先簡單從兩個方面回答你的問題

首先,當效率不是當前程式的關鍵核心時,以追求 可讀性 為最高原則

怎麼說呢?

有些程式和代碼處理的問題本身就不是追求速度的議題,比如說簡單的寄帳程式跟科學計算比起來,特意追求執行速度的最佳化不是很有意義,就算是追求效率的程式,也不見得你現在 focus 的代碼就是影響效率的關鍵處(需要作 profiling 才能真正確定,過早最佳化不是很好)。重點是,若非出現效能問題且你已經確定是該代碼段造成,否則完全不用作資源或效能上的過度考慮,尤其現在機器的空間和運算速度那麼進步的狀況下,一些函數呼叫根本不算什麼,否則 oop 和一些抽象化的技巧早就不能用了。

所以追求可讀性是一般情況下比較好的目標,當然這部分就很看狀況了,比方說 Refactoring 這本書裡面就有提到 Replace Temp with Query 的手法,因為區域變數可能會使代碼難以被提煉( extract )。但其實也不盡然,有時候過長的 Query 式也會讓代碼難以閱讀,總之這部份可以有這部分的考量跟權宜。

第二個部分可以來分析一下效率,以 len 而言,我會選擇不另外定義一個變數,因為 Python 對於其內建的資料結構,len 函數是會直接從對應的 C-Object 中回傳資料的長度屬性,所以這部分是非常快的,我的意思是,Python 對於自己內建的資料,本身就保存著長度的資訊,使用 len 不會造成額外的計算或是層疊的調用,所以完全不必考慮效率問題。

而且 len 的閱讀性很高,函數長度也很短,定義一個新的變數不是很必要。

P.S. 若我的理解有誤,請不吝指正,謝謝

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值