有時候我們不知道函式預先需要接收多少個引數,這時候我可以使用一個星號來建立空多元組,或兩個星號建立空字典,我們就先直接來看範例吧 !
範例如下 :
def get_name(*names): # *names參數中的星號會讓python建立一個名字為names的空多元組
for name in names:
print("hello,"+name)
get_name("bonny","steven")
get_name("jack")
get_name("rose","john","jane")
輸出結果 :
hello,bonny
hello,steven
hello,jack
hello,rose
hello,john
hello,jane
如果上述的程式碼沒有for迴圈那行,那麼程式碼就會出錯,因為for迴圈的工作是把多元組裡的值一一輸出出來,所以如果沒有for迴圈那行而直接印出的話,是印出多元組而不是印出接收到的字串值,多元組是不能跟字串相加的,所以它會跑出下列這種錯誤
TypeError: can only concatenate str (not "tuple") to str
範例如下 :
def users(first_name,last_name,**user_info): # **user_info參數中的星號會讓python建立一個名字為user_info的空字典
user={}
user["first"]=first_name # 將first_name新增至user字典
user["last"]=last_name # 將last_name新增至user字典
for key,value in user_info.items(): # 用迴圈遍訪user_info裡的鍵值對並將其新增至user字典
user[key]=value
return user
user1=users("bonny","chang",city="taipei")
print(user1)
user2=users("steven","chang",city="taoyuan")
print(user2)
輸出結果 :
{'first': 'bonny', 'last': 'chang', 'city': 'taipei'}
{'first': 'steven', 'last': 'chang', 'city': 'taoyuan'}
函式的優點是他們可以跟主程式分開放置,所以將函式儲存在一個獨立的檔案中,這個檔案就稱為模組
import name會讓python在執行這行指令時開啟name.py檔,並將其都複製到get_name.py檔中,這樣get_name.py檔才可以用get_name函式,呼叫函式的用法是給定模組名稱和函式名稱,中間以句號(.)分隔連接就可以了!
↓ name.py檔
def get_name(*names):
for name in names:
print("hello,"+name)
↓ get_name.py檔
import name
name.get_name("bonny")
name.get_name("jack","rose")
輸出結果 :
hello,bonny
hello,jack
hello,rose
使用as其實只是為模組取一個叫短的別名,方便我們使用
↓ name.py檔
def get_name(*names):
for name in names:
print("hello,"+name)
↓ get_name.py檔
import name as n
n.get_name("bonny")
n.get_name("jack","rose")
輸出結果 :
hello,bonny
hello,jack
hello,rose
假如name.py檔裡有兩個函式,但我們只需要get_name函式時,我們就要匯入特定函式,如果想要匯入多個函式,可以用逗號分隔,呼叫的方式不用再寫出模組名稱,只需要給定函式名稱就好
↓ name.py檔
def get_name(*names):
for name in names:
print("hello,"+name)
def get_city(*cities):
for city in cities:
print(city)
↓ get_name.py檔
from name import get_name
get_name("bonny")
get_name("jack","rose")
輸出結果 :
hello,bonny
hello,jack
hello,rose
↓ name.py檔
def get_name(*names):
for name in names:
print("hello,"+name)
def get_city(*cities):
for city in cities:
print(city)
↓ get_name.py檔
from name import get_name as gn
gn("bonny")
gn("jack","rose")
輸出結果 :
hello,bonny
hello,jack
hello,rose
用星號( * )運算子可以讓python匯入模組中所有的函式
↓ name.py檔
def get_name(*names):
for name in names:
print("hello,"+name)
def get_city(*cities):
for city in cities:
print(city)
↓ get_name.py檔
from name import *
get_name("bonny")
get_city("taipei")
輸出結果 :
hello,bonny
taipei
附上排版較精美的
HackMD 網址 : https://hackmd.io/Qm4ZmEm-Ta2dsCFDLCYUrw
資料來源:<<python程式設計的樂趣>>-Eric Matthes著/H&C譯