python基礎——函式一
目錄
一.函式的定義和呼叫:
1.函式的格式:
def 函式名稱()
...函式體...
注意:
函式的名稱是要遵循識別符號命名規則,使用下劃線命名法。
函式體是靠強制縮排來表示的。
:()都是用英文來表示的。
函式只有在呼叫時才會執行,只建立不呼叫是不會執行的。
2.呼叫函式的格式:
函式名()
注意:
必須先建立函式,後呼叫函式。
一般情況下呼叫函式不能和函式體放在一起。
函式可以呼叫多次。
def say_hello(): print('hello') say_hello() say_hello() say_hello()
輸出結果:hello
hello
hello
3.函式的註釋:
在函式體的一行適應多行註釋對函式的功能進行解釋說明
呼叫函式的時候,通過快捷鍵ctrl+Q,可以檢視函式的功能。
註釋用三引號括起來:
4. 帶引數的函式:
-在小括號中寫的變數名就是函式的引數,多個引數之間使用逗號","隔開。
-函式定義幾個引數,呼叫函式是就必須傳遞對應個數的引數。
-定義函式的引數叫做形參--->形式引數
-呼叫函式時候的引數叫做實參-----> 實際引數
二.函式引數的型別:
可變資料型別: list,dic
不可變資料型別: int,str,float
1.傳遞不可變資料型別不會影響引數本身
a =100
print('a的id是:',id(a)) # 檢視
def func(b):
print(b)
print('b的id是:',id(b))
func(a)
輸出結果:a的id是: 493516912
100
b的id是: 493516912
由此可以看是傳遞不可變資料型別,函式本身是不會改變的。
2.傳遞可變引數型別:(會影響引數本身)
輸出結果:
如果修改引數:形參被修改,實參也會跟著改。
輸出結果:
三.函式的返回值及返回多個值:
1.返回值: return是誰呼叫的就把返回值給誰
格式: 函式名(引數1,引數2,...):
...函式體...
return 值
1. 在函式體的最後使用關鍵字return 要返回的值
2. 如果一個函式不寫返回值,預設返回None
3.return有兩個作用:
-可以返回值
-可以結束這個函式,一般return 後面不會再寫其他程式碼了。
1.返回值
def sum_num(aa,bb):
num3 = aa+bb
return num3 # 返回num3
ret = sum_num(1,2) # 定義一個變數ret來接受函式返回的值,拿到返回值後可以做後續的邏輯操作。
print(ret)
輸出結果:3
2.返回None
def sum_num(aa,bb):
num3 = aa+bb
return # 沒有寫返回值
ret = sum_num(1,2)
print(ret)
輸出結果:None
3.return兩個作用
def func(c):
print('func...')
a = 10
b = c
if b < a: # 在函式體內進行條件判斷
return
print('哈哈哈')
print('呵呵呵')
func(1)
輸出結果:func...
--------------------------------------------------------------------
def func(c):
print('func...')
a = 10
b = c
if b < a: # 在函式體內進行條件判斷
return
print('哈哈哈')
print('呵呵呵')
func(11)
輸出結果:func
哈哈哈
呵呵呵
2.返回多個值:
語法:
def 函式名():
...函式體...
Return 值1,值2,...
返回多值其實就是返回一個tuple,在語法上返回一個tuple可以省略括號數
def func():
a = 10
b = 20
return a,b
ret = func()
print(ret)
輸出結果:(10,20)
四.位置引數和關鍵字引數:
1.位置引數:
實參和形參一一對應,按照對應位置傳遞引數,叫位置引數。
def sum_num(num1,num2):
sum = num1+num2
print(sum)
sum_num(12,13) # 12傳遞給num1, 13傳遞給num2,一一對應
輸出結果:25
2.關鍵字引數:
按關鍵字傳遞引數,位置變化不會影響且關鍵字必須是在形參中聲名過才能使用。
輸出結果: 25’
注意:如果位置引數和關鍵字引數混用,必須位置引數在前,關鍵字引數在後。
def sum_num(num1,num2):
sum = num1+num2
print(sum)
sum_num(12,num2=13) # 12 是按照位置引數傳遞給num1, num2=13按照關鍵字引數傳遞。
輸出結果:25
五.預設引數和可變引數:
1.預設引數:
在定義函式的形參的時候,可以給形參賦一個初始值(預設值),這種引數就叫做預設引數,當呼叫函式的時候,
如果不給預設引數賦值,函式就會使用使用預設值,如果給預設引數賦值,函式就會使用重新賦的值。
注意:預設引數一定要寫在形參後面。
def user_info(name,age,gender='男'):
print('姓名:{},年齡:{},性別:{}'.format(name,age,gender))
user_info('張三',20) # 使用預設值 注意一一對應
user_info('王五',30,'女') # 使用賦的值 注意一一對應
輸出結果:姓名:zs,年齡:20,性別:男
姓名:ww,年齡:30,性別:女
2.可變引數:
如果函式中的引數過多,我們定義起來非常的麻煩,呼叫起來也非常的麻煩,因此python給我們提供了可變引數型別。能處理比當初宣告時更多的引數,會將傳入的引數變成元組(*args)或者字典(**kwargs)
元組引數: *args
通過給形參前面新增*使引數變成一個元組,所有傳遞的引數變成元組的元素
注意: args引數名稱可以任意命名,但是一般我們叫他 args。
f func(*args):
print(args)
print(args[0],args[1]) # 獲取元組內前兩個元素。
func(1,2,3,4) # 可以傳遞多個實參
輸出結果:(1,2,3,4)
1,2
* 具有打散功能:
tup = (1,2,3,4)
print(*tup)
lst = ['a','b','c','d']
print(*lst)
s = 'hello'
print(*s)
輸出結果:1 2 3 4
a b c d
h e l l o
字典引數 **kwargs:
通過給形參前面新增**使引數變成一個字典,所有傳遞的引數變成字典的鍵值對,這裡傳參要求鍵等於值的形式。
**kwargs結果型別是字典,傳遞值是以key=value方式傳入
def func(**kwargs):
print(kwargs)
func(name = 'zs',age = 20, gender ='男' ) #{'name': 'zs', 'age': 20, 'gender': '男'}
輸出結果:{'name': 'zs', 'age': 20, 'gender': '男'}
打散字典:
def func(name,age):
print(name,age)
dic={'name':'zs','age':20}
func(**dic)
輸出結果:zs 20
注意:**kwargs必須放在*args後面,否則會報錯。
六.引數順序和函式巢狀:
1.引數順序:
建立函式聲名引數時的順序:
位置引數,*args,預設引數,**kwargs
輸出結果:
2.函式巢狀:
def outter():
print('aaa')
def inner():
print('bbb')
inner()
outter()
輸出結果:aaa
bbb