1. 程式人生 > >python基礎自學 第七天

python基礎自學 第七天

變數進階

0.1變數的引用

  • 變數和資料都是儲存在記憶體中的
  • 在python中函式的引數傳遞以及返回值都是靠引用傳遞的

1.1引用的概念

  • 變數和資料是分開儲存的
  • 資料儲存在記憶體中的一個位置
  • 變數中儲存著資料在記憶體中的地址
  • 變數中記錄資料的地址,就叫做引用
  • 使用 id() 函式可以檢視變數中儲存書記所在的記憶體地址

注意:
如果變數已經被定義,當給一個變數賦值的時候,本質上是修改了資料的引用

1.2函式的引數和返回值的傳遞

呼叫函式時,本質上傳遞的是實參儲存資料的引用(實參的記憶體地址),而不是實參儲存的資料
這裡寫圖片描述

02.可變和不可變型別

#不可變型別,記憶體中資料不允許被修改:

數字型別:int, bool , float, complex,long(2.x)
字串 str
元祖 tuple

#可變型別,記憶體中的資料可以被修改:

列表
字典

注意:
可變型別通過方法改變資料,記憶體地址不會改變
如果使用賦值語句改變,記憶體地址會改變
字典的key只能使用不可變型別的資料

雜湊(hash)

接收一個不可變型別的資料作為引數
返回結果是一個整數
雜湊就是一種演算法,其作用就是提取資料的特徵碼(獨一無二的)
設定字典的鍵值對時,會首先對 key 進行 hash ,key只能是不可變型別
03.區域性變數和全域性變數
區域性變數:在函式內部定義的變數,只能在函式內使用.
全域性變數: 在函式外部定義的變數,所有函式內部都可以使用這個變數

3.1區域性變數
區域性變數是在函式內部定的變數,只能在函式內部使用
函式執行結束後,函式內部的區域性變數,會被系統回收
不同的函式,可以定義相同的名字的區域性變數,相互並不會影響

區域性變數的生命週期
生命週期就是變數從被建立到被系統回收的過程
區域性變數在函式執行時才被建立
函式執行結束後區域性變數被系統回收
區域性變數在生命週期內,可以用來儲存函式內部歷史使用到的資料

3.2全區變數
在函式外部定義的變數,所以函式內部都可以使用這個變數
不允許直接修改全域性變數的引用,使用賦值語句修改全域性變數的值
全域性變數定義在其他函式的上方

在函式內部修改全域性變數的值
改變全域性變數需要使用global宣告一下變數即可

補:
程式碼結構示意圖
shebang (用哪個直譯器)
import模組
全域性變數
函式定義
執行程式碼

全域性變數的命名建議
全域性變數名前面應該增加g_或者gl_的字首

01函式引數和返回值的作用
如果函式內部處理的資料不確定,就可以將外界的資料以引數傳遞到函式內部
如果希望函式執行完成後,想外界彙報執行結果們就可以增加返回值

返回值
如果函式返回的型別是元祖,同時希望單獨的元祖中的元素\
可以使用多個變數,一次接受函式的返回結果\

;注意:
使用多個變數接收結果時,變數的個數應該和元祖中的元素個保持一致\

02函式引數
在函式的內部,針對引數使用賦值語句,不會修改到外部的實參變數

如果傳遞的引數型別是可變型別,在函式內部使用方法更改了資料的內容,
同樣會影響到外部資料

這裡寫圖片描述

補:
運算子— +=
列表變數呼叫 += 本質上是執行extend()方法,函式內部呼叫也會影響外部程式碼

預設引數
預設引數,需要使用最常見的值作為預設值
如果一個引數的值不能確定,則不應該這是預設值,具體的數值呼叫函式時,有外界傳遞.
圖解:
這裡寫圖片描述

注:
一個帶預設值的引數,一定要放在所以引數的最後面
圖解:
這裡寫圖片描述
如果有多個預設引數,需要制定引數名
圖解:
這裡寫圖片描述

多值引數(瞭解,看懂網路大咖的程式碼)
一個函式能夠處理的引數個數是不確定的,就可以使用多值引數
兩種分類:
引數名前增加一個 * 可以接收元祖
引數名前面增加兩個 * 可以接收字典

圖解:
這裡寫圖片描述