最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go和python變量賦值遇到的一個(gè)問題

 更新時(shí)間:2017年08月31日 08:42:36   作者:Youmai  
這篇文章主要介紹了go和python變量賦值遇到的一個(gè)問題的相關(guān)資料,需要的朋友可以參考下

平時(shí)寫得多的是python,最近看了一點(diǎn)go,今天碰到了一個(gè)問題,和大家分享一下

package main

import "fmt"

type student struct {
  Name string
  Age int
}

func pase_student() {
  m := make(map[string]*student)
  stus := []student{
    {Name: "zhou", Age: 24},
    {Name: "li", Age: 23},
    {Name: "wang", Age: 22},
  }
  for _, stu := range stus {
    m[stu.Name] = &stu
  }
  fmt.Println(m["zhou"].Name)
}

func main() {
  pase_student()
}

代碼很簡單,大家可以思考一下會(huì)打印出什么。

time.sleep(60)  # 思考

結(jié)果是 wang !,驚喜不驚喜!遍歷賦值啊同學(xué)們,這么簡單的操作都能出幺蛾子,WTF!

為什么是 wang 呢?
你tm給我
解釋解釋
什么是驚喜

for循環(huán)的時(shí)候,變量stu的指針是不變的,每次循環(huán)僅僅是對(duì)student結(jié)構(gòu)體的 值 拷貝,上面的for循環(huán)和下面是一樣的:

var stu student 
for _, stu = range stus {
 m[stu.Name] = &stu
}

所以 &stu 自始至終都是一個(gè)地址,變化的是這個(gè)地址上存儲(chǔ)的值。 &stu 最終存儲(chǔ)的值是 student{Name: "wang", Age: 22} 結(jié)構(gòu)體,所以拿出來的是 wang 。

可以將 m 打出來看一下:

map[zhou:0xc42000a260 li:0xc42000a260 wang:0xc42000a260]

驗(yàn)證了我們上面的想法,大家的value都是同一個(gè)地址。

看到這里,如果是一個(gè)日常寫c,c++等強(qiáng)類型語言的同學(xué)可能會(huì)說,神經(jīng)病??!這有什么好說的!不就是這樣的嗎!請(qǐng)?jiān)徫?,我日常寫python的 [捂臉]。

從上面的例子可以看出來,在go中,變量名是 存儲(chǔ)地址的名字 。它在編譯時(shí)綁定已經(jīng)完成,運(yùn)行時(shí)是不可以改變的,你只能改變地址中存儲(chǔ)的值。

而在python中,變量是對(duì)象的名字,運(yùn)行時(shí)變量可以綁定到任意的對(duì)象上。如下所示:

In [4]: a = 123456

In [5]: id(a)
Out[5]: 4426596208

In [6]: a = 1234567

In [7]: id(a)
Out[7]: 4426592592

注意:由于python對(duì)int類型實(shí)現(xiàn)了 小整數(shù)對(duì)象池 ,不要用 0-255 的整數(shù)做實(shí)驗(yàn),不然你得到id會(huì)是一樣的。

也就是說,當(dāng)你循環(huán)一個(gè)list的時(shí)候,每次得到的是不同對(duì)象,變量指向了不同的地址:

In [9]: for i in [2222, 2223, 2224]:
  ...:   print(id(i))
  ...:
4426596208
4426592336
4426596080

上面這段代碼,python為我們創(chuàng)建了3個(gè) PyIntObject , i 只是他們的名字。而在go中,可以認(rèn)為只有一個(gè)object,值變化了3次。

python中說的 賦值就是建立一個(gè)對(duì)象的引用 ,是實(shí)話。

相關(guān)文章

  • Python中zip()函數(shù)用法實(shí)例教程

    Python中zip()函數(shù)用法實(shí)例教程

    這篇文章主要介紹了Python中zip()函數(shù)用法實(shí)例教程,對(duì)Python初學(xué)者有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • python中concurrent.futures的具體使用

    python中concurrent.futures的具體使用

    concurrent.futures是Python標(biāo)準(zhǔn)庫的一部分,提供了ThreadPoolExecutor和ProcessPoolExecutor兩種執(zhí)行器,用于管理線程池和進(jìn)程池,通過這些執(zhí)行器,可以簡化多線程和多進(jìn)程任務(wù)的管理,提高程序執(zhí)行效率
    2024-09-09
  • Python+Selenium實(shí)現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)

    Python+Selenium實(shí)現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何利用Python+Selenium實(shí)現(xiàn)在 Geoserver批量發(fā)布來自Mongo中的矢量數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-07-07
  • Python2.6版本pip安裝步驟解析

    Python2.6版本pip安裝步驟解析

    這篇文章主要介紹了Python2.6版本pip安裝步驟解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • python3 中時(shí)間戳、時(shí)間、日期的轉(zhuǎn)換和加減操作

    python3 中時(shí)間戳、時(shí)間、日期的轉(zhuǎn)換和加減操作

    這篇文章主要介紹了python3 中時(shí)間戳、時(shí)間、日期的轉(zhuǎn)換和加減操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python?matplotlib繪圖過程中設(shè)置線條顏色實(shí)戰(zhàn)舉例

    python?matplotlib繪圖過程中設(shè)置線條顏色實(shí)戰(zhàn)舉例

    Matplotlib是一個(gè)用于數(shù)據(jù)可視化和創(chuàng)建交互式圖表的Python庫,下面這篇文章主要給大家介紹了關(guān)于python?matplotlib繪圖過程中設(shè)置線條顏色的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Python處理電子表格的Pandas、OpenPyXL、xlrd和xlwt庫

    Python處理電子表格的Pandas、OpenPyXL、xlrd和xlwt庫

    在Python中處理表格數(shù)據(jù),有幾個(gè)非常流行且功能強(qiáng)大的庫,Pandas在數(shù)據(jù)分析方面提供了廣泛的功能,而OpenPyXL、xlrd和xlwt則在處理Excel文件方面各有所長,以下是一些最常用的庫及其示例代碼
    2024-01-01
  • fastapi框架異步執(zhí)行踩坑記錄

    fastapi框架異步執(zhí)行踩坑記錄

    這篇文章主要介紹了fastapi框架異步執(zhí)行踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • jupyter notebook 添加kernel permission denied的操作

    jupyter notebook 添加kernel permission denied的操作

    這篇文章主要介紹了jupyter notebook 添加kernel permission denied的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • PyQt5 pyqt多線程操作入門

    PyQt5 pyqt多線程操作入門

    本篇文章主要介紹了PyQt5 pyqt多線程操作入門,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05

最新評(píng)論

延津县| 阿尔山市| 信宜市| 渝中区| 雷山县| 获嘉县| 大渡口区| 紫云| 泰来县| 新化县| 伊通| 金平| 江源县| 酒泉市| 平遥县| 上高县| 盐边县| 罗甸县| 阳新县| 安徽省| 淮滨县| 太谷县| 隆化县| 巴中市| 宣恩县| 沭阳县| 磐石市| 汶上县| 嵊泗县| 南部县| 刚察县| 莲花县| 宁城县| 剑川县| 织金县| 黄冈市| 久治县| 巴彦县| 利川市| 长宁县| 循化|