第一篇 變量及數據類型

第一篇 變量及數據類型

# 1、變量

1 什麼是變量

  • 變量是描述世間萬物變化的狀態
  • 內存就是變量,變量是用來臨時存儲數據的
  • 形象的理解:變量至關於有名字的容器,該容器用於裝載不一樣類型的數據
  • 在程序執行過程當中,值能夠改變的量稱爲變量。變量能夠經過變量名訪問
  • 計算機如何去模擬現實,首先它須要記錄現實世界中各類事物的特徵,而記錄這些特徵所須要的容器便是變量

2 爲何須要變量

  • 程序所用到的數據都會保存在內存中,程序員須要一種機制來訪問或修改內存中的數據,而這種機制就是變量(領會便可)
  • 每個變量都表明了一小塊內存,而變量是有名字的,程序對變量賦值,其實就是把數據裝入該變量所表明的內存區的過程
  • 一樣道理,程序讀取變量的值,實際上就是從該變量所表明的內存區取值的過程

3 如何定義變量

  • name = 'king' #python中單引號和雙引號均可以定義字符串
      age = 20 #int 整數類型
      gender = "female"
      weight = 62.5 #float 浮點型
      msg = '''
      竹杖芒鞋輕勝馬
      一蓑煙雨任生平
      ''' #多行字符串必須用三對單引號
  • 變量的組成:變量名、賦值符號、變量值python

  • 變量名:用來引用變量值,但凡須要用變量值,都要經過變量名程序員

  • 賦值符號:賦值數組

  • 變量值:存放數據,用來記錄現實世界中的某種狀態dom

  • 命名規範:用英文,必須是字母或數字或下劃線(它們的任意組合皆可),關鍵字不能聲明爲變量名,關鍵字好比: 'and','as','assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'等等性能

  • 單行註釋用井號,多行註釋用三對雙引號(經過下圖,其實多行註釋和定義多行字符串有不小淵源,編譯器爲pycharm)優化

# 2、 內存管理及小整數池

1 引用計數

  • 變量值被引用的次數
  • 當對象被建立並(將其引用)賦值給變量時,該對象的引用計數被設置爲1。例如 x = 2,則 2 這個值的引用計數爲1
  • 當再編寫一個變量名並指向該對象(以上述變量x爲例子)的值(2)或者該對象的變量名 x 時,引用計數加 1。即 y = 2 或 y = x,則 2 這個值的引用計數爲2
  • 當指向該對象的變量名賦上另外一個值時,原對象的引用計數減 1 ,可是新的值的引用計數加 1。即 x = 5y任然等於2,此時2這個值的引用計數爲1,5這個值的引用計數也爲1
  • del y,則此時2這個值引用計數爲0,觸發 python的垃圾回收機制,python 清理2所佔用的內存空間

垃圾回收機制:當變量值的引用計數爲0時,python會收回該變量值的內存佔用code

2 del語句

  • 格式:
del 刪除對象
  • 在Python語言中, del語句操做某個對象的時候, 並非直接將該對象在內存中刪除, 而是將該對象的引用計數-1

3 小整數池

  • 對於引用計數,須要注意的是:Python實現int的時候有個小整數池。爲了不因建立相同的值而重複申請內存空間所帶來的效率問題, Python解釋器會在啓動時建立出小整數池,範圍是==(-5,256)==,該範圍內的小整數對象是全局解釋器範圍內被重複使用,永遠不會被回收。
  • 在pycharm中運行python程序時,pycharm出於對性能的考慮,會擴大小整數池的範圍,其餘的字符串等不可變類型也都包含在內以便採用相同的方式處理了,咱們只須要記住這是一種優化機制,至於範圍到底多大,無需細究。

4 關於可變數據類型和不可變數據類型

  • 可變數據類型,是指對象中的一塊內容(value)是能夠被改變的,但它的地址不會再發生改變:對對象操做的時候,不須要再在其餘地方申請內存,只須要在此對象後面連續申請「要求」便可,也就是它的地址會保持不變,但總的區域會變長或者變短(也就是說它裏面的元素的地址會發生改變)
    • 對可變類型操做,至關於直接去修改變量的值。就算兩個變量的值相同,所在的內存地址也不一樣。若是想要把讓兩個可變類型的內存地址相同可使用賦值的語句。可是兩個內存地址相同的可變類型,改變了其中一個的值,另外一個也會跟着被改變
      總結:對於可變數據類型變量自己,==一、==若是它的值從新賦值,就算它的值和以前同樣,它的地址也會改變;若是隻是它裏面的元素改變了值,那麼它自己的地址則不會發生任何變化;==二、==若是有一個和它同類型的新變量由它賦值而來(如:list_b = list_a),則它們的地址相同,並且他們之間若是其中一個改變它裏面元素的值,另外一個也會發生一樣的改變;==三、==若是倆個變量是各自經過賦相同的值而來(如:a = [1] b =[1]),則它們的地址不一樣
  • 不可變數據類型是值變地址也會變:在對對象自己操做的時候,必須在內存中從新申請一塊區域,而後將這塊新的內存區域貼上原對象的變量名,原對象的引用計數減一
    • 對不可變類型操做,至關於重新定義了一個新的變量。只是名字相同罷了,可是內存地址不一樣。因爲pycharm的不斷優化,對於整型、字符串、元組這些不可變數據類型,它的值相同,則地址也相同(最大範圍須要查資料,略)
    • 不可變類型有什麼好處?若是數據是不可變類型,當咱們把數據傳給一個不瞭解的API時,能夠確保咱們的數據不會被修改
      總結:對於不可變數據類型,只要它們的值相同,則地址必定相同

