02_函式定義及使用函式

南極之戀發表於2019-03-29

01,定義函式

上回說到有沒有什麼辦法,把經常用的功能實現,重複使用且只需叫一聲就好

程式碼如下

1 def etc_num():
2     s1 = "wanhaha"
3     s = 0
4     for I in s1:
5         s = s + 1
6     print(s)
View Code

這樣可能看的沒什麼感覺,那就在來一遍,如下

1 def num_ret():
2     s1 = "wanhahah"
3     s = 0
4     for I in s1:
5         s = s+1
6     print(s)
7 num_ret()
定義函式及使用

 

總結:

1,關鍵字def開頭中間空格 後面在加函式名函式名後面在加括號在加封號,(def num_ret():)

切記:定義函式必須使用def開頭,中間加空格加括號,加封號,這是python的規定

2,函式名:只能包含字串,下劃線,函式名隨便起,但是最好使用有意義的名字增加程式碼可讀性

3,呼叫:呼叫函式一定要帶括號。

 

 

 

 

函式的返回值

剛才我們使用函式得到字串的長度,那麼這和len()方法還是不太一樣,我們使用len()都會得到一個值,我們用一個變數來接收這個值

str_len = len("wanhahha")

這個str_len()變數名得到了字串的長度,那麼函式可以做到嗎,我們大膽試試!

1 def num_ret():
2     s1 = "wanhahah"
3     s = 0
4     for I in s1:
5         s = s+1
6     print(s)
7 func = num_ret()
8 print(func)
View Code

 執行了這段程式碼,事實證明不行,它給我返回一個Non,那怎麼才能得到我們想要的返回值哪

1 # 定義函式
2 def func():
3     s1 = "wanhahah"
4     s = 0
5     for I in s1:
6         s = s+1
7     return s
8 ret = func()
9 print(ret)
View Code

 在這段程式碼裡面有一個新的內建函式,就是return,他到底是什麼,能幹什麼,沒有它可以嗎,

下面繼續,go,go,go

return關鍵字

這個關鍵字非常重要,return翻譯中文的意思是(返回),那麼返回有幾種情況那

1,一個返回值,2,沒返回值,3,多個返回值

(1),一個返回值:就是我們剛剛第一次用return的那一串程式碼,就是一個返回值

(2),沒返回值:就不用寫return,那有人就有疑問了,那一定寫return是不是就肯定有返回值,那我們上程式碼說答案

1 def fucn():
2     print("沒有返回值哈哈哈")
3     return 
4     print("真的沒有哦")
5 ret = fucn()
6 print(ret)
寫return沒返回值

這幾行程式碼,要說一下return下面的print()沒有執行,這個是return的另一種用法,程式一旦遇到rreturn,就結束整個函式

(3)多個返回值:

1 def re_l():
2     return 1,2,3,4
3 def re_c():
4     return 1,2,'c',['s','e']
5 demo = re_l()
6 print(demo)
7 demo_ret = re_c()
8 print(demo)
View Code

返回多個值會被組織成元組被返回,也可以用多個值來接收

1 def fu():
2     return 1,2,3,4
3 # 多個值用一個變數來接收
4 ret1 = fu()
5 print()
6 
7 # 多個值,用多個變數來接收
8 a,c,v,b = fu()
9 print(fu())
View Code

為什麼會這樣那??,答:用逗號隔開,python會認為這是一個元組

 1 # 事例1
 2 >>> a,b,c,d = [1,2,3,4]
 3 >>> a
 4 1
 5 >>> b
 6 2
 7 >>> c
 8 3
 9 >>> d
10 4
11 >>> 
12 
13 # 事例2
14 >>> a,_,c,_ = [1,2,3,4]
15 >>> a
16 1
17 >>> c
18 3
19 
20 # 事例3:也適用於字串,列表,字典,集合
21 >>> a,b = {'name':'eva','age':18}
22 >>> a
23 'name'
24 >>> b
25 'age'
26 >>> 
多變數接收多值

 

 

函式中的引數

現在我們已經完成一個可以返回字串長度的函式,假如(又來了哈哈哈),我們換一個字串怎麼辦,這樣的話我們的函式還是不完美

1 # 定義函式
2 def fucn(s1):
3     '''計算s1的長度'''
4     length = 0
5     for i in s1:
6         length = length + 1
7     return length
8 ret = fucn('hello world')
9 print('ret %s'%ret)
帶引數的函式

