何為函數?
概念:
- 儲存可執行代碼,并調用
- 函數中保有的代碼,隻有調用後才能執行
函數主要内容(四大點):
- 函數的建立
- 函數的調用
- 函數的參數
- 函數的傳回值
1. 函數的建立
初始函數:
文法:
def 函數名([形象1, 形象2...])
代碼塊
舉例:
def fun(): # 自定義函數,fun是函數名,稱為函數對象
print('這是我的第一個函數')
注意:當運作此代碼時,并不會執行,需要調用。
def fun(): # 自定義函數,fun是函數名,稱為函數對象
print('這是我的第一個函數')
fun() # 函數的調用
2. 函數的參數
# eg.
def fun():
a = 1
b = 2
print(a + b)
fun() # 執行結果為3
2.1 形參和實參
對于上述代碼 eg. 我們可以進行簡單的改寫
# eg. 改寫
def fun(a, b):
print(a + b)
fun(1, 2) # 執行結果與上述 eg. 相等
結果相同的原理,便是形參和實參的關系,從詞義上來說:
形參——形式上的參數,上述代碼中的a,b
實參——實際上的參數,上述代碼中的1,2
關系:形參是用來傳遞實參的,且有一個一一對應的關系(1——a,2——b),由此我們引出參數的傳遞方式。
2.2 參數的傳遞
# eg.1
def fun(a, b, c=20): # 此處給予c這個形參,一個預設值20
print(a, b, c)
fun(1, 2)
fun(1, 2, 3)
執行代碼看看結果:
總結:
- 形參存在預設值時,可以不傳遞參數
- 當預設值需要傳遞參數時,會進行覆寫
2.2.1 傳參的兩大特征
- 位置傳參——形參與實參一一對應
- 關鍵字傳參——對形參指定指派,可不在意對應關系,如eg.2
# eg.2
def fun(a, b, c):
print(a, b, c)
fun(a=1, b =2, c=3)
fun(b=2, c=3, a=1)
運作得到:
特例:位置傳參與關鍵字傳參的混用
規則:位置 > 關鍵字,且不能一個關鍵字配多值
補充:傳參種類,都可以
2.2.2 不定長傳參
注重使用:*——通配符
# eg.3
def fun(*a):
print(*a)
print(a)
fun(1, 2, 3, 4, 5, 6)
因不确定會接受幾個實參,是以使用不定長傳參即通配符
觀察結果:
上述代碼塊中
print(a)
得到元組。
補充:位置傳參 > 不定長傳參 > 關鍵傳參
當不确定關鍵值傳參的時候,可以使用 **——雙通配符來表示,轉換成清單形式
def fun(**a):
print(a)
fun(a=1, b=2, c=3)
運作得出:
是以:萬能句式
def fun(*args, **keyargs):
pass
2.3 參數的拆包
用執行個體來說明:
def fun(a, b, c):
print(a, b, c)
a = (1, 2, 3)
b = 'abc'
c = {'a':1, 'b':2, 'c':3}
fun(a[0], a[1], a[2]) # 正常拆包
fun(*a) # 表達同樣效果
fun(*b) # 可以拆str
fun(*c) # 可以拆dict,但是得到key
fun(**c) # 使用**拆包,得到value
課後練習
# Q1
a = input('輸入姓名:')
if len(a) in range(6, 21):
b = (input('電話号碼:'))
if len(b) == 11:
c = input('性别(男/女):')
if c in ['男', '女']:
print(a, '\n', b, '\n', c)
else:
print('隻能輸入男/女')
else:
print('電話号長度為11')
else:
print('姓名長度為6-20')
# Q2
a=list(range(20))
b=[]
c=[1, 1]
for n in range(2, 20):
a[0] = 1
a[1] = 1
a[n]=a[n-2]+a[n-1]
b.append(a[n])
c.extend(b)
print(c)
得出:
# Q3
def num():
a = list(range(1, 101))
print(sum(a))
num()