今天咱們繼續學習新一課,調用函數 def 的用法,咱們先來看例子:
def name():print('xiao xin')name()name()
def 的用法規則就是這樣,小括號不能省,小括號裡可以有內容也可以沒有內容,這裡我們稍候代入例子來講,後面還要接冒號,後面的代碼就是調用的代碼,咱們只用輸入 name(),就可以調用上面的代碼了。
就是像是收納箱一樣,咱們分類了的東西,放入到了一個name()的箱子裡,咱們要用到它時,直接輸入箱子的名字name(),就能找出裡的東西了。
好了,咱們在這個簡單的例子上加一點東西,讓它豐富起來:
def name(you):print(you.title()+' it is time to go home')name('xiao xin')
這裡的you叫作形參,'xiao xin'則為實參,這裡實參替換了形參,列印出了結果,這裡的實參可以換成任意其它的值,也可以無限次的調用。
不知道有沒有把大家繞暈呢?反正我當時學到這裡,我一下子就聯想到了之前學到的input()了,畢竟機器不與人互動,那就太沒意思了,於是我直接修改了一條代碼,就得到了我想要的結果:
def name(you):print(you.title()+' it is time to go home')name(input('you name'))
上圖是代碼和結果,我在這裡提到這個事,是希望大家把之前講過的東西拿出來用用,填鴨式的學習很呆,也會慢慢喪失興趣。
實際上的使用中可能包含多個形參,因此函數調用中也可能包含多個實參。向函數傳遞實參的方式很多,可使用位置實參,這要求實參的順序與形參的順序相同;也可使用關鍵字實參,其中每個實參都由變量名和值組成;還可使用列表和字典。
我們先來看看位置實參:
def parents(left,right):print('on the left is '+left)print('\non the right is '+right)parents('father','mother')
其實就是一一對應,順序不能有錯,中間用逗句隔開,其它的都和開頭一樣,沒有太多難點。
我們再來看看關鍵字實參,用它就不用考慮順序的問題:
def parents(left,right):print('on the left is '+left)print('\non the right is '+right)parents(right='mother',left='father')
有點像賦值的感覺,在關鍵字實參中一定要準確的知道形參名,不然就會報錯了。
如果從最開始就知道其中一個形參對應的實參,我們還可以把它簡化一下:
def parents(left,right='mother'):print('on the left is '+left)print('\non the right is '+right)parents('father')
這裡要注意的是,要按照順序,如果我們把 def parents(left,right='mother')
改成 def parents(right='mother',left) ,運行代碼就會發現出錯,當然我們也可以用關鍵字來進行指定。
調用函數def 也可以和if 結合使用,現在我們的名字中有個字的,也有三個字的,我們利用def 來試著寫一寫:
def name(first_name,last_name,middle_name=''):if middle_name: name = first_name +' '+ middle_name + ' '+last_nameprint(name)else: name = first_name+' '+last_nameprint(name)name('yuan','xin','xiao')name('xiao','xin')
這裡有兩個細節:1.我沒有用到關鍵字實參,所以我把middle_name放在了最後
2.middle_name=' ' 給了它一個字符串
3.middle_name如果不為空,則為True
其它的應該都好理解了,我就不細講了。
下面還有def與while、列表以及字典的一塊用法,我們下節再講。