owned this note
owned this note
Published
Linked with GitHub
---
tags : python
---
# DAY 14 函式應用( 2 )
## 傳入任意數量的引數到函式
有時候我們不知道函式預先需要接收多少個引數,這時候我可以使用**一個星號**來建立空多元組,或**兩個星號**建立空字典,我們就先直接來看範例吧 !
* 一個星號(建立空多元組)
範例如下 :
```python=
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")
```
輸出結果 :
```python
hello,bonny
hello,steven
hello,jack
hello,rose
hello,john
hello,jane
```
:bulb: 如果上述的程式碼沒有for迴圈那行,那麼程式碼就會出錯,因為for迴圈的工作是把多元組裡的值一一輸出出來,所以如果沒有for迴圈那行而直接印出的話,是印出多元組而不是印出接收到的字串值,多元組是不能跟字串相加的,所以它會跑出下列這種錯誤
>TypeError: can only concatenate str (not "tuple") to str
* 兩個星號(建立空字典)
範例如下 :
```python=
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)
```
輸出結果 :
```python
{'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檔
```python=
def get_name(*names):
for name in names:
print("hello,"+name)
```
↓ get_name.py檔
```python=
import name
name.get_name("bonny")
name.get_name("jack","rose")
```
輸出結果 :
```python
hello,bonny
hello,jack
hello,rose
```
* ==使用as為模組指定別名==
使用as其實只是為模組取一個叫短的別名,方便我們使用
↓ name.py檔
```python=
def get_name(*names):
for name in names:
print("hello,"+name)
```
↓ get_name.py檔
```python=
import name as n
n.get_name("bonny")
n.get_name("jack","rose")
```
輸出結果 :
```python
hello,bonny
hello,jack
hello,rose
```
* ==匯入特定函式==
假如name.py檔裡有兩個函式,但我們只需要get_name函式時,我們就要匯入特定函式,如果想要匯入多個函式,可以用逗號分隔,呼叫的方式不用再寫出模組名稱,只需要給定函式名稱就好
↓ name.py檔
```python=
def get_name(*names):
for name in names:
print("hello,"+name)
def get_city(*cities):
for city in cities:
print(city)
```
↓ get_name.py檔
```python=
from name import get_name
get_name("bonny")
get_name("jack","rose")
```
輸出結果 :
```python
hello,bonny
hello,jack
hello,rose
```
* ==使用as為函式指定別名==
↓ name.py檔
```python=
def get_name(*names):
for name in names:
print("hello,"+name)
def get_city(*cities):
for city in cities:
print(city)
```
↓ get_name.py檔
```python=
from name import get_name as gn
gn("bonny")
gn("jack","rose")
```
輸出結果 :
```python
hello,bonny
hello,jack
hello,rose
```
* ==匯入模組中所有函式==
用星號( * )運算子可以讓python匯入模組中所有的函式
↓ name.py檔
```python=
def get_name(*names):
for name in names:
print("hello,"+name)
def get_city(*cities):
for city in cities:
print(city)
```
↓ get_name.py檔
```python=
from name import *
get_name("bonny")
get_city("taipei")
```
輸出結果 :
```python
hello,bonny
taipei
```
#### 今天結束,各位明天見 :hand:
***
資料來源:<<python程式設計的樂趣>>-Eric Matthes著/H&C譯