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 ...