函數(shù)根據(jù) 有沒有參數(shù)以及 有沒有返回值,可以 相互組合,一共有 4 種組合形式
成都創(chuàng)新互聯(lián)是專業(yè)的陸港網(wǎng)站建設公司,陸港接單;提供做網(wǎng)站、成都網(wǎng)站設計,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行陸港網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
定義函數(shù)時,是否接收參數(shù),或者是否返回結果,是根據(jù) 實際的功能需求來決定的!
此類函數(shù),不接收參數(shù),也沒有返回值,應用場景如下:
注意:
- 如果全局變量的數(shù)據(jù)類型是一個 可變類型,在函數(shù)內部可以使用 方法修改全局變量的內容 —— 變量的引用不會改變
- 在函數(shù)內部,使用賦值語句才會 修改變量的引用
此類函數(shù),不接收參數(shù),但是有返回值,應用場景如下:
此類函數(shù),接收參數(shù),沒有返回值,應用場景如下:
此類函數(shù),接收參數(shù),同時有返回值,應用場景如下:
示例 —— 溫度和濕度測量
def measure():
"""返回當前的溫度"""
print("開始測量...")
temp = 39
print("測量結束...")
return temp
result = measure()
print(result)
def measure():
"""返回當前的溫度"""
print("開始測量...")
temp = 39
wetness = 10
print("測量結束...")
return (temp, wetness)
提示:如果一個函數(shù)返回的是元組,括號可以省略
技巧:
result = temp, wetness = measure()
面試題 —— 交換兩個數(shù)字
題目要求
# 解法 1 - 使用臨時變量
c = b
b = a
a = c
解法 2 —— 不使用臨時變量
# 解法 2 - 不使用臨時變量
a = a + b
b = a - b
a = a - b
解法 3 —— Python 專有,利用元組
a, b = b, a
問題 1:在函數(shù)內部,針對參數(shù)使用 賦值語句,會不會影響調用函數(shù)時傳遞的 實參變量? —— 不會!
def demo(num, num_list):
print("函數(shù)內部")
# 賦值語句
num = 200
num_list = [1, 2, 3]
print(num)
print(num_list)
print("函數(shù)代碼完成")
gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
問題 2:如果傳遞的參數(shù)是 可變類型,在函數(shù)內部,使用 方法修改了數(shù)據(jù)的內容,同樣會影響到外部的數(shù)據(jù)
def mutable(num_list):
# num_list = [1, 2, 3]
num_list.extend([1, 2, 3])
print(num_list)
gl_list = [6, 7, 8]
mutable(gl_list)
print(gl_list)
面試題 —— +=
def demo(num, num_list):
print("函數(shù)內部代碼")
# num = num + num
num += num
# num_list.extend(num_list) 由于是調用方法,所以不會修改變量的引用
# 函數(shù)執(zhí)行結束后,外部數(shù)據(jù)同樣會發(fā)生變化
num_list += num_list
print(num)
print(num_list)
print("函數(shù)代碼完成")
gl_num = 9
gl_list = [1, 2, 3]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
gl_num_list = [6, 3, 9]
# 默認就是升序排序,因為這種應用需求更多
gl_num_list.sort()
print(gl_num_list)
# 只有當需要降序排序時,才需要傳遞 `reverse` 參數(shù)
gl_num_list.sort(reverse=True)
print(gl_num_list)
指定函數(shù)的缺省參數(shù)
def print_info(name, gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s" % (name, gender_text))
提示
缺省參數(shù)的注意事項
1) 缺省參數(shù)的定義位置
2) 調用帶有多個缺省參數(shù)的函數(shù)
def print_info(name, title="", gender=True):
"""
:param title: 職位
:param name: 班上同學的姓名
:param gender: True 男生 False 女生
"""
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s%s 是 %s" % (title, name, gender_text))
# 提示:在指定缺省參數(shù)的默認值時,應該使用最常見的值作為默認值!
print_info("xm")
print_info("lb", title="monitor")
print_info("xm", gender=False)
定義支持多值參數(shù)的函數(shù)
一般在給多值參數(shù)命名時,習慣使用以下兩個名字
def demo(num, *args, **kwargs):
print(num)
print(args)
print(kwargs)
demo(1, 2, 3, 4, 5, name="xm", age=18, gender=True)
多值參數(shù)案例 —— 計算任意多個數(shù)字的和
需求
def sum_numbers(*args):
num = 0
# 遍歷 args 元組順序求和
for n in args:
num += n
return num
print(sum_numbers(1, 2, 3))
元組和字典的拆包(知道)
def demo(*args, **kwargs):
print(args)
print(kwargs)
# 需要將一個元組變量/字典變量傳遞給函數(shù)對應的參數(shù)
gl_nums = (1, 2, 3)
gl_xm = {"name": "xm", "age": 18}
# 會把 num_tuple 和 xm 作為元組傳遞個 args
# demo(gl_nums, gl_xm)
demo(*gl_nums, **gl_xm)
函數(shù)調用自身的 編程技巧稱為遞歸
特點
代碼特點
示例代碼
def sum_numbers(num):
print(num)
# 遞歸的出口很重要,否則會出現(xiàn)死循環(huán)
if num == 1:
return
sum_numbers(num - 1)
sum_numbers(3)
需求
def sum_numbers(num):
if num == 1:
return 1
# 假設 sum_numbers 能夠完成 num - 1 的累加
temp = sum_numbers(num - 1)
# 函數(shù)內部的核心算法就是 兩個數(shù)字的相加
return num + temp
print(sum_numbers(2))
提示:遞歸是一個 編程技巧,初次接觸遞歸會感覺有些吃力!在處理 不確定的循環(huán)條件時,格外的有用,例如:遍歷整個文件目錄的結構