一、函數定義
函數是一段可重用的代碼塊,它接受一些輸入(參數),並返回一些輸出。使用函數可以避免重複的代碼,提高代碼的復用性。
創建函數的語法如下:
def function_name(parameters):
'''函數說明文檔,可選'''
# 函數體代碼塊
return output
其中,def
是函數定義的關鍵字,後跟函數名和一對括號()
。在括號內可以指定函數參數,多個參數用逗號分隔,也可以為空。在冒號:
後面的下一行是函數體,縮進的代碼塊為函數體內容,最後的return
語句指定函數的返回值,也可以沒有return
語句。
以下是一個示例函數:
def add(x, y):
'''計算兩個數的和'''
result = x + y
return result
該函數的名稱為add
,有兩個參數x
和y
,函數體中將兩個參數相加並將結果存儲在變量result
中,最後返回result
的值。
二、函數調用
定義好函數後,可以通過函數名來調用函數。調用函數時,需要傳遞必要的參數。
以下是調用add
函數的示例:
a = 3
b = 4
c = add(a, b)
print(c)
該程序先定義了變量a
和b
,然後調用add
函數,並將a
和b
作為參數傳遞給函數。函數計算出a
和b
的和,然後返回該值並存儲在變量c
中,最後print
函數輸出c
的值。
三、函數返回值
函數的返回值使用return
語句指定,可以將任何類型的對象作為函數的返回值。
以下是一個返回列表的示例函數:
def create_list(n):
'''創建從1到n的整數列表'''
result = []
for i in range(1, n+1):
result.append(i)
return result
該函數的名稱為create_list
,有一個參數n
,函數體中使用for
循環來創建1到n的列表,並將結果存儲在result
中,最後返回result
的值。
下面是調用create_list
函數的示例:
n = 5
my_list = create_list(n)
print(my_list)
該程序先定義變量n
,然後調用create_list
函數,並將n
作為參數傳遞給函數。函數返回1到n的整數列表,並存儲在變量my_list
中,最後print
函數輸出my_list
的值。
四、函數參數
函數可以接受任何數量的參數,包括默認參數、可變參數和關鍵字參數。
1. 默認參數
默認參數是指函數的參數有默認值,如果函數調用時不提供該參數的值,則使用默認值。
以下是一個示例函數,其中b
是一個默認參數:
def multiply(a, b=2):
'''計算a和b的乘積'''
result = a * b
return result
該函數的名稱為multiply
,有兩個參數a
和b
,其中b
的默認值為2,函數體中將a
和b
相乘並返回結果。
下面是調用multiply
函數的示例:
a = 3
c = multiply(a)
print(c)
該程序先定義變量a
,然後調用multiply
函數,並將a
作為參數傳遞給函數。函數計算a
和b
(使用默認值2)的乘積,並返回結果。結果存儲在變量c
中,最後print
函數輸出c
的值。
2. 可變參數
可變參數是指函數的參數個數不確定,可以接受任意數量的參數。在函數定義時,在參數名前添加星號*
表示該參數為可變參數。
以下是一個示例函數,其中*numbers
是一個可變參數:
def average(*numbers):
'''計算平均數'''
total = sum(numbers)
avg = total / len(numbers)
return avg
該函數的名稱為average
,可以接受任意數量的參數,函數體中先計算所有參數的和,然後除以參數個數,得到平均值並返回。
下面是調用average
函數的示例:
a = 3
b = 4
c = 5
d = 6
avg = average(a, b, c, d)
print(avg)
該程序先定義四個變量a
、b
、c
和d
,然後調用average
函數,並將這四個變量作為參數傳遞給函數。函數計算這四個參數的平均值,並返回結果。結果存儲在變量avg
中,最後print
函數輸出avg
的值。
3. 關鍵字參數
關鍵字參數是指函數的參數可以使用參數名來指定,不需要按順序傳遞。
以下是一個示例函數,其中x
和y
是關鍵字參數:
def divide(x, y):
'''計算x和y的商'''
result = x / y
return result
該函數的名稱為divide
,有兩個參數x
和y
,函數體中將x
除以y
並返回結果。
下面是調用divide
函數的示例:
a = 3
b = 4
c = divide(x=a, y=b)
print(c)
該程序先定義變量a
和b
,然後調用divide
函數,並使用關鍵字參數x=a
和y=b
來指定函數的參數。函數計算a
和b
的商,並返回結果。結果存儲在變量c
中,最後print
函數輸出c
的值。
五、閉包函數
閉包是指一個函數可以記住並訪問它所在的變量,即使函數在它所在的作用域之外被調用。
以下是一個示例函數,其中counter
是一個閉包函數:
def counter():
'''計數器閉包函數'''
count = 0
def inner():
'''內部函數'''
nonlocal count
count += 1
return count
return inner
該函數由兩個函數組成,counter
是一個返回內部函數inner
的高階函數,inner
是一個閉包函數,它可以訪問並修改counter
函數中的局部變量count
。
下面是使用counter
函數創建計數器的示例:
counter1 = counter()
counter2 = counter()
print(counter1())
print(counter1())
print(counter2())
print(counter2())
該程序先使用counter
函數創建兩個計數器counter1
和counter2
。然後分別調用兩個計數器的inner
函數,計數器的值分別為1、2和1、2。
六、裝飾器函數
裝飾器是指可以修改其他函數的行為的函數,它通過在被裝飾函數的前後添加額外的代碼來實現。
以下是一個裝飾器函數的示例:
def my_decorator(func):
'''裝飾器函數'''
def wrapper():
'''內部函數'''
print('Before function is called.
')
func()
print('After function is called.
')
return wrapper
@my_decorator
def say_hello():
'''被裝飾函數'''
print('Hello world!
')
該程序定義了一個裝飾器函數my_decorator
,它接受一個參數func
,返回一個內部函數wrapper
。該程序還定義了一個被裝飾函數say_hello
,在函數定義前使用@my_decorator
表示say_hello
將會被my_decorator
裝飾。
下面是調用say_hello
函數的示例:
say_hello()
該程序調用say_hello
函數,由於say_hello
函數被my_decorator
裝飾,因此在函數調用前後會輸出額外的字符串'Before function is called.'
和'After function is called.'
,同時say_hello
函數會輸出'Hello world!'
字符串。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/185018.html