第十三課人生苦短我用Python語法簡單才會越來越被編程界歡迎

2021-01-08 天天讀史

初始函數

1.1 函數的作用

;1.2函數的組成

1.3定義和調用函數

函數的進階使用

2.1函數類型

2.2返回多個值

多函數協作

3.1變量作用域

3.2函數嵌

/\e這兩節課的主要內容是帶大家探究「熟悉的陌生人」——函數。之所以這麼說,是因為我們之前已經接觸過Python函數,但是對它沒有系統地了解過。這節課,我們一起經營KFC,在我們KFC門店裡通過運用函數解決我們的問題。首先在學習具體知識前,我向大家簡要的介紹下函數的作用,知道函數是做什麼用的?

1 函數的作用

人生苦短,我用Python」,正因為Python語法簡單,才會越來越被編程界歡迎。換言之,我們編程,更應該避免重複性代碼。前面學習的循環是減少代碼重複的一種手段,那麼接下來要學習的函數也是減少重複性代碼的另一種手段。它的定義是:

什麼意思呢?我們之前寫的代碼只能執行一次,但是函數中的代碼可以使用多次。通俗來講,函數就如同一個包裹,每個包裹都有一個功能,無論你在哪兒,只要你需要包裹,就把它拿過去用;你需要什麼樣功能的包裹,就用什麼樣的包裹;你需要使用多少次包裹,就使用多少次。這就是函數,在之後的旅程中,你會越來越體會到函數的妙用。講了這麼多了,先看一下函數長什麼樣子?

1.2函數的組成

先不著急看Python的函數,先來個數學函數,那些年,我們錯過的函數。數學函數y = 6*x +9 , x是自變量,6*x+9是執行過程,y是因變量,自變量x決定了因變量y得值。那麼,你可以將y = 6*x +9看作成3部分

在Python中,我們遇到很多函數, 有負責輸入數據的函數,有負責數據處理的函數,有負責數據輸出的函數。

以上就是我們見過的Python的函數,這些函數是Python自帶的函數,我們不需要管這些函數怎麼來的,就負責用就好了,這些函數也叫內置函數。你會發現,上面這些函數,都有括號(), 裡面存放我們需要傳給函數的數據,在Python江湖中,這種數據稱為【函數的參數】。【參數】指的是函數要接受、處理的數據,其實就是一個變量。

好了,我們看過了函數的樣子。但是問題來了,這些函數很好,如果用不到他們怎麼辦。就像我們KFC餐廳裡,顧客不想吃漢堡怎麼辦?我們可以給他們做滷肉飯啊,同樣,我們也可以根據自己的需要,定義自己想要的函數。大家進入本節課重點:定義和調用函數。編寫函數第一步,我們先來看一下如何定義一個函數,它的基本語法是什麼。

+3定義和調用函數

函數三部分,第一部分輸入,在y = 6*x+9函數中,因為x變,y才改變,x就是輸入到函數的數據,就是這個函數的參數;第二部分,執行過程,執行過程就是計算y的結果,即6*x+9的結果;還有第三部分,輸出結果,計算完這個結果後要把這個結果告訴別人。因此,這個函數可以寫成下面這個樣子。

拆分解讀:第一行:def的全稱是define, 譯為定義;fun是函數名字,自己起的;(x)這裡是函數的參數,參數名字也是自己起;不要忘了最後的冒號:

江湖秘籍:涉及到的符號都是英文的哦。第二行:def下一行縮進的內容叫做函數體,這是函數要實現的功能。即根據x的值,計算6*x+9,將結果賦值給y。第三行:return 語句是返回的意思,可以指定函數執行完畢後最終會得到什麼樣的結果,否則計算機是無法判斷出函數最終要輸出什麼結果的。定義函數是不是很簡單?但是裡面還有很多注意事項,不要踩坑。

#函數名:1.名字能體現函數的功能,一般用小寫英文字母和數字、英文下劃線組合使用

現在,你根據上面的例子,完成函數y=30+11*x,請在下面代碼框中編寫,點擊運行。

你會發現,終端內沒有任何內容。沒有內容就對了,現在只是定義了函數,還沒有使用函數。定義函數,就是將函數內部功能封裝好,然後等待調用。就如同包裹一樣,你現在只是裝好了包裹,但是還沒有使用。怎麼使用函數呢?在Python江湖中,我們使用函數叫做「調用函數」,很簡單就是輸入函數名與參數所對應的數據。運行一下下面代碼,觀察終端裡的效果。

