Python之路---初識函數

Python之路---初識函數

程序員三大美德:

懶惰
因爲一直致力於減少工作的總工作量。

缺乏耐性
因爲一旦讓你去做本該計算機完成的事,你將會怒不可遏。

傲慢
因爲被榮譽感衝暈頭的你會把程序寫得讓誰都挑不出毛病來。

大家好😄, 現在讓我們一起來學習一下函數 🎉

1|1Why-爲什麼要使用函數?

現在我們需要計算一個字符串的長度,我們可以直接使用len()方法:

num = len('hello')

但是如果我們不用len方法,怎麼實現這個需求?其實也不難:

s = 'hello' length = 0 for i in s: length += 1 print(length)

好了,功能實現了,然後又有一個需求(產品經理日常加需求),要計算另一個字符串的長度---“world”。

於是,本着程序員三大美德,😏我們使用最強大的快捷鍵---Ctrl+c , Ctrl+v:

s1 = 'world' length = 0 for i in s1: length += 1 print(length)

這樣確實可以實現需求,但是總感覺不是那麼完美,爲什麼呢?

首先,之前我只需要執行len方法就可以拿到一個字符串的長度,而現在爲了實現相同功能,我們需要把相同的代碼寫很多遍 --- 代碼冗餘

其次,剛剛的代碼不是那麼容易讀懂 ---- 可讀性差

我們就想,要是我們能像使用len一樣使用我們這一大段“計算長度”的代碼就好了。這種感覺有點像給這段代碼起了一個名字,等我們用到的時候直接喊名字就能執行這段代碼就行。

1|2函數定義與調用

現在教大家一個技能,把代碼裝起來:

def mylen(): """計算字符串長度""" s = 'hello' length = 0 for i in s: length += 1 print(length)

來分析下這段代碼:

​ 其實除了def這一行和後面的縮進,其它的和前面的代碼是一樣的。

​ 現在執行以下,你會發現啥也沒發生!

​ 因爲這裏我們只是把代碼裝起來了,還不會往外拿,拿應該怎麼拿出來呢?

mylen()

這就是代碼取出來的過程。

定義函數 def mylen(): """計算字符串長度""" s = 'hello' length = 0 for i in s: length += 1 print(length) # 調用函數 mylen()

總結:

​ 定義:

def關鍵字開頭,空格後接函數名稱和圓括號(),最後還有一個“:”
函數名只能包含字符串、下劃線和數字且不能以數字開頭。雖然函數名可以隨便起,但我們給函數起名字還是要儘量簡短,並能表達函數功能
括號:是必須加的,先別問爲啥要有括號,總之加上括號就對了!
註釋:每一個函數都應該對功能和參數進行相應的說明,應該寫在函數下面第一行。以增強代碼的可讀性。
調用: 就是 函數名() 要記得加上括號

1|3函數返回值

前面我們寫了一個函數,這個函數可以幫助我們計算字符串的長度,並且把結果打印出來。但是,這和我們的len方法還不是太一樣。以前我們調用len方法會得到一個值,我們可以用一個變量來接收這個值。

str_len = len('hello')

那麼我們寫的函數能做到嗎?

定義函數 def mylen(): """計算字符串長度""" s = 'hello' length = 0 for i in s: length += 1 print(length) # 調用函數 str_len = mylen() print('str_len : %s'%str_len)

執行代碼,獲得的輸出結果是str_len值爲None,這說明什麼也沒返回

那麼應該怎麼讓他有返回值呢?

return

定義函數 def mylen(): """計算字符串長度""" s = 'hello' length = 0 for i in s: length += 1 return length # 調用函數 str_len = mylen() print('str_len : %s'%str_len)

只需要在函數最後加上一個return的關鍵字,return後面寫上你要返回的值就可以了

return關鍵字的作用

​ return 是一個關鍵字,在pycharm裏,你會看到它變成藍色了。

​ 這個詞翻譯過來就是“返回”,所以我們管寫在return後面的值叫“返回值”

