成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個(gè)看似初級(jí)的Python小問題,高手也難保不掉進(jìn)坑里

開發(fā) 后端
昨晚有同學(xué)問了一個(gè)非常有意思的問題。問題本身很簡(jiǎn)單,卻包含了初學(xué)者不易理解、編碼實(shí)踐中又處處可見的幾個(gè)知識(shí)點(diǎn)。如果對(duì)這些知識(shí)點(diǎn)理解有偏差,即便是經(jīng)驗(yàn)豐富的Python程序員,稍不留神也會(huì)掉進(jìn)坑里。

[[405302]]

本文轉(zhuǎn)載自微信公眾號(hào)「Python作業(yè)輔導(dǎo)員」,作者天元浪子 。轉(zhuǎn)載本文請(qǐng)聯(lián)系Python作業(yè)輔導(dǎo)員公眾號(hào)。

昨晚有同學(xué)問了一個(gè)非常有意思的問題。問題本身很簡(jiǎn)單,卻包含了初學(xué)者不易理解、編碼實(shí)踐中又處處可見的幾個(gè)知識(shí)點(diǎn)。如果對(duì)這些知識(shí)點(diǎn)理解有偏差,即便是經(jīng)驗(yàn)豐富的Python程序員,稍不留神也會(huì)掉進(jìn)坑里。

  1. def f(w, a, b): 
  2.     w.append(a) 
  3.     w = w + [b] 
  4.     return w 
  5.  
  6. w, a, b = [5, 9], 2, 1 
  7. w = f(w, a, b) + w 
  8. print(w) 

如果將上面代碼稍作改動(dòng),函數(shù)中的賦值操作(=)變成加等操作(+=),正確的輸出結(jié)果又是哪一個(gè)呢?

  1. def f(w, a, b): 
  2.     w.append(a) 
  3.     w += [b] 
  4.     return w 
  5.  
  6. w, a, b = [5, 9], 2, 1 
  7. w = f(w, a, b) + w 
  8. print(w) 

要想正確回答問題,首先要了解可變對(duì)象和不可變對(duì)象的概念,以及可變對(duì)象和不可變對(duì)象作為函數(shù)參數(shù)是如何向函數(shù)傳參的。

那么,什么是可變對(duì)象、什么是不可變對(duì)象呢?在Python中,整型(int)、浮點(diǎn)型(float)、布爾型(bool)、元組(tuple)和字符串(str)等內(nèi)置類,一旦實(shí)例化就不可改變,屬于不可變對(duì)象;而列表(list)、字典(dict)和集合(set)等內(nèi)置類,實(shí)例化后得到對(duì)象,可以任意修改。

讀到這里,有些初學(xué)者可能會(huì)不理解:元組、字符串不可改變,老師和教科書上都是這么說的,整型浮點(diǎn)型對(duì)象為什么不可變呢?讓x=1之后,x就不能改變了嗎?加1不就變成2了嗎?顯然,這是對(duì)對(duì)象概念的誤解。x=1,是讓x指向了值為1的整型對(duì)象,但x并不是真正的整型對(duì)象,只是一個(gè)名字而已,我們稱其為變量名或?qū)ο竺? 。x加1變成2,并非值為1的整型對(duì)象自身加1,而是讓x指向了另一個(gè)值為2的整型對(duì)象。

  1. >>> id(x) 
  2. 2794729897296 
  3. >>> x += 1 
  4. >>> id(x) 
  5. 2794730437616 
  6. >>> y = [1,2] 
  7. >>> id(y) 
  8. 2794699482248 
  9. >>> y += [3] 
  10. >>> id(y) 
  11. 2794699482248 
  12. >>> y = y + [4] 
  13. >>> id(y) 
  14. 2794699482376 

借助Python的id函數(shù)(返回變量名所指對(duì)象的內(nèi)存首地址),可以清楚看到,執(zhí)行加等操作(+=)之后,x指向的整型對(duì)象地址發(fā)生了改變,y指向的列表對(duì)象地址并未改變。不過,對(duì)y執(zhí)行賦值操作(=)之后,y指向的列表對(duì)象地址發(fā)生了改變。這表明,賦值操作(=)是在變量名和對(duì)象之間新建對(duì)應(yīng)關(guān)系,而加等操作(+=)并不改變變量名和對(duì)象之間的對(duì)應(yīng)關(guān)系,除非對(duì)象是不可變的。

