1. 程式人生 > >python基礎之全局局部變量及函數參數

python基礎之全局局部變量及函數參數

如果 本質 並不會 周期 結束 strong 一個 python oba

1.局部變量和全局變量

  1.1局部變量

  局部變量是在函數內部定義的變量,只能在定義函數的內部使用

  函數執行結束後,函數內部的局部變量會被系統收回

  不同函數可以定義相同名字的局部變量,但是各用個的互不影響

  

  局部變量的生命周期:

   1.所謂生命周期就是變量從被創建到被系統回收的過程

   2.局部變量在函數被調用時才會被創建

   3.函數執行結束後局部變量被系統回收

   4.局部變量在生命周期內,可以用來存儲函數內部臨時使用到的數據

   技術分享圖片

  1.2全局變量

  全局變量是在函數外部定義的變量(沒有定義在某一個函數內),所有函數內部都可以使用這個變量

  註意:函數執行時,在需要處理變量時會:

  1.首先查找 函數內部 是否存在 指定名稱的局部變量,如果有,直接使用

  2.如果沒有,查找 函數外部 是否存在 指定名稱的全局變量,如果有,直接使用

  3.如果還有沒, 程序報錯!

  技術分享圖片

  2)函數不能直接修改全局變量的引用

  在函數內部可以通過全局變量的引用獲取對應的數據,但是不允許直接修改全局變量的引用

  技術分享圖片

  

  3)在函數內部修改全局變量的值

   如果在函數內部需要修改全局變量的值,需要使用關鍵字 global 進行聲明

   技術分享圖片

2.函數的參數

2.1 在函數內部,針對形參使用賦值語句,並不會影響到調用函數時傳遞的實參變量的值

無論傳遞的參數是可變還是不可變,只要針對參數使用賦值語句,只會在函數內部修改局部變量的引用,不會影響到外部變量的引用

>>> def demo(num, list):
...     print(函數內部代碼)
        #在函數內部,針對參數使用賦值語句,不會修改到外部的實參變量
...     num = 100
...     list = [1,2,3]
...     print(num)
...     print(list)
...     print(函數代碼完成)
...
>>> gl_num = 99
>>> gl_list = [4,5,6]
>>> demo(gl_num,gl_list) 函數內部代碼 100 [1, 2, 3] 函數代碼完成 >>> print(gl_num) 99 >>> print(gl_list) [4, 5, 6]

2.2 如果傳遞的參數是可變類型,在函數內部,通過方法修改了數據的內容,同樣會影響到外部的數據

 1 def demo(num_list):
 2     # 使用方法修改列表的內容
 3     num_list.append(9)
 4     print(函數內部結果:, num_list)
 5 
 6 
 7 gl_list = [1, 2, 3]
 8 demo(gl_list)
 9 print(函數外部結果:, gl_list)
10 ----------------------------------------------
11 函數內部結果: [1, 2, 3, 9]
12 函數外部結果: [1, 2, 3, 9]

3.擴展 列表使用 += 運算符

 1 def demo(num, num_list):
 2     print("函數開始")
 3     # num = num + num
 4     num += num
 5 
 6     # 列表變量使用 += 不會像數字一樣做相加再賦值操作
 7     # 本質是在調用列表的 extend 方法
 8     # num_list.extend(num_list)
 9     num_list += num_list
10     print(num)
11     print(num_list)
12     print("函數結束")
13 
14 
15 gl_num = 10
16 gl_list = [1, 2, 3]
17 demo(gl_num, gl_list)
18 print(gl_num)
19 print(gl_list)
20 --------------------------------------------------------------
21 函數開始
22 20
23 [1, 2, 3, 1, 2, 3]
24 函數結束
25 10
26 [1, 2, 3, 1, 2, 3]

  

python基礎之全局局部變量及函數參數