沒有返回值:
不寫return的情況下,會默認返回一個None
只寫return,後面不寫其他內容,也會返回None,那麼爲啥要寫呢?return的其他用法,就是一旦遇到return,結束整個函數。
return None:和上面的兩種情況一樣,我們一般不這樣寫。
返回一個值:
​ 注意:*return和返回值之間要有空格,可以返回任意數據類型的值

返回多個值:
可以返回任意多個、任意數據類型的值

def demo1(): '''返回多個值''' return 1,2,3,4 def demo2(): '''返回多個任意類型的值''' return 1,['a','b'],3,4 ret1 = demo1() print(ret1) ret2 = demo2() print(ret2)

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

def demo3(): return 1,['a','b'],3,4 #返回多個值,用一個變量接收 ret3 = demo3() print(ret2) #返回多個值,用多個變量接收 a,b,c,d = demo3() print(a,b,c,d) #用多個值接收返回值:返回幾個值,就用幾個變量接收 a,b,c,d = demo3() print(a,b,c,d)

1|4函數的參數

這個函數還是不完美,因爲之前我們使用len函數的時候,是可以想計算誰就計算誰的長度,但是我們寫的這個函數只能計算“hello”的長度,換一個字符串就需要更改函數內部的變量,這樣可不行,那應該怎麼辦?

帶參數的函數:

函數定義 def mylen(s): """計算s1的長度""" length = 0 for i in s: length = length + 1 return length #函數調用 str_len = mylen("hello") print('str_len : %s'%str_len)

我們告訴mylen函數要計算的字符串是誰,這個過程叫做傳遞參數,簡稱傳參,調用函數

時傳遞的這個“hello”和定義函數的s就是參數。

實參和形參
我們調用函數時傳遞的這個“hello”被稱爲實際參數,因爲這個是實際的要交給函數的內容,簡稱實參。

定義函數時的s,只是一個變量的名字,被稱爲形式參數,因爲在定義函數的時候它只是一個形式,表示這裏有一個參數,簡稱形參。

傳遞多個參數
參數可以傳遞多個,多個參數之間用逗號分割。

def mymax(x,y): """比較兩個數的大小""" the_max = x if x > y else y return the_max the_max = mymax(9,99) print(the_max)

正是因爲需要傳遞多個參數,所以纔有了下面的參數類型

1.位置參數
按照位置傳值:

def mymax(x,y): """比較兩個數的大小""" the_max = x if x > y else y return the_max the_max = mymax(9,99) print(the_max)

2.關鍵字參數
按照關鍵字傳值:

def mymax(x,y): """比較兩個數的大小""" the_max = x if x > y else y return the_max the_max = mymax(y=99, x=9) print(the_max)

PS:位置、關鍵字形式混着用
def mymax(x,y): """比較兩個數的大小""" the_max = x if x > y else y return the_max the_max = mymax(9, y=99) print(the_max)

正確用法:

位置參數必須在關鍵字參數的前面

  1. 對於一個形參只能賦值一次
  2. 默認參數
    why?😮將變化比較小的值設置成默認參數

def info(name, sex='男'): """打印學生信息""" print(name, sex) info('馬克') info('王富貴', '女')

參數陷阱:默認參數是一個可變數據類型

def func(a, l=[]): l.append(a) print(l) func(1) func(2) func(3)

  1. 動態參數(不定長參數)
    *args:按位置傳值多餘的參數都由args統一接收,保存成一個元組的形式

def mysum(*args): """求和""" the_sum = 0 print(args) # 保存成元組形式 print(type(args)) for i in args: the_sum += i return the_sum sum = mysum(10, 20, 30) print(sum)

**kwargs:按位置傳值多餘的參數都由kwargs統一接收,保存成一個字典的形式

def stu_info(**kwargs): print(kwargs) # 保存成字典 print(kwargs['name']) stu_info(name='不喜歡馬賽克的馬克', sex='男')

1|5⭐️總結

函數:

參數:

EOF

本文作者:Mark
本文鏈接:https://www.cnblogs.com/mark-wq/p/12933407.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章