# 3、關於定義變量的三個特徵

1 變量有哪三個特徵

  • 值、地址id()、數據類型type()

2 變量值的比較

  • 判斷變量值是否相等
  • ==注意==:當咱們在 python 中用print(a is b)時,表示是比較ab的地址對象

3 變量id是否相等

  • 判斷變量地址是否相等blog

# 4、數據類型

1 簡介數據類型

  • 爲了合理利用內存空間而將變量所能存儲的數據的大小等特徵固定下來的一種聲明
  • 變量是用來存儲值的所在處,它們有名字和數據類型。變量的數據類型決定了如何將表明這些值的位存儲到計算機的內存中。在聲明變量時也可指定它的數據類型。全部變量都具備數據類型,以決定可以存儲哪一種數據

2 數字類型

  • 整數類型:int 。在python中整型直接能夠寫出 a = 666
  • 浮點數類型:float。在python中整型直接能夠寫出 b = 6.66
  • 後面再詳細介紹

3 字符串類型

  • 字符串只能 相加、相乘和邏輯比較
  • ==字符串只能和數字相乘==
  • 字符串的==拼接,即從新申請一個小空間把兩個字符串都拷貝一份後再拼接==。而不是把一個小空間內的變量值複製到另外一個變量的小空間內拼接

4 列表類型

  • 當咱們須要存儲多個不相關的字符時,若是用字符串類型則很差取出,因此咱們利用列表就很容易
  • 列表有點相似與C中的數組,可是C中的數組若是取出來須要用到循環
  • 格式:例如 title_list = ['Journey to the West', 'The Romance of the Three Kingdoms','The Story of the Stone','Water Margins']
  • 能夠直接取出:print(title_list)
  • 也能夠單獨一個一個的取出:print(title_list[0])
  • 和數組類似,列表也能夠有多維的:例如taste_list = ['read','swim',['delicacy',20,'sweet-smelling'],'walk'],假如當咱們須要取出裏面的20(美食價格20元)時,咱們只須要print(taste_list[2][1])

5 字典類型

  • 能經過列表取值的時候,是基於咱們已經知道了列表內部全部的元素。當咱們不知道數據的大小或者數據很是龐大時,咱們該如何存取索引

  • 所以咱們是否是能夠給列表內的每個元素都添加一個描述信息呢?不然若是不是存個人信息,而是用列表存取了成千上萬個值,那麼咱們怎麼經過索引精準取值呢?這樣看起來好像是不可能的,所以可使用新的數據類型——字典

    1.做用:用來存取多個值,按照==key:value==的方式存值,取的時候能夠經過key而非索引去取值,key對value具備描述性的做用。存放數據的種類各類各樣而且數據較多的時候可使用字典

    2.定義:在{}內用逗號分隔開多個元素,每個元素都是key: value的格式,其中==value是任意格式的數據類型==,key因爲具備描述性的做用,因此==key一般是字符串類型==

  • 字典舉例:user_info = {'name':'king','gender':'male','age':26,'height':175} print(user_info['name']) 結果是 king

  • 字典嵌套字典舉例:user_info = {'name':'king','age':26,'school_info':{'s_name':'oldboy','s_address':'shanghai','s_area':1000},'gender':'male'} print(user_info['school_info']['s_address']) 結果是shanghai

  • 字典嵌套列表舉例:user_info = {'name':'king','age':26,'school_info':['oldboy','shanghai'],'gender':'male'} print(user_info['school_info'][1]) 結果是shanghai

  • 列表嵌套字典舉例:students = [{'name':'king','weight':62.5},{'name':'queen','age':24}] print(students[1]['age']) 結果是24

6 布爾類型

  • 用於判斷條件結果,一般狀況不會直接引用,須要使用邏輯運算獲得結果
  • Python中全部數據類型的值==自帶布爾值==,數據類型中只須要記住==只有0、None、空、False的布爾值爲False==,其他的爲True
  • print(type(True)) 結果是<class 'bool'>
  • print(True) 結果是True
  • print(bool(0)) 結果是False
  • print(bool('king')) 結果是True
相關文章
相關標籤/搜索