函數(shù)

一敌呈、定義函數(shù)

使用關(guān)鍵字def定義函數(shù)。

def get_name():
  """打印名字"""
  print("Hello")

get_name()

get_name為函數(shù)名脯倒,在get_name( ):后面的所有縮進(jìn)行構(gòu)成了函數(shù)體金踪。而在上面代碼中的第二行的文本是被稱為文檔字符串的注釋,描述了函數(shù)使用來做什么的惜姐。

1. 向函數(shù)傳遞信息

可以在函數(shù)定義def get_name( )的括號內(nèi)添加username犁跪,通過這里添加username,就可以讓函數(shù)接受給函數(shù)指定的值歹袁。

def get_name(username):
  """打印名字"""
  print(username)

get_name('jie')

2. 實參和形參

在函數(shù)中坷衍,定義函數(shù)時的參數(shù)為形參,調(diào)用函數(shù)的時候傳遞的參數(shù)為實參条舔。如get_username的代碼中枫耳,username為形參,而'jie'為實參孟抗。

二迁杨、傳遞實參

向函數(shù)傳遞實參的方式有很多種,可使用位置實參凄硼,這要求形參的順序和實參的順序相同铅协;也可以使用關(guān)鍵字實參,其中每個實參都由變量名和值組成摊沉;還可使用列表和字典狐史。

1. 位置實參

def get_name(first, last):
  """打印姓名"""
  firstname = first
  lastname = last
  print(firstname + " " + lastname)
 
get_name("bill", "su")

位置實參的順序很重要,如果位置實參的順序到了,在函數(shù)中的形參的值也會顛倒骏全。

2. 默認(rèn)值

在編寫函數(shù)的時候苍柏,可以給每一個形參一個默認(rèn)值。在調(diào)用函數(shù)時姜贡,如果給形參提供了實參试吁,則將使用指定的實參值,否則楼咳,就使用形參的默認(rèn)值潘悼。

def get_name(username = 'Tom'):
  """打印名字"""
  print(username)

get_name()

三、返回值

函數(shù)可以處理一些數(shù)據(jù)爬橡,并返回一個或一組值。函數(shù)返回的值被稱為返回值棒动。在函數(shù)中糙申,可使用==return==語句將值返回到調(diào)用函數(shù)的代碼行

1. 返回簡單值

def get_name(first, last):
  """打印名字"""
  firstname = first
  lastname = last
  full_name = firstname + " " + lastname
  return full_name

full_name = get_name('bill', 'su')
print(full_name)

2. 讓實參變成可選的

有時候,需要讓實參變成可選的船惨,這樣使用函數(shù)的人就只需要在必要時才提供額外的信息柜裸。可使用默認(rèn)值來讓實參變成可選的粱锐。

def get_name(first, last = ''):
  if last:
    print(first + last)
  else:
    print(first)
    
get_name('bill')

3. 返回字典

函數(shù)可返回任何類型的值疙挺,包括列表和字典等較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

def get_name(first, last):
  person = {'first': first, 'last': last}
  return person

musician = get_name('jim', 'hen')
print(musician)

四怜浅、傳遞列表

函數(shù)可以傳遞列表铐然,這種列表可以包含的可能是名字、數(shù)字或更復(fù)雜的對象(如字典)恶座。將列表傳遞給函數(shù)后搀暑,函數(shù)就能直接訪問其內(nèi)容。

def greet_name(names):
  for name in names:
    msg = "Hello" + " " + name.title() + "!"
    print(msg)
    
user_names = ['han', 'ty', 'jim']
greet_name(user_names)

1. 在函數(shù)中修改列表

將列表傳遞給函數(shù)后跨琳,函數(shù)就可以對其進(jìn)行修改自点。在函數(shù)中對這個列表所做的任何修改都是永久性的。

def del_name(names):
  names.pop()
    
names = ['han', 'ty', 'jim']
del_name(names)
print(names)

2. 禁止函數(shù)修改列表

可以向函數(shù)傳遞列表的副本而不是元件脉让,這樣函數(shù)所做的任何修改都只影響副本桂敛。

def del_name(names):
  names.pop()
  print("修改后的列表副本:")
  print(names)
    
names = ['han', 'ty', 'jim']
del_name(names[:])
print("調(diào)用函數(shù)后的列表:")
print(names)

五、傳遞任意數(shù)量的實參

下面的函數(shù)只有一個形參*names溅潜,但不管調(diào)用語句提供了多少實參术唬,這個形參都將它們統(tǒng)統(tǒng)納入囊中。

def names(*names):
  print(names)

names('jim')
names('jim', 'make', 'len')

形參名*names 中的星號讓Python創(chuàng)建一個名為names的空元組滚澜,并將收到的所有值都封裝到這個元組中碴开。函數(shù)體內(nèi)的print語句通過生成輸出來證明Python能夠處理使用一個值調(diào)用函數(shù)的情形,也能處理使用三個值來調(diào)用函數(shù)的情形。

1. 結(jié)合使用位置實參和任意數(shù)量的實參

如果讓函數(shù)接受不同類型的實參潦牛,必須在函數(shù)定義中將接納任意數(shù)量實參的形參放在最后眶掌。Python先匹配位置實參和關(guān)鍵字實參,再將余下的實參收集到最后一個形參中巴碗。

def make_pizza(size, *toppings):
  print("\nmakeing a"+ str(size) + 
        "-inch pizza with the folling topping")
  for topping in toppings:
    print("-"+ topping)
    
