我一直是不喜歡在不必要的時候自定義函式的:
deff(
):""f(
)165 ns ± 5.78 ns
""10.5 ns ± 1.04 ns
直到遇到了ta
%
%timeit
import random
defchange
(index)
:while index<=maxi:
if(i1:
=list2[index]
)>
(i2:
=list2[index+1]
):list2[index]
,list2[index+1]
=i2,i1
index+=
1else
:return
list1=
[chr
(i)for i in
range
(ord
('a'),
ord(
'z')+1
)]list2=
list
(set
(list1)
)maxi=site=
len(list2)-2
while site>-1
: index=site
change(index)
site-=
1
42.4 µs
這裡用return代替break,有3 µs的穩步提公升,否則,def和常規寫效率差不多。
這個函式是我從巢狀迴圈的常規語句提取出來的,額,再來
%
%timeit
import random
defsort
(site)
:while site>-1
: index=site
while index<=maxi:
if(i1:
=list2[index]
)>
(i2:
=list2[index+1]
):list2[index]
,list2[index+1]
=i2,i1
index+=
1else
:break
site-=
1list1=
[chr
(i)for i in
range
(ord
('a'),
ord(
'z')+1
)]list2=
list
(set
(list1)
)maxi=site=
len(list2)-2
sort(site)
list2
38.9 µs 再次打臉
我錯了,我本想說,如果把迴圈甚至巢狀迴圈寫成乙個def,而用return提到break是件很爽的事情。
但上面修改的完整的排序功能,不能用return替代break了,還是跑了下,哇,效率進一步提公升。
這裡我推測,原因在於def的運算空間,運算進入def後,他就相當於進入乙個小黑我,與外界有關的只有那些變數,只需要專心做好他負責的內容,不用再向前驗證什麼的樣子,所以,piupiu的完成了。
sort(maxi,site,list2)
44.7 µs
於是引數還是傳遞的越少,效率越高些。
R自定義函式
說明 代表注釋,代表執行結果。函式最大的優點是 復用,模組化設計。也就是說如果這一段 塊需要在多處使用,就應將其寫成乙個函式,多次呼叫,有效的規避了 的重複。並且在修改時只需要修改函式即可。在定義函式時,個人建議將一小段 封裝成乙個函式,使得 可讀性更高,並且能夠降低程式的複雜性。函式名 乙個自定義...
R語言 編寫自定義函式
r語言實際上是函式的集合,使用者可以使用base,stats等包中的基本函式,也可以編寫自定義函式完成一定的功能 乙個函式的結構大致如下所示 myfunction function arglist 其中,myfunction為函式名稱,arglist為函式中的引數列表,大括號 內的語句為函式體,函式...
Python自定義函式
可選引數是python的乙個特性,顧名思義就是這個引數是可有可沒有的。如果你學過其他的語言,那麼你會很清楚明白他的不同點的。def fun n,m 1 s 1for i in range 1 n 1 s i return s m m就是可選引數,如果在呼叫他的時候不給m就預設為1 eg1 fun 1...