理解了可變對(duì)象和不可變對(duì)象的概念之后,就很容易理解可變對(duì)象和不可變對(duì)象作為函數(shù)參數(shù)是如何向函數(shù)傳參的了。如下圖所示,紅色箭頭指向的是可變對(duì)象作為參數(shù)傳遞到函數(shù),綠色箭頭指向的是不可變對(duì)象作為參數(shù)傳遞到函數(shù)。對(duì)于不可變對(duì)象而言,無論函數(shù)內(nèi)部如何改變這些參數(shù),都不會(huì)影響到函數(shù)外部的不可變對(duì)象,因?yàn)樗麄兪遣豢筛淖兊摹?duì)于可變對(duì)象來說,函數(shù)內(nèi)部對(duì)于它們的任何操作都是施加于對(duì)象本身的,這個(gè)對(duì)象即函數(shù)外部的變量所指向的對(duì)象。需要說明的是,函數(shù)的參數(shù)傳遞,并不要求實(shí)際參數(shù)和形式參數(shù)同名,下圖紅綠箭頭對(duì)應(yīng)的實(shí)際參數(shù)和形式參數(shù)名字相同,僅是我個(gè)人的習(xí)慣,并非規(guī)則要求。

是時(shí)候進(jìn)入正題了。第一段代碼中,可變對(duì)象w和不可變對(duì)象a、b作為參數(shù)傳進(jìn)函數(shù)后,內(nèi)部變量名w和外部變量名w指向同一個(gè)對(duì)象,append操作自然也會(huì)影響外部變量名w所指向的列表對(duì)象。其后的賦值操作將函數(shù)內(nèi)部的變量名w指向了另外一個(gè)新的列表對(duì)象,因而不會(huì)改變外部的變量名w所指向的列表對(duì)象。如下圖所示,不言自明,代碼最后的輸出結(jié)果應(yīng)該是D,即[5, 9, 2, 1, 5, 9, 2]。

在第二段代碼中,由于+=操作不改變內(nèi)部變量w的指向,外邊變量w所指向的列表自然也變成了[5, 9, 2, 1],最終的輸出結(jié)果是兩個(gè)[5, 9, 2, 1]相加,正確答案是E, 如下圖所示。

 

責(zé)任編輯:武曉燕 來源: Python作業(yè)輔導(dǎo)員
相關(guān)推薦

2009-08-25 15:23:16

C#子線程

2018-06-01 09:11:23

2020-06-09 08:00:52

Python開發(fā)代碼

2017-12-05 15:32:44

深度學(xué)習(xí)語(yǔ)音識(shí)別

2011-05-31 15:38:37

CSS

2017-11-29 14:18:45

2019-01-07 14:54:00

管理結(jié)構(gòu)性思維測(cè)試

2025-03-25 10:35:37

OraclePython數(shù)據(jù)庫(kù)

2011-06-29 15:52:14

友情鏈接

2021-09-26 05:25:33

邊緣計(jì)算IoT

2025-07-02 07:51:15

2024-05-20 01:10:00

Promise變量

2023-07-17 09:19:20

CSSCSS 漸變

2010-05-31 14:22:25

RFID安全

2024-02-28 08:12:25

SSE接口代理

2009-09-15 09:23:35

初級(jí)linuxLinuxlinu操作系統(tǒng)x后門

2018-08-07 10:54:02

HTTPS郵箱瀏覽器

2011-07-04 09:39:31

項(xiàng)目管理

2012-08-13 11:11:28

2009-07-07 13:12:44

Java Servle
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人在线a | 日韩精品在线看 | 黄 色 毛片免费 | 欧美4p | 中文在线播放 | 欧美一级在线视频 | 999久久久久久久久6666 | 欧美成人综合 | 色网站在线免费观看 | 一级高清 | 国产精品视频一区二区三 | www.一区二区三区 | 伊人电影院av | 国产高清视频在线观看 | 在线观看日韩av | 欧美黄色性生活视频 | 91观看| 精品国产一区二区久久 | 精品国产一区二区三区av片 | 久久av综合 | 久久久蜜桃 | 成年女人免费v片 | 国产成人久久精品一区二区三区 | 国产精品一区二区久久精品爱微奶 | www.一区二区三区 | 久久久精品| 成人视屏在线观看 | 免费成人高清在线视频 | 亚洲精品一区av在线播放 | 亚洲成人福利视频 | 精国产品一区二区三区 | www日本在线播放 | 蜜桃传媒一区二区 | 亚洲综合视频一区 | 午夜资源| 久精品久久 | a欧美 | 97av视频在线 | 亚洲国产精品人人爽夜夜爽 | 国产精品国产精品国产专区不卡 | 一区二区视频在线观看 |