make_pizza(16, 'peppersion')
make_pizza(12, 'pepper', 'green peppers')

3. 使用任意數(shù)量的關(guān)鍵字實參

有時候朴爬,需要接受任意數(shù)量的實參,但預(yù)先不知道傳遞給函數(shù)的會是什么樣的信息橡淆。在這種情況下召噩,可將函數(shù)編寫成能夠接受任意數(shù)量的鍵-值對——調(diào)用語句提供了多少就接受多少。

def build_profile(first, last, **user_info):
  profile = {}
  profile['first_name'] = first
  profile['last_name'] = last
  
  for key, value in user_info.items():
    profile[key] = value
    
  return profile

user_profile = build_profile('albert', 'jim',
                             location='princetion',
                             field='physics')
print(user_profile)

形參**user_info中的兩個星號讓Python創(chuàng)建一個名為profile的空字典逸爵,用于存儲用戶簡介具滴。

六、將函數(shù)存儲在模塊中

函數(shù)的優(yōu)點(diǎn)之一是:使用它們可將代碼塊與主程序分離师倔。通過給函數(shù)指定描述性名稱构韵,可讓主程序容易理解的多。還可以更進(jìn)一步趋艘,將函數(shù)文件存儲在被稱為模塊的獨(dú)立文件中疲恢,再將模塊倒入到主程序中。import語句允許在當(dāng)前運(yùn)行的程序文件中使用模塊中的代碼瓷胧。

通過將函數(shù)存儲在獨(dú)立的文件中显拳,可隱藏程序代碼的細(xì)節(jié),將重點(diǎn)放在程序的高層邏輯上搓萧。這能夠在眾多的程序中重用函數(shù)杂数。將函數(shù)存儲在獨(dú)立文件中后,可與其它程序員共享這些文件而不是整個程序瘸洛,

1. 導(dǎo)入整個模塊

要讓函數(shù)是可導(dǎo)入的耍休,得先創(chuàng)建模塊。模塊是擴(kuò)展名為.py的文件货矮,包含要導(dǎo)入到程序中的代碼羊精。

pizza.py
def make_pizza(size, *toppings):
  print("\nmakeing a"+ str(size) + 
        "-inch pizza with the folling topping")
  for topping in toppings:
    print("-"+ topping)
making_pizzas.py
import pizza

pizza.make_pizza(16, 'peppersion')
pizza.make_pizza(12, 'pepper', 'green peppers')

2. 導(dǎo)入特定的函數(shù)

還可以導(dǎo)入模塊中的特定函數(shù):

from pizza import makez_pizza

通過用逗號分隔函數(shù)名,可根據(jù)需要從模塊中導(dǎo)入任意數(shù)量的函數(shù)

from module_name import function_0, function_1, function_2

3. 使用as給函數(shù)指定別名

如果要導(dǎo)入的函數(shù)的名稱可能與程序中現(xiàn)有的名稱沖突囚玫,或者函數(shù)的名稱太長喧锦,可指定簡短二獨(dú)一無二的別名——函數(shù)的另一個名稱,類似于外號抓督。

from pizza import make_pizza as mp
  
mp(16, 'peppersion')
mp(12, 'pepper', 'green peppers')

4. 使用as給模塊指定別名

import pizza as p

p.make_pizza(16, 'peppersion')
p.make_pizza(12, 'pepper', 'green peppers')

5. 導(dǎo)入函數(shù)中的所有函數(shù)

import語句中的星號讓Python將模塊pizza中每個函數(shù)都復(fù)制到這個程序文件中燃少。由于導(dǎo)入了每個函數(shù),可通過名稱來調(diào)用每個函數(shù)與铃在,而無需使用句點(diǎn)表示法阵具。

from pizza import *

make_pizza(16, 'peppersion')
make_pizza(12, 'pepper', 'green peppers')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碍遍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阳液,更是在濱河造成了極大的恐慌怕敬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帘皿,死亡現(xiàn)場離奇詭異东跪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鹰溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門虽填,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曹动,你說我怎么就攤上這事斋日。” “怎么了墓陈?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵恶守,是天一觀的道長。 經(jīng)常有香客問我跛蛋,道長,這世上最難降的妖魔是什么痊硕? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任赊级,我火速辦了婚禮,結(jié)果婚禮上岔绸,老公的妹妹穿的比我還像新娘理逊。我一直安慰自己,他們只是感情好盒揉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布晋被。 她就那樣靜靜地躺著,像睡著了一般刚盈。 火紅的嫁衣襯著肌膚如雪羡洛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天藕漱,我揣著相機(jī)與錄音欲侮,去河邊找鬼。 笑死肋联,一個胖子當(dāng)著我的面吹牛威蕉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播橄仍,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼韧涨,長吁一口氣:“原來是場噩夢啊……” “哼牍戚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虑粥,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤如孝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舀奶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暑竟,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年育勺,在試婚紗的時候發(fā)現(xiàn)自己被綠了但荤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖右犹,靈堂內(nèi)的尸體忽然破棺而出同眯,到底是詐尸還是另有隱情,我是刑警寧澤纺非,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站赘方,受9級特大地震影響烧颖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窄陡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一炕淮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跳夭,春花似錦涂圆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颈抚,卻和暖如春踩衩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贩汉。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工九妈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雾鬼。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓萌朱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親策菜。 傳聞我的和親對象是個殘疾皇子晶疼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348