函數(shù)
自定義函數(shù)
函數(shù)的參數(shù)
函數(shù)的返回值
函數(shù)的作用域
函數(shù)介紹
函數(shù)
函數(shù)介紹 ( 熟悉 )
函數(shù)介紹:
函數(shù)是組織好的胧奔,可重復(fù)使用的,用來實(shí)現(xiàn)單一挑势,或相關(guān)聯(lián)功能的代碼段墅拭。
函數(shù)作用:
提高 應(yīng)用的模塊性 與 代碼的復(fù)用性
自定義函數(shù) ( 掌握 )
定義規(guī)則:
- 函數(shù)代碼塊以 def 關(guān)鍵詞 開頭 ,后接 函數(shù)標(biāo)識(shí)符名稱 和 圓括號(hào)()
- 圓括號(hào)中間 可以 放入?yún)?shù)
- 函數(shù)內(nèi)容以 冒號(hào) 起始股囊,并且 縮進(jìn)袜匿。
注意:
- 函數(shù) 只有在調(diào)用時(shí)才會(huì)執(zhí)行,通過 function_name(param) 進(jìn)行調(diào)用
函數(shù)的參數(shù)
- 形參與實(shí)參
- 可變類型參數(shù)與不可變類型參數(shù)
- 位置參數(shù)
- 關(guān)鍵字參數(shù)
- 默認(rèn)值參數(shù)
- 可變長(zhǎng)度參數(shù)
形參與實(shí)參:
- 形參 就是 函數(shù)定義中的 參數(shù)稚疹,沒有實(shí)際的值居灯,通過別人賦值后才有意義,相當(dāng)于變量内狗。
- 實(shí)參 就是 調(diào)用函數(shù)時(shí)傳入的 參數(shù)怪嫌,是一個(gè)實(shí)際存在的參數(shù)。
def test_one(b): # 函數(shù)定義時(shí)傳入:形參
print(b)
a = 1
test_one(a) # 函數(shù)調(diào)用時(shí)出入:實(shí)參
'''
這整個(gè)過程柳沙,相當(dāng)于
a = 1
b = a
'''
可變類型參數(shù)與不可變類型參數(shù):
- 不可變類型參數(shù)在函數(shù)體內(nèi)對(duì)變量重新賦值岩灭,相當(dāng)于重新開辟了一塊內(nèi)存來保存值
- 可變類型參數(shù)在函數(shù)體內(nèi)***可以改變?cè)械闹?***.
def test_one(a):
# 整數(shù)為不可變對(duì)象
a = 10
print('inner:', a, id(a))
# inner: 10 496030912
a = 1
test_one(a)
print('outer:',a , id(a))
# outer: 1 496030768
def test_one(li):
# 列表時(shí)可變數(shù)據(jù)類型
li.extend([1, 22])
print('inner:', li, id(li))
# inner: [1, 2, 3, 4, 1, 22] 23983968
li = [1, 2, 3, 4]
test_one(li)
print('outer:',li ,id(li))
# outer: [1, 2, 3, 4, 1, 22] 23983968
位置參數(shù):
-
位置參數(shù)也就是實(shí)參與 形參 順序 一一對(duì)應(yīng),而不論變量名
關(guān)鍵字參數(shù): - 以 形參 = 實(shí)參 形式指定赂鲤,不論參數(shù)位置
# 實(shí)現(xiàn)兩個(gè)數(shù)字相加
def sum_nums(num1,num2):
res = num1 + num2
print(f'num1:{num1}')
print(f'num2:{num2}')
print(f'{num1} + {num2} = {res}')
num1 = int(input('請(qǐng)輸入num1:'))
num2 = int(input('請(qǐng)輸入num2:'))
# sum_nums(num1,num2)
# 位置參數(shù):實(shí)參于形參的順序是一一對(duì)應(yīng)噪径。無論變量名。實(shí)參于形參個(gè)數(shù)一致
sum_nums(num1=num1, num2=num2)
# 關(guān)鍵字參數(shù):不受位置影響
默認(rèn)值參數(shù):
-
形參處進(jìn)行賦值数初,所以當(dāng)調(diào)用時(shí)不傳該參數(shù)就默認(rèn)使用形參處的值找爱。當(dāng)調(diào)用時(shí)傳了該參數(shù),則覆蓋
掉默認(rèn)參數(shù)妙真。
# 默認(rèn)值參數(shù)缴允,當(dāng)不傳時(shí),就為形參指定的值珍德。
# 如果在實(shí)參中傳了练般,會(huì)覆蓋掉形參中指定值。
def test_one(a, b=2):
a = a + b
print(a, b)
a = 1
test_one(a, 10) # 11 10
可變長(zhǎng)度參數(shù):
- *args 接收時(shí)會(huì)轉(zhuǎn)為元組數(shù)據(jù)類型
- **kwargs 接收時(shí)會(huì)轉(zhuǎn)為字典數(shù)據(jù)類型
# *age-->可變長(zhǎng)度的參數(shù)锈候,你可以傳也可以不傳薄料,并且長(zhǎng)度不做限制。但是會(huì)給你統(tǒng)一打包為元組泵琳。
def test_one(*args): # 形參
print(args)
test_one('amy', 2, 3, 4, 5, 7) # amy 2 3 4 5 7
# *age-->可變長(zhǎng)度的參數(shù)摄职,你可以傳也可以不傳誊役,并且長(zhǎng)度不做限制。但是會(huì)給你統(tǒng)一打包為元組谷市。
def test_one(*args): # 形參
print(args)
test_one('amy', 2, 3, 4, 5, 7) # ('amy', 2, 3, 4, 5, 7)
# 注意:python3.0以后蛔垢,*args參數(shù)后面只能跟關(guān)鍵字參數(shù)
def test_one(*args, a=1, b): # 形參
print(args)
test_one("amy", 2, 3, 4, 5, 7, a=10, b=20)
# ('amy', 2, 3, 4, 5, 7)
# **kwargs-->可變長(zhǎng)度的參數(shù),你可以傳也可以不傳迫悠,并且長(zhǎng)度不做限制鹏漆。實(shí)參傳需要傳入鍵值對(duì),然后形參將它打包成字典
def test_one(**kwargs):
print(kwargs)
test_one(a=1, b=2, c=3)
# {'a': 1, 'b': 2, 'c': 3}
解包:
- a,b,c = (1,2,3)
# 拆包
# a, b, c = (1, 2, 3)
# print(a,b,c,sep='\n')
# 位置參數(shù) 形參實(shí)參個(gè)數(shù)一致 并且一一對(duì)應(yīng)
def test_one(a, b, c):
print(a, b, c)
tu = (1, 2, 3)
test_one(*tu) # 1 2 3
test_one(1, 2, 3) # 1 2 3