目錄
?編輯
8.5 傳遞任意數量的實參
pizza.py
8.5.1 結合使用位置實參和任意數量實參
8.5.2 使用任意數量的關鍵字實參
user_profile.py
8.6 將函數存儲在模塊中
8.6.1 導入整個模塊
pizza.py
making_pizzas.py
8.6.2 導入特定的函數
8.6.3 使用 as 給函數指定別名
關于“Python”的核心知識點整理大全12-CSDN博客
往期快速傳送門??(在文章最后):
感謝大家的支持!歡迎訂閱收藏!專欄將持續(xù)更新!
8.5 傳遞任意數量的實參
有時候,你預先不知道函數需要接受多少個實參,好在Python允許函數從調用語句中收集任 意數量的實參。
例如,來看一個制作比薩的函數,它需要接受很多配料,但你無法預先確定顧客要多少種配 料。下面的函數只有一個形參*toppings,但不管調用語句提供了多少實參,這個形參都將它們 統(tǒng)統(tǒng)收入囊中:
pizza.py
def make_pizza(*toppings):
"""打印顧客點的所有配料"""
print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
形參名*toppings中的星號讓Python創(chuàng)建一個名為toppings的空元組,并將收到的所有值都封 裝到這個元組中。函數體內的print語句通過生成輸出來證明Python能夠處理使用一個值調用函 數的情形,也能處理使用三個值來調用函數的情形。它以類似的方式處理不同的調用,注意, Python將實參封裝到一個元組中,即便函數只收到一個值也如此:
('pepperoni',)
('mushrooms', 'green peppers', 'extra cheese')
現(xiàn)在,我們可以將這條print語句替換為一個循環(huán),對配料列表進行遍歷,并對顧客點的比 薩進行描述:
def make_pizza(*toppings):
"""概述要制作的比薩"""
print("\nMaking a pizza with the following toppings:")
for topping in toppings:
print("- " + topping)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
不管收到的是一個值還是三個值,這個函數都能妥善地處理:
Making a pizza with the following toppings:
- pepperoni
Making a pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
不管函數收到的實參是多少個,這種語法都管用。
8.5.1 結合使用位置實參和任意數量實參
如果要讓函數接受不同類型的實參,必須在函數定義中將接納任意數量實參的形參放在最 后。Python先匹配位置實參和關鍵字實參,再將余下的實參都收集到最后一個形參中。
例如,如果前面的函數還需要一個表示比薩尺寸的實參,必須將該形參放在形參*toppings 的前面:
def make_pizza(size, *toppings):
"""概述要制作的比薩"""
print("\nMaking a " + str(size) +
"-inch pizza with the following toppings:")
for topping in toppings:
print("- " + topping)
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
基于上述函數定義,Python將收到的第一個值存儲在形參size中,并將其他的所有值都存儲 在元組toppings中。在函數調用中,首先指定表示比薩尺寸的實參,然后根據需要指定任意數量 的配料。
現(xiàn)在,每個比薩都有了尺寸和一系列配料,這些信息按正確的順序打印出來了——首先是尺 寸,然后是配料:
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
8.5.2 使用任意數量的關鍵字實參
有時候,需要接受任意數量的實參,但預先不知道傳遞給函數的會是什么樣的信息。在這種 情況下,可將函數編寫成能夠接受任意數量的鍵—值對——調用語句提供了多少就接受多少。一 個這樣的示例是創(chuàng)建用戶簡介:你知道你將收到有關用戶的信息,但不確定會是什么樣的信息。 在下面的示例中,函數build_profile()接受名和姓,同時還接受任意數量的關鍵字實參:
user_profile.py
def build_profile(first, last, **user_info):
"""創(chuàng)建一個字典,其中包含我們知道的有關用戶的一切"""
profile = {}
1 profile['first_name'] = first
profile['last_name'] = last
2 for key, value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)
函數build_profile()的定義要求提供名和姓,同時允許用戶根據需要提供任意數量的名稱— 值對。形參**user_info中的兩個星號讓Python創(chuàng)建一個名為user_info的空字典,并將收到的所 有名稱—值對都封裝到這個字典中。在這個函數中,可以像訪問其他字典那樣訪問user_info中的 名稱—值對。
在build_profile()的函數體內,我們創(chuàng)建了一個名為profile的空字典,用于存儲用戶簡介。 在1 處,我們將名和姓加入到這個字典中,因為我們總是會從用戶那里收到這兩項信息。在2處, 我們遍歷字典user_info中的鍵—值對,并將每個鍵—值對都加入到字典profile中。最后,我們將 字典profile返回給函數調用行。 我們調用build_profile(),向它傳遞名('albert')、姓('einstein')和兩個鍵—值對 (location='princeton'和field='physics'),并將返回的profile存儲在變量user_profile中,再 打印這個變量:
{'first_name': 'albert', 'last_name': 'einstein',
'location': 'princeton', 'field': 'physics'}
在這里,返回的字典包含用戶的名和姓,還有求學的地方和所學專業(yè)。調用這個函數時,不 管額外提供了多少個鍵—值對,它都能正確地處理。
編寫函數時,你可以以各種方式混合使用位置實參、關鍵字實參和任意數量的實參。知道這 些實參類型大有裨益,因為閱讀別人編寫的代碼時經常會見到它們。要正確地使用這些類型的實 參并知道它們的使用時機,需要經過一定的練習。就目前而言,牢記使用最簡單的方法來完成任 務就好了。你繼續(xù)往下閱讀,就會知道在各種情況下哪種方法的效率是最高的。
8.6 將函數存儲在模塊中
函數的優(yōu)點之一是,使用它們可將代碼塊與主程序分離。通過給函數指定描述性名稱,可讓 主程序容易理解得多。你還可以更進一步,將函數存儲在被稱為模塊的獨立文件中,再將模塊導 入到主程序中。import語句允許在當前運行的程序文件中使用模塊中的代碼。
通過將函數存儲在獨立的文件中,可隱藏程序代碼的細節(jié),將重點放在程序的高層邏輯上。 這還能讓你在眾多不同的程序中重用函數。將函數存儲在獨立文件中后,可與其他程序員共享這 些文件而不是整個程序。知道如何導入函數還能讓你使用其他程序員編寫的函數庫。 導入模塊的方法有多種,下面對每種都作簡要的介紹。
8.6.1 導入整個模塊
要讓函數是可導入的,得先創(chuàng)建模塊。模塊是擴展名為.py的文件,包含要導入到程序中的 代碼。下面來創(chuàng)建一個包含函數make_pizza()的模塊。為此,我們將文件pizza.py中除函數 make_pizza()之外的其他代碼都刪除:
pizza.py
def make_pizza(size, *toppings):
"""概述要制作的比薩"""
print("\nMaking a " + str(size) +
"-inch pizza with the following toppings:")
for topping in toppings:
print("- " + topping)
接下來,我們在pizza.py所在的目錄中創(chuàng)建另一個名為making_pizzas.py的文件,這個文件導 入剛創(chuàng)建的模塊,再調用make_pizza()兩次:
making_pizzas.py
import pizza
1 pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
Python讀取這個文件時,代碼行import pizza讓Python打開文件pizza.py,并將其中的所有函 數都復制到這個程序中。你看不到復制的代碼,因為這個程序運行時,Python在幕后復制這些代 碼。你只需知道,在making_pizzas.py中,可以使用pizza.py中定義的所有函數。
要調用被導入的模塊中的函數,可指定導入的模塊的名稱pizza和函數名make_pizza(),并用 句點分隔它們(見?)。這些代碼的輸出與沒有導入模塊的原始程序相同:
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
這就是一種導入方法:只需編寫一條import語句并在其中指定模塊名,就可在程序中使用該 模塊中的所有函數。如果你使用這種import語句導入了名為module_name.py的整個模塊,就可使 用下面的語法來使用其中任何一個函數:
module_name.function_name()
8.6.2 導入特定的函數
你還可以導入模塊中的特定函數,這種導入方法的語法如下:
from module_name import function_name
通過用逗號分隔函數名,可根據需要從模塊中導入任意數量的函數:
from module_name import function_0, function_1, function_2
對于前面的making_pizzas.py示例,如果只想導入要使用的函數,代碼將類似于下面這樣:
from pizza import make_pizza
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
若使用這種語法,調用函數時就無需使用句點。由于我們在import語句中顯式地導入了函數 make_pizza(),因此調用它時只需指定其名稱。
8.6.3 使用 as 給函數指定別名
如果要導入的函數的名稱可能與程序中現(xiàn)有的名稱沖突,或者函數的名稱太長,可指定簡短 而獨一無二的別名——函數的另一個名稱,類似于外號。要給函數指定這種特殊外號,需要在導 入它時這樣做。 下面給函數make_pizza()指定了別名mp()。這是在import語句中使用make_pizza as mp實現(xiàn)的, 關鍵字as將函數重命名為你提供的別名:文章來源:http://www.zghlxwxcb.cn/news/detail-759137.html
from pizza import make_pizza as mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')
上面的import語句將函數make_pizza()重命名為mp();在這個程序中,每當需要調用 make_pizza()時,都可簡寫成mp(),而Python將運行make_pizza()中的代碼,這可避免與這個程序 可能包含的函數make_pizza()混淆。 指定別名的通用語法如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-759137.html
from module_name import function_name as fn
關于“Python”的核心知識點整理大全12-CSDN博客
往期快速傳送門??(在文章最后):
感謝大家的支持!歡迎訂閱收藏!專欄將持續(xù)更新!
到了這里,關于關于“Python”的核心知識點整理大全18的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!