circle后面是什么意思 python_python小课堂16 - 函数篇
前言
函數篇 ------ 說起函數,大家高中應該都學過類似的概念,函數指一個量隨著另一個量的變化而變化,而在編程中,函數的概念則不盡相同。舉個例子,比如打過dota的同學都知道,在dota中通過shift可以對英雄進行預操作,也就是當英雄還沒到某一地方時,我們可以通過shift鍵來設定好相應的路徑以及施法,來完成對英雄的提前操作,這樣起到的作用就是將操作模板化。
而相應的,在程序中,函數就是為了將代碼進行模板化管理,它可以實現一些特定功能的小方法或是小程序。而在python小課堂之前的介紹中,其實就已經介紹過不少python自帶的函數了,比如print()、max()、ord()等。。
定義函數
通常在python中,我們可以類似下面的寫法去定義一個函數:
def print_hello(words): print('hello ' + words) print_hello('world!')>>> hello world!def作為python中的關鍵標識字,全拼define 定義的意思,后面的print_hello作為函數的名稱,小括號里面可以傳入不同的參數,以便外面調用時將參數傳入。想后面的print_hello('world!')就是將'world!' 傳入到print_hello中。
函數的參數
1. 形參和實參
其中print_hello(words): words代表的是函數的形參,形式上的參數。
其中print_hello('world!'): 'world!'代表的是函數的實參,即實際的參數。
2. 必須參數和關鍵字參數
想象一個實際場景,當我們在計算減法算數的時候,需要你手寫一個函數,傳入x,y并且將最終相加的結果打印出來。
def sub(x, y): sub = x - y print(sub)sub(2,1)>>> 1調用add函數時,傳入的1,2稱之為必須參數,也就是實參,傳入時是有順序的,所以我們最終結果得到的是1,但是如果我們把sub(2,1)改成了sub(1,2)最終得到的結果就是-1,有沒有一種方法依然可以得到1呢?此時使用關鍵字參數即可實現。忽略實際參數傳入時的順序,寫法如下:
def sub(x, y): sub = x - y print(sub)sub(y = 1,x = 2)>>> 1可以看到,在傳入實參時,我們可以指定對應的函數形參值,進行傳入對應的值,來達到無序傳入。關鍵字參數在一些源碼中是經常被用到的!
3. 默認參數
場景更新一下!比如現在需要我們求一個半徑默認為1的圓形面積,半徑可以通過外界因素進行改變,請設計出對應的函數。代碼如下:
def circle_area(r = 1): area = 3.14 * r print(area)circle_area()>>> 3.14默認參數就是在形參處寫好一個默認值,若調用時沒有傳入值,則變量會取默認值。再來看下如果傳入值會發生什么?
def circle_area(r = 1): area = 3.14 * r print(area)circle_area(10)>>> 31.400000000000002可以看到外面調用10時,將形參r=1覆蓋掉了,最終算出來的結果以r=10為準。
函數的返回值
函數的返回值:通過return關鍵詞來進行返回,當我們調用函數時,可以將函數的處理結果返回到調用處,來看一個加法的函數例子:
def add(x, y): sum = x + y return sumresult = add(1, 3)print(result)>>> 4如果什么add函數不寫return值呢?來看下結果:
上面的例子可以看到,python函數默認return值為None,而#代表的是注釋,在代碼中起到的作用是解釋當前代碼的意思,是寫給人看的,并不執行。同樣的#只能注釋一行,要想注釋多行可以使用 ''' 你的代碼 ''',""" 你的代碼 """ ,也就是所謂的三雙引號和三單引號。如下:
'''def add(x, y): sum = x + y return sum'''"""result = add(1, 3)print(result)"""return關鍵詞在函數中也代表這停止的意思,也就說在函數中如果遇到return,那么return后面的代碼不會進行執行。如下:
python的序列解包
在python的函數中,返回值是可以有多個值的,比如現在有一個場景,讓你去超市買水果,然后你花錢買到了蘋果和香蕉。我用簡單的函數代碼來演示下:
def buy(money): if money > 10: fruit_a = 'banana' fruit_b = 'apple' return fruit_a, fruit_bfruit = buy(20)print(type(fruit))print(f'通過元組索引得到的值:{fruit[0]}, {fruit[1]}')banana, apple = buy(20)print(f'通過解包得到的值:{banana}, {apple}')>>> >>> 通過元組索引得到的值:banana, apple>>> 通過解包得到的值:banana,apple可以看到,如果我們去超市買水果,身上帶了大于10塊錢的錢,那么我就可以同時買到蘋果和香蕉,同時函數將兩個值一起返回,得到的是元組,在調用時解析時,可以直接對元組進行解包操作,直接定義對應變量的名稱即可!推薦用解包形式去得到函數多個返回值,因為邏輯非常清晰!
你不知道的python小知識點
1.python的系統遞歸參數
現在有一個場景,請你實現打印一句話hello!并且在函數內部調用自己本身。代碼實現如下:
def print_hello(words): print(words) print_hello('hello')print_hello('world!')可以看到報錯了!錯誤中文大概意思是遞歸錯誤,超過最大遞歸深度。最大深度就是屏幕上的993次。
Tips: 遞歸 ---> 遞歸的意思就是函數本身自己調用自己。比如上面的例子中,在print_hello函數中又調用了自己,所以python就會一直執行下去,但是python自身有檢測遞歸函數的機制,所以如果你寫了一個死循環這樣的遞歸,它會直接進行最大次數的嘗試并且報錯。常見的錯誤:在程序中若寫了一個死循環遞歸方法,最終報錯的信息則是:MemoryError: stack overflow,也就是常說的棧內存溢出。
拓展知識:
在上一節中,我曾經說過一個python自帶的包,叫做sys。通過sys可以來設定遞歸函數的最大深度。請看下面的代碼:
import syssys.setrecursionlimit(1000)def print_hello(words): print(words) print_hello('hello')print_hello('world!')2. python的鏈式賦值在python中,是支持鏈式賦值的,什么是鏈式呢?就是類似將元素串起來形成一個鏈子一樣。如下:
a = b = c = 1print(a, b, c)>>> 1 1 13. "序列解包"賦值
道理和上面講過的序列解包差不多:
a, b, c = 1, 2, 3print(a, b, c)>>> 1 2 3至此完!
有想學python的同學,歡迎關注公號:migezatan.(咪哥雜談)
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的circle后面是什么意思 python_python小课堂16 - 函数篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集群资源分配_分析下 Node.js 关
- 下一篇: 主梁弹性模量计算_如何用梁格法计算曲线梁