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

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

是否顯式調(diào)用return函數(shù)

是否顯式調(diào)用return函數(shù)

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

3 回答

?
繁花不似錦

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個贊

如果每個人都同意


return 在函數(shù)主體的末尾不需要

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

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


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


保羅使用以下示例:


foo = function() {

 if(a) {

   return(a)

 } else {

   return(b)

 }

}

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


foo = function() {

 if(a) {

   output <- a

 } else {

   output <- b

 }

output

}

后一種版本甚至符合一些編程編碼標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)倡導(dǎo)每個函數(shù)一個返回語句。我認(rèn)為一個更好的例子可能是:


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和復(fù)雜的布爾變量系統(tǒng)來傳播它們。所有這一切都說明單一返回規(guī)則不能很好地與R配合使用。因此,如果您需要return在函數(shù)主體的某些位置使用它,為什么不保持一致并在各處使用它呢?


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


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

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超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

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


我繼續(xù)進(jìn)行其他基準(zhǔn)測試(benchmark(fuu(x),foo(x),replications=1e7)),結(jié)果相反...我將在服務(wù)器上嘗試。


查看完整回答
反對 回復(fù) 2019-11-23
  • 3 回答
  • 0 關(guān)注
  • 742 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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