解讀分析:math(10)就是調用函數,math為定義函數的名字(定義與調用時名字一致);傳遞參數,10對應函數參數x, 在調用函數時,將10傳遞給x; 在函數體中,y = 30 +11*10, 得出y的結果為140; 那麼,res就用來接收y的值,即res=140。所以,列印出來的結果就是140。OK,現在掌握調用函數了吧。

現在你看到就是函數最基本的形式,目的就是讓大家先有個認知。

接下來,我們做個練習鞏固一下。

請聽題:定義一個函數,用戶傳入「XXX」,就列印出「您好,歡迎來到KFC餐廳,您的點餐為XXX」。這個XXX, 可以傳入漢堡、薯條,任何內容。提示:使用input,接收用戶輸入內容,然後調用函數,完成功能。來,試一下:

上面我們調用函數,設置、傳遞參數是編寫函數的重點。在Python江湖中,函數中無論設置、傳遞多少個參數都可以,哪怕不設置、傳遞參數也行。

先來了解一下函數類型。

們KFC餐廳,需要做一個歡迎廣告語,每位顧客來的時候都要進行播放。那看一下,如何在Python中使用函數實現這個廣告語。運行一下下面代碼, 觀察終端裡的效果。

def helloKFC():

print('雖然我們生而不同')

print('但饞起來是一樣的')

print('每個雞翅都值得被啃個乾淨')

print('我們已經很餓了,你們呢?')

print('十翅一桶39元')

print('重磅回歸,就在今天')

helloKFC()

觀察上面的代碼,這裡定義了一個helloKFC()函數,但是括號裡沒有參數。這是因為,我們的廣告也不需要接收用戶內容,只需要原樣列印廣告即可,所以不需要傳遞參數。1江湖秘籍:即使沒有參數,在定義函數、調用函數的時候也不能省略括號。2在這個例子中,也不需要return語句,因為裡面的內容直接列印在屏幕上即可, 不要返回值的。3簡言之,函數的執行過程,可以有返回值,也可以沒有返回值。好了,接下來,我們看看函數可以設置多少個參數。我們KFC餐廳在剛開業的時候,因為其他原因,只能為每位顧客提供漢堡、飲料、小食三種食品。如果寫成函數,這個函數就有3個參數。我使用hamburger、drink、snacks作為漢堡、飲料、小食的參數運行一下下面代碼, 觀察終端裡的效果。編程題

在這裡,我們設置了默認參數snacks='蛋撻',在調用函數的時候,蛋撻也會默認添加到菜單中。當然了,如果有的顧客不想吃蛋撻,他就想吃薯條怎麼辦。那就按顧客的來,顧客是上帝嘛。運行一下下面代碼,觀察終端裡的效果。在調用函數時,參數一一傳遞;在第三次調用函數menu('培根烤雞腿堡','橙汁','薯條')時,『薯條『會替換默認的參數』蛋撻『,將snacks設置為』薯條『。

了解完默認參數, 我們接著往下看。後來,我們的餐廳經營越來越大,食品種類越來越多,但是每個人點餐的種類又不確定,我們又不能限制顧客點餐。這時候就需要使用【不定長參數】。它的格式比較特殊,先運行一下下面代碼,觀察終端裡的效果。

def menu(*food):

return food

order1 = menu('香辣雞腿堡','可樂')

order2 = menu('滷肉飯','老北京雞肉卷','雪碧','可樂')

order3 = menu('烤串','火鍋','培根烤雞腿堡','橙汁','薯條','甜筒')

print(order1)

print(order2)

print(order3)

print(type(order1))

print(type(order2))

print(type(order3))

在調用函數時,參數一一傳遞;在第三次調用函數menu('培根烤雞腿堡','橙汁','薯條')時,『薯條『會替換默認的參數』蛋撻『,將snacks設置為』薯條『。

了解完默認參數, 我們接著往下看。後來,我們的餐廳經營越來越大,食品種類越來越多,但是每個人點餐的種類又不確定,我們又不能限制顧客點餐。這時候就需要使用【不定長參數】它的格式比較特殊,先運行一下下面代碼,觀察終端裡的效果。

代碼解讀:這裡使用一個星號*加上參數名就接收到了所有參數,無論參數寫幾個,都能接收到。而返回值就是參數名。我們將返回的內容列印出來,又列印了一下返回值的類型:< class 'tuple' >Tuple叫做元組,元組的寫法是將所有內容放在小括號中,使用逗號隔開,和列表用法類似。但是又與列表不同,列表中的元素可以更改,而元組中的元素不可以更改。和列表相同的是:元組也是可以遍歷的對象。使用for循環遍歷一下。運行一下下面代碼,觀察終端裡的效果編程題1

