詳細分析Python可變對象和不可變對象_python

來源:腳本之家  責任編輯:小易  

Python與c#的技術差異很大,但都適合web開發,以下是Python與C#詳細對比分析:Python原本就被設計的類似用英語表達一樣,只要你使用合適的變量名稱,許多表達式就很容易讀懂。另外,由于Python語法簡單,沒有像句法括號和大量的修飾詞,各種類C的構造和不同的初始化變量,所以Python寫的代碼易讀易學。C#從C++和Java遺傳了很多原始表達的類C語法,更重要的是,C#語法使我們必須遵循一定的規則來編寫自已的方法或是繼承類,伴隨而來的是另一大串修飾詞,還有一點不能忘記的是要把代碼段放在括號內。而Python只用SHIFTS鍵就可以讓代碼看上去很整潔。至于編寫腳本方面,值得一提的是Python的腳本是真正的腳本,能夠被解釋器執行。你可以用任何編輯器打開它,修改后就可以立即運行。這在手邊沒有IDE或編譯器的時候優勢十分明顯。而且使用Python更容易編寫跨平臺的腳本,甚至都不需要重新編譯。但是,我們要指出Python的一個不足,就是需要在機器上安裝腳本解釋器,至少要在一個包或可執行文件里打包上一個解釋器,從而使腳本的大小從幾KB增加到十幾M,不過對于現代計算機來說,十幾兆的空間需求基本可以忽略不計,所以這也不是什么大問題。而C#需要IDE來編寫程序,C#的一個好處是,當你編寫基于WINDOWS平臺的腳本時,它有強大的各類WINDOWS系統組件支持。例如,注冊表、WMI、網絡等內置工具。C#可以使用WINFORMS,你需要的時候可以很容易地創建圖形化接口。沒法說Python和C#哪個更好e799bee5baa6e997aee7ad94e4b893e5b19e31333431366265,Python比C#更容易學,開源庫更多,但C#的標準庫比Python的更好,其性能更高www.anxorj.tw防采集請勿采集本網。

在 Python 中一切都可以看作為對象。每個對象都有各自的 id, type 和 value。

    id: 當一個對象被創建后,它的 id 就不會在改變,這里的 id 其實就是對象在內存中的地址,可以使用 id() 去查看對象在內存中地址。 type: 和 id 一樣當對象唄創建之后,它的 type 也不能再被改變,type 決定了該對象所能夠支持的操作 value: 對象的值

    Python語言相對于其它解釋性語言最大的特點是其龐大而活躍的科學計算生態,在數據分析、交互、可視化方面有相當完善和優秀的庫(python數據分析棧:Numpy?Pandas?ScipyMatplotlipIpython) 并且還形成了

作者Wes McKinney是pandas庫的主要作者,所以本書也可以作為利用Python實現數據密集型應用的科學計算實踐指南。通過詳細的案例學習如何解決Web分析、社會科學、金融學以及經?濟學等領域的問題。

一個對象可變與否就在于 value 值是否支持改變。

拓展資料Python(英國發音:/?pa?θ?n/美國發音:/?pa?θɑ?n/),是一種面向對象的解釋型計算機程序設計語言,由荷蘭人Guido van Rossum于1989年發明,第一個公開發行版發行于1991年。Python是純粹的

不可變對象

你好: 首先函數參數是一個列表:返回的也是一個列表;函數功能是: 如果傳進來的列表的長度大于300的話,返回的將是列表的前300項;如果個數小于300的話,直接返回這個列表;

常見的不可變對象(immutable objects):

    Number: int, float, complex string tuple frozenset:set 的另外一種類型

作者Wes McKinney是pandas庫的主要作者,所以本書也可以作為利用Python實現數據密集型應用的科學計算實踐指南。通過詳細的案例學習如何解決Web分析、社會科學、金融學以及經?濟學等領域的問題。

讓我們通過例子感受一下

例子

>>> x=1>>> y=x>>> id(x)==id(y)True>>> id(1)==id(y)True

這里創建了兩個 int 對象,并且讓 x,y 指向同一個對象,然后我們試著修改一下 x,讓 x+1

>>>x=x+1

這個時候 x 的 id 值和 y 的 id 以及 1 的 id 還一樣嗎?

>>> x=x+1>>> id(x)==id(y)False>>> id(x)==id(1)False>>> id(1)==id(y)True

從結果不難看出來,x 所指向的對象已經改變了,但是 1 并沒有改變。這就是不可變對象,對于不可變對象來說,一旦創建之后就不允許被改變。

注意: 不可變并不嚴格等同絕對的不可變

>>> a=([1],2,3)>>> id(a)4338862696>>> id(a[0])4338949128>>> a[0][0]=0>>> id(a)4338862696>>> id(a[0])4338949128

從上面的例子不難看出,我們改變了 a[0] 的值,但是并沒有影響它的 id 值。一個不可變容器對象如果包含對可變對象的引用,當后者的值改變時,前者的值也會改變;但是該容器仍屬于不可變對象,因為它的 id 值不會改變的。

可變對象

常見的可變對象(mutable objects):

    list dict set

作者Wes McKinney是pandas庫的主要作者,所以本書也可以作為利用Python實現數據密集型應用的科學計算實踐指南。通過詳細的案例學習如何解決Web分析、社會科學、金融學以及經?濟學等領域的問題。

同樣的通過例子感受一下

例子

>>> c = [1,2,3]>>> b = c>>> id(b)==id(c)True