這個時候的函式fucn(s1),就是我們要告訴它要計算誰,這個過程就叫傳遞引數,簡稱傳參,函式裡的s1和hello world就是引數

我們經常聽別人說實參和形參,這兩個到底有什麼區別??

實參和形參

其實最好理解的也很正確的就是我們傳的“hello world”,被稱為實際引數,因為這個實際的引數要交給函式的內容,簡稱實參

所謂s1就是一個形參,因為這個s1只是一個變數的名字,被稱為形式引數,主要因為定義函式的時候它只是一個形式而已,簡稱形參

注意:引數可以傳多個 ,用逗號隔開

1 def func(x,y):
2     the_max = x if x > y else y
3     return the_max
4 ret = func(30,20)
5 print(ret)
傳多個引數

 引數小班車馬上出發,Are you ready?

 

 

位置傳參

         1,按照位置傳值

1 def func(x,y):
2     # 此時x是100,y 是20
3     tme_ret = x if x > y else y
4     return tme_ret
5 ret = func(100,20)
6 print(ret)
View Code

         2,關鍵字傳值

1 def func(x,y):
2     tem_ret = x if x > y else y
3     return tem_ret
4 ret = func(x = 100,y = 200)
5 print(ret)
View Code

         3,合起來用 

1 def fucn(x,y):
2     print(x,y)
3     tme_ret = x if x > y else y
4     return tme_ret
5 ret = fucn(10,y = 30)
6 print(ret)
View Code

       正確用法

    問題一:位置引數必須在關鍵字引數的前面

    問題二:對於一個形參只能賦值一次

注意:位置引數必須傳值

def fucn(x,y):
      tme_ret = x if x > y else y
      return the_ret
ret = fucn()
print(ret)


# 報錯:TypeError: fucn() missing 2 required positional arguments: 'x' and 'y'

 

預設引數的定義及使用:

1 def stu(name,sex = 'wede'):
2     '''這裡sex的預設引數是sex值是wede'''
3     print(name,sex)
4 
5 stu('xiaohui')
6 stu('xiaobai')
View Code

 

預設引數的陷阱

1 def deul(a,l = []):
2     l.append(a)
3     print(l)
4 
5 deul('wede')
6 deul('xiaobai')
預設引數的陷阱

 

 

動態引數

  按位置傳值多餘的引數都由args統一接收,儲存成一個元組的形式

1 def mysum(*args):
2     the_sum = 0
3     for i in args:
4         the_sum+=i
5     return the_sum
6 
7 the_sum = mysum(1,2,3,4)
8 print(the_sum)
*args求和函式應用
1 def stu(**kwargs):
2     print(kwargs)
3     print(kwargs['name'],kwargs['sex'])
4 stu(name = 'wede',sex = 'male')
**kwargs應用

 

 

 

初識函式小結:

定義函式:

 1.定義:def 關鍵詞開頭,空格之後接函式名稱和圓括號()。

2.引數:圓括號用來接收引數。若傳入多個引數,引數之間用逗號分割。
    引數可以定義多個,也可以不定義。
    引數有很多種,如果涉及到多種引數的定義,應始終遵循位置引數、*args、預設引數、**kwargs順序定義。
    如上述定義過程中某引數型別預設,其他引數依舊遵循上述排序 3.註釋:函式的第一行語句應該新增註釋。 4.函式體:函式內容以冒號起始,並且縮排。 5.返回值:return [表示式] 結束函式。不帶表示式的return相當於返回 None def 函式名(引數1,引數2,*args,預設引數,**kwargs): """註釋:函式功能和引數說明""" 函式體 …… return 返回值

呼叫函式:
1.函式名()
    函式名後面+圓括號就是函式的呼叫。
2.引數:
    圓括號用來接收引數。
    若傳入多個引數:
        應按先位置傳值,再按關鍵字傳值
        具體的傳入順序應按照函式定義的引數情況而定
3.返回值
    如果函式有返回值,還應該定義“變數”接收返回值
    如果返回值有多個,也可以用多個變數來接收,變數數應和返回值數目一致

無返回值的情況:
函式名()

有返回值的情況:
變數 = 函式名()

多個變數接收多返回值:
變數1,變數2,... = 函式名()

引數總結:

 

相關文章