亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

是否顯式調用return函數

是否顯式調用return函數

HUWWW 2019-11-23 13:16:22
前陣子我被指責西蒙Urbanek從R核心團隊(我相信)為用戶推薦到顯式調用return的函數結束時(他的評論被刪除雖然):foo = function() {  return(value)}相反,他建議:foo = function() {  value}可能在這種情況下是必需的:foo = function() { if(a) {   return(a) } else {   return(b) }}他的評論闡明了為什么return除非嚴格需要,否則不打電話是一件好事,但是已刪除。我的問題是:為什么不打電話return更快或更好,因此更可???
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

如果每個人都同意


return 在函數主體的末尾不需要

不使用return的速度稍微快一些(根據@Alan的測試,相對于5.1秒為4.3微秒)

我們都應該return在函數結尾處停止使用嗎?我當然不會,我想解釋原因。我希望聽到其他人是否也同意我的看法。如果這不是對OP的直接答案,而是更長時間的主觀評論,我深表歉意。


我不使用的主要問題return是,正如Paul指出的那樣,函數主體中可能還有其他地方需要使用它。而且,如果您被迫return在函數中間使用某個地方,為什么不使所有return語句都明確?我討厭前后矛盾。我也認為代碼讀起來更好;可以掃描功能并輕松查看所有出口點和值。


保羅使用以下示例:


foo = function() {

 if(a) {

   return(a)

 } else {

   return(b)

 }

}

不幸的是,可能有人指出它可以很容易地重寫為:


foo = function() {

 if(a) {

   output <- a

 } else {

   output <- b

 }

output

}

后一種版本甚至符合一些編程編碼標準,這些標準倡導每個函數一個返回語句。我認為一個更好的例子可能是:


bar <- function() {

   while (a) {

      do_stuff

      for (b) {

         do_stuff

         if (c) return(1)

         for (d) {

            do_stuff

            if (e) return(2)

         }

      }

   }

   return(3)

}

使用單個return語句重寫起來會更加困難:它將需要多個breaks和復雜的布爾變量系統來傳播它們。所有這一切都說明單一返回規則不能很好地與R配合使用。因此,如果您需要return在函數主體的某些位置使用它,為什么不保持一致并在各處使用它呢?


我認為速度參數是無效的。當您開始查看實際上可以執行某些功能的函數時,0.8微秒的差異并不算什么。我能看到的最后一件事是輸入更少,但是,我并不懶惰。


查看完整回答
反對 回復 2019-11-23
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

似乎沒有return()它會更快...


library(rbenchmark)

x <- 1

foo <- function(value) {

  return(value)

}

fuu <- function(value) {

  value

}

benchmark(foo(x),fuu(x),replications=1e7)

    test replications elapsed relative user.self sys.self user.child sys.child

1 foo(x)     10000000   51.36 1.185322     51.11     0.11          0         0

2 fuu(x)     10000000   43.33 1.000000     42.97     0.05          0         0

____ 編輯__ _ __ _ __ _ __ __ _ __ _ ___


我繼續進行其他基準測試(benchmark(fuu(x),foo(x),replications=1e7)),結果相反...我將在服務器上嘗試。


查看完整回答
反對 回復 2019-11-23
  • 3 回答
  • 0 關注
  • 744 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號