創建兩個 list 對象,并且讓 c,d 指向同一個對象,然后我們試著修改一下 c

c[0]=4

這個時候在看一下兩個對象的 id 值是否一致

>>> id(c)==id(b)True

修改之后,c,d 仍然指向同一個對象,所以不難得出結論,對于一個可變對象來說,修改 value 值并不會對它的 id 造成任何影響

函數參數

對于可變對象和不可變對象,他們兩者在函數當作參數傳遞的時候表現也有所不同

例子

eg0

def update_list(nums_list): print(f'2 id:{id(nums_list)}') nums_list += [10] print(f'3 id:{id(nums_list)}') number_list = [5, 6]print(f'1:{number_list}, id:{id(number_list)}') update_list(number_list)print(f'4:{number_list}, id:{id(number_list)}')

看一下結果

1:[5, 6], id:4457707912

2 id:4457707912

3 id:4457707912

4:[5, 6, 10], id:4457707912

在看另外一個例子

eg1

def add_num(number): print(f'2:{id(number)}') number += 1 print(f'3:{id(number)}')num = 1print(f'1:{num}, id:{id(num)}') add_num(num)print(f'4:{num}, id:{id(num)}')

看一下結果

1:1, id:4343768416

2 id:4343768416

3 id:4343768448

4:1, id:4343768416

有其他有些文章中,上面 eg0 被稱為引用傳遞,eg1 被稱為值傳遞。然而在官方文檔中,并沒有找到有關的這兩個名詞的任何內容,或者這種方式并不是上述的兩者任意一種。

這里的重點是:對于可變對象,在函數中的值的改變,會導致對象改變;對于不可變對象,在函數中值的改變,對其不會造成任何影響

以上就是詳細分析Python可變對象和不可變對象的詳細內容,更多關于Python可變對象和不可變對象的資料請關注真格學網其它相關文章!

在進行網頁抓取的時候,分析定位html節點是獲取抓取信息的關鍵,目前我用的是lxml模塊(用來分析XML文檔結構的,當然也能分析html結構),利用其lxml.html的xpath對html進行分析,獲取抓取信息。首先,我們需要安裝一個支持xpath的python庫。目前在libxml2的網站上被推薦的python binding是lxml,也有beautifulsoup,不嫌麻煩的話還可以自己用正則表達式去構建,本文以lxml為例講解。假設有如下的HTML文檔:1<html>2 <body> 3 <form> 4 <div id='leftmenu'> 5 <h3>text</h3> 6 <ul id=’china’>!first location->7<li>.</li>8<li>.</li>9.10</ul>11’england’>!second location->12<li>.</li>13<li>.</li>14.15</ul>16</div>17</form>18</body>19</html>直接使用lxml處理:1 import codecs2 from lxml import etree3 f=codecs.open("ceshi.html內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • python新手學習可變和不可變對象
  • python可變對象與不可變對象原理解析
  • 淺談python中的可變對象和不可變對象
  • python爬蟲之urllib,偽裝,超時設置,異常處理的方法
  • python基于多線程實現ping掃描功能示例
  • python用csv寫入文件_消除空余行的方法
  • python中文字符串截取問題
  • python中利用lstm模型進行時間序列預測分析的實現
  • python實現抓取頁面上鏈接的簡單爬蟲分享
  • python實現簡單的文字識別
  • python for循環通過序列索引迭代過程解析
  • python web框架flask信號機制(signals)介紹
  • python定時執行指定函數的方法
  • python xpath解析返回對象怎么處理
  • python和C#哪個適合我?
  • 如何進行處理Python對象參數解析
  • 學Python能干什么?
  • 請問python主要應用領域是什么,哪方面用的多了.
  • 如何利用python進行數據分析
  • python 適合做什么開發
  • python 求這個函數的詳細說明,本人不是伸手黨,自己分析過了,來確定下
  • 求高人分析以下python小程序,特別是for循環中內容
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全vbsdos/bathtahtcpythonperl游戲相關vba遠程腳本coldfusionruby專題autoitseraphzonepowershelllinux shellluagolangerlang其它首頁python新手學習可變和不可變對象python可變對象與不可變對象原理解析淺談python中的可變對象和不可變對象python爬蟲之urllib,偽裝,超時設置,異常處理的方法python基于多線程實現ping掃描功能示例python用csv寫入文件_消除空余行的方法python中文字符串截取問題python中利用lstm模型進行時間序列預測分析的實現python實現抓取頁面上鏈接的簡單爬蟲分享python實現簡單的文字識別python for循環通過序列索引迭代過程解析python web框架flask信號機制(signals)介紹python定時執行指定函數的方法python入門教程 超詳細1小時學會python 列表(list)操作方法詳解python 元組(tuple)操作詳解python 字典(dictionary)操作詳解pycharm 使用心得(一)安裝和首python strip()函數 介紹pycharm 2020最新永久激活碼(附python 中文亂碼問題深入分析python中使用xlrd、xlwt操作excepython科學計算環境推薦——anacpython3標準庫glob文件名模式匹配的問題對pandas的dataframe繪圖并保存的實現方法python獲取某一天是星期幾的方法示例python導入oracle數據的方法基于pandas中expand的作用詳解使用pandas將inf, nan轉化成特定的值python使用matplotlib 模塊scatter方法畫python中django簡單測試實例python進階:生成器 懶人版本的迭代器詳解opencv+python實現鼠標點擊圖像,輸出該點
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载