文章目錄
-
- 函數
- 全局變量和局部變量
- 淺拷貝和深拷貝
函數
1、一個程式由一個個任務組成;函數就是代表一個任務或者一個功能。
2、函數是代碼複用的通用機制。
函數的形式如下:
def 函數名 ([參數清單]) :
‘’‘文檔字元串’’’
函數體/若幹語句
參數清單 :
(1) 圓括号内是形式參數清單,有多個參數則使用逗号隔開
(2) 形式參數不需要聲明類型,也不需要指定函數傳回值類型 (3) 無參數,也必須保留白的圓括号
(4) 實參清單必須與形參清單一一對應
return傳回值要點:
1、 如果函數體中包含return 語句,則結束函數執行并傳回值;
2、如果函數體中不包含return語句,則傳回 None 值。 3. 要傳回多個傳回值,使用清單、元組、字典、集合将多個值“存起來”即可
調用函數時,傳遞的參數稱為“實際參數”,簡稱“實參”。形式參數是在定義函數時使用的。 形式參數的命名隻要符合“标 識符”命名規則即可。
def printMax(a,b):
'''實作兩個數的比較,并傳回較大的值'''
if a>b:
print(a,'較大值')
else:
print(b,'較大值')
printMax(10,20)
printMax(30,5)
傳回值:
函數是對象
上面代碼執行 def 時,系統中會建立函數對象,并通過print_star 這個變量進行引用:
執行“c=print_star”後,顯然将 print_star 變量的值賦給了變量c,記憶體圖變成了:
全局變量和局部變量
變量起作用的範圍稱為變量的作用域,變量分為:全 局變量、局部變量。
全局變量:
1、在函數和類定義之外聲明的變量。作用域為定義的子產品,從定義位置開始直到子產品 結束。
2、全局變量降低了函數的通用性和可讀性。應盡量避免全局變量的使用。
3、全局變量一般做常量使用。
4、函數内要改變全局變量的值,使用global聲明一下
局部變量:
1、在函數體中(包含形式參數)聲明的變量。
2、 局部變量的引用比全局變量快,優先考慮使用。
3、如果局部變量和全局變量同名,則在函數内隐藏全局變量,隻使用同名的局部變量
Python中參數的傳遞都是“引用傳遞”,不 是“值傳遞”。具體操作時分為兩類:
1、對“可變對象”進行“寫操作”,直接作用于原對象本身。
2、 對“不可變對象”進行“寫操作”,會産生一個新的“對象空間”,并用新的值填 充這塊空間。(起到其他語言的“值傳遞”效果,但不是“值傳遞”)
可變對象有: 字典、清單、集合、自定義的對象等
不可變對象有: 數字、字元串、元組、function等
淺拷貝和深拷貝
淺拷貝copy(淺拷貝):不拷貝子對象的内容,隻是拷貝子對象的引用。
深拷貝deepcopy(深拷貝):會連子對象的記憶體也全部拷貝一份,對子對象的修改不會影響源對象
import copy
def testCopy():
’ ’ ’ 測 試 淺 拷 貝 ’ ’ ’
a = [10, 20, [5, 6]]
b = copy.copy(a)
print(“a”, a)
print(“b”, b)
b.append(30)
b[2].append(7)
print(“淺拷貝…”)
print(“a”, a)
print(“b”, b)
def testDeepCopy():
’ ’ ’ 測 試 深 拷 貝 ’ ’ ’
a = [10, 20, [5, 6]]
b = copy.deepcopy(a)
print(“a”, a)
print(“b”, b)
b.append(30)
b[2].append(7)
print(“深拷貝…”)
print(“a”, a)
print(“b”, b)
testCopy()
print("*************")
testDeepCopy()