g for range的乙個坑

2021-10-03 04:59:53 字數 1113 閱讀 1885

之前在逛部落格時,看到了這個問題,在for range 時,取切片的乙個問題,開始沒有仔細想,後來有同時在這裡出了乙個bug,這才搜了一下這個問題。

可看下面的test:

func testarray(t *testing.t) 

mymap := make(map[int]*int)

for index, value := range slice2

for key, val := range mymap

}

輸出如下所示:

erro[0004] index 0 value 0,prt 0xc000eee978             

erro[0004] index 1 value 1,prt 0xc000eee978

erro[0004] index 2 value 2,prt 0xc000eee978

erro[0004] index 3 value 3,prt 0xc000eee978

erro[0004] mymap key:0,value:3

erro[0004] mymap key:1,value:3

erro[0004] mymap key:2,value:3

erro[0004] mymap key:3,value:3

對於for range 可以進行如下變形:

func testarray(t *testing.t) 

mymap := make(map[int]*int)

var index, value int

for index, value = range slice2

for key, val := range mymap

}

index,value 都只有乙個位址,在range 的過程中,將 切片的值不停的賦值給 value上。在range的過程中,mymap 中的key 都對應同乙個變數的位址,其值自然不會變

Python的乙個坑

今天發現了python乙個坑。我們知道python中函式跟c 一樣,可以設定預設引數,比如 def func x,y 1 print x,y func x 10 10 1 y有乙個預設值1,所以函式呼叫的結果是列印10 1 但是如果預設值是這樣的 class food def init self s...

ImmersionBar的乙個坑

今天寫 時發現殺掉activitya 1後再啟動activitya 2時,因為activitya 2的immersionbar先初始化了,之後activitya 1的ondestroy才執行,而關鍵點是發現ondestroy中確實是需要殺掉的activitya 1,而immersionbar也不是單...

isinstance的乙個坑

在使用unittest的時候,用到了assertisinstance方法,該方法呼叫了isinstance方法,現有兩個檔案中的兩個類 test c a.py classa pass test c b.py from a import a class b a pass其中目錄結構如下 test c ...