foriinfood:

print('點餐內容:'+i)

menu('香辣雞腿堡','可樂')

menu('滷肉飯','老北京雞肉卷','雪碧','可樂')

enu('烤串','火鍋','培根烤雞腿堡','橙汁','薯條','甜筒')

使用for循環,將元組中的內容遍歷出來。一一顯示。

我們研究一下常用的print()函數,翻看了一下Python寶典,其中是這樣介紹print()函數的。代碼片段

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

我們可以看到,print()函數中第一個參數objects帶了*號,是不定長參數——這也就是print()函數可以傳遞任意數量的參數。

現在,你掌握了函數參數的不同形態,以後視具體需要,來設置函數參數。

函數,不僅可以支持多個參數,還可以支持多個返回值。接下來我們就講講如何使用return語句返回多個返回值。回到我們的KFC餐廳,我們要優惠活動,到店顧客,只要買單我們就有美食相送。 具體規則:用戶消費滿69元,我們隨機贈送10元食品一份;用戶消費滿99元,我們隨機贈送10元食品一份外加一個冰激淋。代碼已經寫好了,先運行一下下面代碼,觀察終端裡的效果。

編程題main.py

importrandom

foodten= ['蛋撻','雞翅','薯條']

deforder(money):

ifmoney>99:

a=random.choice(foodten)

returna,'冰激淋'

elif69<money<99:

b=random.choice (foodten)

returnb

else:

return'不好意思,您的消費達不到優惠活動'

print(order(50))

print(order(70))

print(order(130))觀察代碼:代碼片段

importrandom

foodten= ['蛋撻','雞翅','薯條']

deforder(money):

ifmoney>99:

a=random.choice(foodten)

在這裡,有3條return語句,每條語句返回的內容都不一樣,返回的數量也不一樣。這就是返回多個值returna,'冰激淋'

returnb

return'不好意思,您的消費達不到優惠活動'

在開始時候,我們說過,函數封裝了獨立功能,一個程序往往由多個函數來配合實現

當多函數協作運行時,就涉及到函數中一個非常重要的內容—變量作用域。

什麼是變量作用域?說白了,就是地盤問題;比如說,KFC是由哈蘭·山德士老爺爺創立的,所有KFC餐廳都會聽他的,他說下個月所有KFC要供應烤串,這肯定沒問題;但是他如果去要求麥當勞餐廳,估計就沒人理他了;但是如果川普說,所有的KFC與麥當勞餐廳都要賣「蘭州拉麵「,KFC與麥當勞肯定得賣,誰讓他是美國總統呢。

我們把這個問題用代碼寫出來

先運行一下下面代碼,觀察終端裡的效果。(報錯後點擊【跳過本題】)

編程題

main.py

trump='所有餐廳都要賣【蘭州拉麵】'

defKFC():

harland='所有KFC餐廳賣烤串'

print('KFC餐廳:%s'%trump)

print('KFC餐廳:%s'%harland)

defMcDonald():

print('麥當勞餐廳:%s'%trump)

print('麥當勞餐廳:%s'%harland)

KFC()

McDonald()

看代碼感覺很美,運行代碼就會發現報錯嘍。

運行KFC()函數沒有任何問題;運行McDonald()函數就報錯了;

給我們彈出一個bug, 在print('麥當勞餐廳:%s'%harland)這句代碼中,拋出【NameError: name 'harland' is not defined】的錯誤。

這就是變量的作用問題:作用域分為全局作用域和局部作用域。

全局作用域:在所有函數之外賦值的變量,可以在程序任意位置使用(全局作用域),這就是全局變量;比如第一行的trump = '所有餐廳都要賣【蘭州拉麵】';它在KFC()與McDonald()兩個函數中都起作用。

局部作用域:在某個函數內部賦值的變量,只能在當前函數內使用(局部作用域),出了這個函數,它就不起作用了,這就是局部變量;比如harland = '所有KFC餐廳賣烤串';它只在KFC()函數中起作用,在McDonald()就不起作用了。

可是,如果,我非讓KFC的哈蘭·山德士老爺爺說話在麥當勞管用怎麼辦?也就是非要讓harland = '所有KFC餐廳賣烤串',在麥當勞中起作用怎麼辦

