函數根據 有沒有參數 以及 有沒有返回值,能夠 相互組合,一共有 4 種 組合形式python
定義函數時,是否接收參數,或者是否返回結果,是根據 實際的功能需求 來決定的!面試
此類函數,不接收參數,也沒有返回值,應用場景以下:算法
注意:編程
此類函數,不接收參數,可是有返回值,應用場景以下:網絡
此類函數,接收參數,沒有返回值,應用場景以下:框架
此類函數,接收參數,同時有返回值,應用場景以下:函數
return
關鍵字能夠返回結果問題:一個函數執行後可否返回多個結果?code
def measure(): """返回當前的溫度""" print("開始測量...") temp = 39 print("測量結束...") return temp result = measure() print(result)
def measure(): """返回當前的溫度""" print("開始測量...") temp = 39 wetness = 10 print("測量結束...") return (temp, wetness)
提示:若是一個函數返回的是元組,括號能夠省略blog
技巧排序
Python
中,能夠 將一個元組 使用 賦值語句 同時賦值給 多個變量result = temp, wetness = measure()
題目要求
a = 6
, b = 100
# 解法 1 - 使用臨時變量 c = b b = a a = c
# 解法 2 - 不使用臨時變量 a = a + b b = a - b a = a - b
a, b = b, a
問題 1:在函數內部,針對參數使用 賦值語句,會不會影響調用函數時傳遞的 實參變量? —— 不會!
def demo(num, num_list): print("函數內部") # 賦值語句 num = 200 num_list = [1, 2, 3] print(num) print(num_list) print("函數代碼完成") gl_num = 99 gl_list = [4, 5, 6] demo(gl_num, gl_list) print(gl_num) print(gl_list)
問題 2:若是傳遞的參數是 可變類型,在函數內部,使用 方法 修改了數據的內容,一樣會影響到外部的數據
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)
+=
python
中,列表變量調用 +=
本質上是在執行列表變量的 extend
方法,不會修改變量的引用def demo(num, num_list): print("函數內部代碼") # num = num + num num += num # num_list.extend(num_list) 因爲是調用方法,因此不會修改變量的引用 # 函數執行結束後,外部數據一樣會發生變化 num_list += num_list print(num) print(num_list) print("函數代碼完成") 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` 參數 gl_num_list.sort(reverse=True) print(gl_num_list)
def print_info(name, gender=True): gender_text = "男生" if not gender: gender_text = "女生" print("%s 是 %s" % (name, gender_text))
提示
def print_info(name, gender=True, title):
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)) # 提示:在指定缺省參數的默認值時,應該使用最多見的值做爲默認值! print_info("小明") print_info("老王", title="班長") print_info("小美", gender=False)
python
中有 兩種 多值參數:
*
能夠接收 元組*
能夠接收 字典*args
—— 存放 元組 參數,前面有一個 *
**kwargs
—— 存放 字典 參數,前面有兩個 *
args
是 arguments
的縮寫,有變量的含義kw
是 keyword
的縮寫,kwargs
能夠記憶 鍵值對參數def demo(num, *args, **kwargs): print(num) print(args) print(kwargs) demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
提示:多值參數 的應用會常常出如今網絡上一些大牛開發的框架中,知道多值參數,有利於咱們可以讀懂大牛的代碼
需求
sum_numbers
,能夠接收的 任意多個整數def sum_numbers(*args): num = 0 # 遍歷 args 元組順序求和 for n in args: num += n return num print(sum_numbers(1, 2, 3))
args
kwargs
*
*
def demo(*args, **kwargs): print(args) print(kwargs) # 須要將一個元組變量/字典變量傳遞給函數對應的參數 gl_nums = (1, 2, 3) gl_xiaoming = {"name": "小明", "age": 18} # 會把 num_tuple 和 xiaoming 做爲元組傳遞個 args # demo(gl_nums, gl_xiaoming) demo(*gl_nums, **gl_xiaoming)
函數調用自身的 編程技巧 稱爲遞歸
特色
代碼特色
示例代碼
def sum_numbers(num): print(num) # 遞歸的出口很重要,不然會出現死循環 if num == 1: return sum_numbers(num - 1) sum_numbers(3)
需求
sum_numbers
num
的整數參數def sum_numbers(num): if num == 1: return 1 # 假設 sum_numbers 可以完成 num - 1 的累加 temp = sum_numbers(num - 1) # 函數內部的核心算法就是 兩個數字的相加 return num + temp print(sum_numbers(2))
提示:遞歸是一個 編程技巧,初次接觸遞歸會感受有些吃力!在處理 不肯定的循環條件時,格外的有用,例如:遍歷整個文件目錄的結構