慎用for迴圈

2021-08-30 00:16:42 字數 1323 閱讀 4759

1.for迴圈會在迴圈以外的scope建立乙個區域性變數,看下面**:

for i in [1,2,3] do

p iend #123

p i#3

這和each是有區別的,each只是會改變scope外面已存在的區域性變數:

[1,2,3].each do |i|

print i

endp i#undefined local variable or method `i' for main:object (nameerror)

i=5

[1,2,3].each do |i|

print i

endp i#1233

2.在和proc結合的時候for迴圈會出現陷阱:

procs = 

for n in [1, 2, 3] do

procs << proc.new "}

end[1,2,3].each do |m|

procs << proc.new "}

endprocs.each

#結果:

#3#3

#3#1

#2#3

很顯然for的結果出乎我們意料之外。

3.for是用each實現的,並且會在each的scope外建立臨時變數。

a=[1,2,3]

def a.each

puts "call each!"

endfor i in a

puts i

end#結果:

#call each!

4.for迴圈的速度比each快一點點:

require 'benchmark'

include benchmark

n = 500000

array=(1..n).to_a

tmp=nil

benchmark.benchmark(" "*7 + caption, 7, fmtstr) do |x|

tf = x.report("for:")

tt = x.report("each:")

end#結果:

user system total real

for: 0.172000 0.000000 0.172000 ( 0.172000)

each: 0.234000 0.000000 0.234000 ( 0.234000)

python學習之 迴圈裡面慎用copy類

最近在維護公司erp的發貨模組,裡面有乙個這樣的問題 客戶訂單裡面買個3個產品,每個產品10個,但是一次掃瞄的時候有可能只掃瞄其中兩個產品,每個產品數量不到10個,所以要求在銷貨的時候不能把所有的庫存都釋放掉,由於之前的程式設計師在寫這個地方的時候沒有考慮這麼清楚,所以客戶購買10個,即使只掃瞄了1...

慎用url重寫

為了使 url位址更加友好 當然可能有別的原因 很多站點使用了 url重寫,如http www.cnblogs.com life,在asp.net中通常要處理這樣的 url重寫,必須在iis中將 對映到aspnet isapi.dll c windows microsoft.net framewor...

慎用url重寫

為了使url位址更加友好 當然可能有別的原因 很多站點使用了url重寫,如 http www.cnblogs.com life,在asp.net中通常要處理這樣的url重寫,必須在iis中將 對映到aspnet isapi.dll c windows microsoft.net framework ...