有辦法,在harland = '所有KFC餐廳賣烤串'使用global對變量進行修飾,global表示全局意思,它就告訴計算機,這個變量變成了全局變量,它在任何地方都起作用。

globalharland好了global修飾詞就學到這裡。下面,我們看一下最常用的函數嵌套。

3.2函數嵌套

其實,我們都見過函數嵌套,比如:print(len('我愛你'))、print(type(10))

這就是print()函數嵌套了len()函數,print()函數嵌套了type()函數;這樣,代碼會先運行print()括號內的函數,再將這個函數結果放到print()函數中執行,列印出來。

這樣操作,叫做在函數內部調用其他函數,我們自己定義的函數也可以這麼做。

defhello():

print('歡迎光臨KFC')

print('很高興為您服務')

deforder():

print('這裡是下單中心')

hello()

print('請您點餐')

print('以上菜單的菜品都有')

order()

在這裡,我定義了兩個函數,函數hello()與函數order(),在函數order()中調用了函數hello(),這樣函數hello()中的代碼會在函數order()中運行。

這就是函數的嵌套,在一個函數中調用其他函數。

講到這兒,是不是都餓了。那就快去KFC吧,但是不要去KFC點拉麵哦。

下節課帶大家利用函數來解決項目問題。

下節課見。

