如何理解Python函數(Function):
1.函數(Function)是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。
2.函數能提高應用的模塊性,和代碼的重複利用率。
那麼如何定義一個函數呢? 它定義的基本規則如下:
1.函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號()。
2.任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用於定義參數。
3.函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。
4.函數內容以冒號起始,並且縮進。
5.return [表達式] 結束函數,選擇性地返回一個值給調用方。
6.不帶表達式的return相當於返回 None。
例如:
def 函數標識名稱( 參數列表 ):
"函數_文檔字符串,對函數進行說明"
函數體
return [表達式]
寫函數必須調用函數不然沒有太大意義,接下來以一個簡單的自定義函數清晰的體現出函數的調用
ef addOne(x, y): #自定義一個addOne函數
x += 1
y += 1
return x, y #一次返回多個結果
pass
m, n = addOne(1, 2) #定義多個變量接受返回結果
print(m," ", n)
>>>2 3
參數的傳遞:
在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list, dict 等則是可以修改的對象。
不可變數據的傳遞
def sayHello(name, toName): #pythonn 是完全面向對象的
name = "dashu"
print("{0} 對 {1} 說你好".format(name, toName))
pass
name1 = "xiaogege"
toName1 = "xiaojiejie"
sayHello(name1, toName1)
print(name1)
>>>dashu 對 xiaojiejie 說你好
看例子的輸出結果是dashu對小姐姐說你好而不是xiaogege對小姐姐說你好,可以看出傳給不可變數據是無意義的
可變數據的傳遞
def addUser(userList, userName):
userList.append(userName) #只是修改了列表的元素裏的值。
pass
userList1 = ['zhangsan']
addUser(userList1, 'lisi')
print(userList1)
>>>['zhangsan', 'lisi']
我們可以看出把數據傳給可變數據是完全ok的
調用函數時可使用的正式參數類型:
必備參數,默認參數,不定長參數
必備參數:
def sum(x, y):
return x+y
pass
print(sum(1, 2))
>>>3
默認參數:(注意帶默認值的參數必須放在定義)
def sum(x, y = 0):
return x+y
pass
print(sum(1))
print(sum(1, y = 10)) # 以前調用函數時:參數列表的順序時固定的,但是python可以匹配參數名
>>>1
>>>11
不定長參數:
*args:加了星號(*)的變量名會存放所有未命名的變量參數。選擇不多傳參數也可,可變長參數的類型爲元組
def 函數名稱(formal_args, *args ):
"函數_文檔字符串"
函數體
return [表達式]
**kw:加了星號(**)的變量名會存放所有未命名的變量參數。選擇不多傳參數也可,可變長參數的類型爲字典。
def 函數名稱(formal_args, **kw ):
"函數_文檔字符串"
函數體
return [表達式]
這裏小編把他倆放在一起舉一個最簡單的例子
def test(*a, **aa):
print(a, aa)
pass
test(1,2,3,4,5,6, **{'a':1, 'b':2, 'c':3})
>>>(1, 2, 3, 4, 5, 6) {'a': 1, 'b': 2, 'c': 3}
可以看出輸出的結果分別爲元組和字典(不定長參數*args和**kw 在**後面的字母可以自己隨便定義不過國際上習慣寫args和kw)