天天看點

Python 第八課:函數(上)何為函數?課後練習

何為函數?

概念:

  1. 儲存可執行代碼,并調用
  2. 函數中保有的代碼,隻有調用後才能執行

函數主要内容(四大點):

  1. 函數的建立
  2. 函數的調用
  3. 函數的參數
  4. 函數的傳回值

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)
           

執行代碼看看結果:

Python 第八課:函數(上)何為函數?課後練習

總結:

  1. 形參存在預設值時,可以不傳遞參數
  2. 當預設值需要傳遞參數時,會進行覆寫

2.2.1 傳參的兩大特征

  1. 位置傳參——形參與實參一一對應
  2. 關鍵字傳參——對形參指定指派,可不在意對應關系,如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)
           

運作得到:

Python 第八課:函數(上)何為函數?課後練習

特例:位置傳參與關鍵字傳參的混用

規則:位置 > 關鍵字,且不能一個關鍵字配多值

補充:傳參種類,都可以

2.2.2 不定長傳參

注重使用:*——通配符

# eg.3
def fun(*a):
	print(*a)
	print(a)
fun(1, 2, 3, 4, 5, 6)
           

因不确定會接受幾個實參,是以使用不定長傳參即通配符

觀察結果:

Python 第八課:函數(上)何為函數?課後練習

上述代碼塊中

print(a)

得到元組。

補充:位置傳參 > 不定長傳參 > 關鍵傳參

當不确定關鍵值傳參的時候,可以使用 **——雙通配符來表示,轉換成清單形式

def fun(**a):
	print(a)
fun(a=1, b=2, c=3)
           

運作得出:

Python 第八課:函數(上)何為函數?課後練習

是以:萬能句式

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
           
Python 第八課:函數(上)何為函數?課後練習

課後練習

Python 第八課:函數(上)何為函數?課後練習
# 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)
           

得出:

Python 第八課:函數(上)何為函數?課後練習
# Q3
def num():
    a = list(range(1, 101))
    print(sum(a))
num()