相關焦點

  • 15課python快遞編程代碼人Python語法簡單才會越來越被編程界歡迎
    明確項目目的分析流程,拆解項目逐步執行,代碼實現3.1 先能用3.2 再改進3.3 精細化節課的項目和上個項目難度差不多,從我們學習完函數之後,我們就可以做出一些有用的程序了。既然我那BOSS朋友要得急,那我們使用「敏捷開發」。 我們來分析一下這個項目。分析流程,拆解項目我們的任務就是做一個「快遞配送調配程序」,雖然這朋友要的比較著急,但是我們也不著急於編程開發,應該先梳理清楚需求,做出的程序功能達到什麼樣的效果。計算器,首先配送站BOSS要輸入信息,然後自動計算出結果。為了搞清楚計算過程,我們得到計算公式。
  • 開課吧:「人生苦短,請用python!」給你這幾大理由!
    「人生苦短,請用python!」Python基礎作為一個學習過程式語言的過來人,如果是自己自學編程,我推薦學Python。雖然在高校中,大部分學校依然還在採用C語言來進行編程基礎教學,但是自學的話Python更加合適。
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    最近娃他爸去幼兒教育店集中地兒瞎晃悠,震驚的發現這年頭六歲娃兒都要學編程了,當時我的表情是這樣的。   話說麼哥在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • 簡明 Python 教程:人生苦短,快用Python
    Python經久不衰、近些年更是大放異彩的原因是因為設計者一直秉持 「優雅」、「明確」、「簡單」 的哲學,用近乎偏執的態度貫穿其中。如果你在Python的編輯器或者命令行中輸入 Import this ,你會看到如下的宣言。
  • 地產大佬潘石屹:人生苦短,我要學Python
    「人生苦短,我學 Python」是眾多和計算機科學有些接觸的同學耳熟能詳的段子,不過最近這一風潮有了蔓延的趨勢。11 月 14 日,著名房地產商、SOHO 中國董事長潘石屹在微博上發表了一段宣言:潘石屹的大名常會出現在很多新聞報導中。
  • Python跳槽薪資報告:人生苦短,Python工程師們還好嗎?
    Python跳槽薪資報告:人生苦短,Python工程師們還好嗎?  「人生苦短,快用python」,這話曾是不少選擇投入Python麾下的「碼農」們的一句調侃和自我標榜。  與敏捷開發、大數據甚至人工智慧風口捆綁在一起的Python,似乎從來不缺熱度。2019年1月TIOBE排行榜顯示,由於全球流行度在過去一年中漲幅最高(3.62%),Python一舉獲得了2018年度程式語言的稱號。
  • Python為什麼這麼火?小孩子適合學習python編程嗎?
    「人生苦短,我選Python」——魯迅程式語言由於學習門檻比較高,一直以來似乎只有程式設計師之間會互相討論,普通人也很難對冰冷的語法和算法什麼的感興趣。但自從Python出現後,程式語言和我們日常生活中的鴻溝被悄悄打破了,越來越多的人開始使用它,甚至開始愛上它。
  • 人生苦短,我用Python
    已發布的Python教程如下Python學習筆記1.7-循環Python爬蟲翻譯程序-爬取有道翻譯 Python求兩數的最大公約數算法Python程序打包為exe可執行文件教程 Python小姐姐表白程序-exe編譯版 小姐姐表白程序-Python版 Python3.7安裝包 Python進階篇-函數 Python中字典的基本操作 python
  • python語法基礎
    很多入門的編程書籍,都會花大量的篇幅來介紹基礎語法,對於毫無編程經驗的新手而言,這樣的書籍無疑是很友好的,但是對於有編程經驗的開發者而言,很多的基礎語法是通用的, 只需花費較少的時間瀏覽下基礎語法,將精力集中在語言獨有的特徵上即可。
  • 風變編程的python課程真的簡單易學,適合小白
    我也是先後購買了多家培訓機構的編程Python課程,踩了多個坑之後,才終於遇到了可以實現兩者兼具的python課程——風變科技Python小課,忍不住分享我的血淚史,也希望後有來者的朋友們可以少走彎路。最開始接觸風變編程,在百度和知乎檢索了一下他的品牌信息和用戶評價,總體口碑和品牌實力都感覺挺棒的,但其實心裡還有點半信半疑。
  • Python遊戲編程
    為了達到這一目的,本課程應用python語言的語法知識帶領學生從無到有的開發遊戲,通過每個遊戲項目逐步應用學到的語法知識,在實際編程中加深體會。在課程設計中儘量站在初學者的角度,降低開發遊戲的難度,從而方便學生理解及掌握遊戲編程的基本原理和實現方法,逐步提高學生對編程的興趣和能力。
  • Python 從零開始--入門篇
    從這篇文章開始我將分享 python 系列,從 ptyhon 的起始發展,到現在的方方面面, 從最基礎的語法開始,大家一起學習
  • Python學習第61課-shell用cat和less打開文件
    【每天幾分鐘,從零入門python編程的世界!】補充:在第60節課的學習中,我們知道保存網頁用這個命令:curl -L -o 要保存的路徑 要下載的網頁的網址①要保存的路徑的文件名可以是任何後綴,比如.txt,點csv等等都可以。
  • Python零基礎入門-03-Python基礎語法
    Python零基礎入門-03-Python基礎語法本節課的知識點:1,python系列教程的學習方法。2,熟悉Python的基礎語法內容。1,python系列課程學習方法由於python屬於腳本語言,如果單純的解釋語法沒有什麼實在的意義,所以我python系列的課程都是以視頻講解為主,至於這裡的文章,是給你複習用的。2. 基礎語法python的基礎語法都將以小例子作為驅動來講解。如果你有其他程式語言的基礎,那麼直接看文章就會很快上手。
  • Python學習第50課-處理錯誤和異常
    【每天幾分鐘,從零入門python編程的世界!】●Python的錯誤種類:①語法錯誤,或稱解析錯誤。如下實例,我們編寫一段代碼:運行結果:運行結果提示第8行有語法錯誤,原來我們在print()前面、True後面少寫一個冒號。
  • python,語法簡單,容易上手,基本上教程看一遍就能用
    回想下matlab,他們的資料庫都是matlab自帶的,之後學習的時候coding語法也有點熟悉。那麼ai呢?他的基本不是語法上的,是mlinference的經驗,你們寫好的ide能幫助你打到自然語言編程。如果學習的時候就好好學習,以後不僅是你自己開源處理,而且很多公司都會求你分析。
  • 為什麼越來越多的人學習Python?
    11月份的TIOBE程式語言排行:Python 「打敗」Java,成第二!大家可能會問:Python不就是一門程式語言嗎?這麼吃香?你不知道現在卻有越來越多的職業在求職時要求會Python,尤其是數據分析!
  • Python 入門哪家強?看看學霸們怎麼說!
    嗯,就是如題的問題,看到現在有的入門級python編程課有:《人人都能懂的編程課(Python)》
  • 00後都開始學python了,而且是國家規定
    全文共 2656 字,閱讀大約需要 7 分鐘在程序猿的世界中,有句廣為流傳的話,叫「人生苦短 這則新聞一發出,迎來了很多質疑聲「C、C++、Java、python這樣的程式語言,放在以前是大學才會接觸的,小學生能懂嗎?」
  • Python學習第141課——Python爬蟲簡介
    【每天幾分鐘,從零入門python編程的世界!】今天我們簡單的了解下網絡爬蟲,網絡爬蟲其實就是一個自動獲取網頁內容的程序。Python的爬蟲需要用到一個第三方的庫requests。requests庫可以在git bash中使用命令pip install requests進行安裝。