# Python 函式
###### tags: `python`
引述:
函式是程式碼包裝在一個區塊中,方便隨時呼叫使用
要先定義一個程式區塊,然後呼叫函式
[參考課程-1](https://www.youtube.com/watch?v=7qKFvUVpQXg&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=9)
[參考課程-2](https://www.youtube.com/watch?v=OOJmhezLd4o&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=10)
## 定義函式:
>def 函式名稱(參數名稱):
>>函式內部程式碼
參數可有可無
範例1
```python=
def sayHello():
print("hello")
```
範例2
```python=
#n1,n2為參數,呼叫時可以給定值
def add(n1,n2):
result=n1+n2
print(result)
```
## 呼叫函式
>函式名稱(參數資料)
範例1
```python=
def syaHello():
print("hello")
sayHello()
```
範例2
```python=
#定義
def say(msg):
print(msg)
#呼叫
say("Hello python")
```
## 回傳值
>def 函式名稱(參數名稱):
>>函式內部程式碼
>>return #結束函式,回傳資料 or none
資料:布林、int等
```python=
def say(msg):
print(msg)
return
value = say("hello function")
print(value)#印出none
```
會回傳什麼,取決於return後的東西,跟上方程式碼無關
e.g. return "hello"則function回傳的值就為hello,
回傳值代function結果,把值從function中帶出來
```python=
def add(n1,n2):
result=n1+n2
return result
value = add(3,4,)
print(value)#印出7
```
沒有回傳值或沒有寫,則預設為none,例如:
```python=
def multiply(n1,n2):
print(n1*n2)
value = multiply(3,4)
print(value)
```
>12
>None
**return有用的功能是把值從function中帶出來,外部可以繼續操作資料**
## 程式包裝(類似的工作重複執行)
```python=
#計算1+到使用者輸入的數字
def calculate(n):
sum=0;
for i in range(1,n+1):
sum = sum+i;
return sum
n = int(input('Enter a number(enter negative number to stop calculate): '));
while(n>0):
print(calculate(n))
n = int(input('Enter a number(enter negative number to stop calculate): '));
```
## 參數預設資料
範例1
```python=
#參數msg預設為"hello"
def say(msg="hello"):
print(msg)
say("World")
say()#印出預設hello
```
範例2:
```python=
def power(base,exp):
print(base**exp)
power(3,2)
power(4)
```
>Typeerror 因為沒有第二個參數
解決:如果把function改成 power(base,exp=0)
則不會error,而是1
**當沒有給需要的參數時,則使用預設資料**
## 呼叫函式,以參數名稱對應資料,不論順序
>def 函式名稱(名稱1,名稱2):
>>函式內部程式碼
>#呼叫函式,以參數名稱對應資料
>函式名稱(名稱2=3,名稱1=5)
範例:
```python=
def divide(n1,n2):
result = n1/n2;
print(result)
divide(2,4);#印出0.5
divide(n2=2,n1=4)#印出2
```
## 無限、不定數量的參數
用途:不確定會有多少參數時使用
>def 函式名稱(*無限參數):
>>無限參數以Tuple資料型態處理
>>函式內部程式碼
>#呼叫函式,可傳入無限數量的參數
>函式名稱(資料1,資料2,資料3....)
範例1:
```python=
#函式接受無限參數
def say(*msgs):
#以tuple方式處理
for msg in msgs:
print(msg)
#call function 傳入參數
say("Hello","World","python","good")
```
範例2:
```python=
#算輸入數字的平均數,不限定多少數字
def avg(*ns):
sum=0
for n in ns:
sum+=n
print(sum/len(ns))
avg(3,4)
avg(3,5,10)
avg(1,4,-1,-8)
```