函數(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ù)時的參數(shù)為形參,調(diào)用函數(shù)的時候傳遞的參數(shù)為實(shí)參。如get_username的代碼中,username為形參,而'jie'為實(shí)參。

二、傳遞實(shí)參

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

1. 位置實(shí)參

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

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

2. 默認(rèn)值

在編寫函數(shù)的時候,可以給每一個形參一個默認(rèn)值。在調(diào)用函數(shù)時,如果給形參提供了實(shí)參,則將使用指定的實(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í)參變成可選的

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

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í)參

下面的函數(shù)只有一個形參*names,但不管調(diào)用語句提供了多少實(shí)參,這個形參都將它們統(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ù)接受不同類型的實(shí)參,必須在函數(shù)定義中將接納任意數(shù)量實(shí)參的形參放在最后。Python先匹配位置實(shí)參和關(guān)鍵字實(shí)參,再將余下的實(shí)參收集到最后一個形參中。

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í)參

有時候,需要接受任意數(shù)量的實(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容