No 12 函式高階

2022-08-17 05:15:18 字數 4816 閱讀 9960

無引數,無返回值

無引數,有返回值

有引數,無返回值

有引數,有返回值

此類函式,不接收引數,也沒有返回值,應用場景如下:

注意:

在函式內部,使用賦值語句此類函式,不接收引數,但是有返回值,應用場景如下:

此類函式,接收引數,沒有返回值,應用場景如下:

此類函式,接收引數,同時有返回值,應用場景如下:

返回值

問題:乙個函式執行後能否返回多個結果?

def measure():

"""返回當前的溫度"""

print("開始測量...")

temp = 39

print("測量結束...")

return temp

result = measure()

print(result)

改造如下:

def measure():

"""返回當前的溫度"""

print("開始測量...")

temp = 39

wetness = 10

print("測量結束...")

return (temp, wetness)

技巧注意:變數的數量需要和元組中的元素數量保持一致

result = temp, wetness = measure()
題目要求不使用其他變數,交換兩個變數的值解法 1 —— 使用其他變數

# 解法 1 - 使用臨時變數

c = b

b = a

a = c

解法 2 —— 不使用臨時變數
# 解法 2 - 不使用臨時變數

a = a + b

b = a - b

a = a - b

解法 3 —— python 專有,利用元組
a, b = b, a

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)

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("函式內部**")

# 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))

提示預設引數的注意事項

1) 預設引數的定義位置

def print_info(name, gender=true, title):
2) 呼叫帶有多個預設引數的函式

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

kw

def demo(num, *args, **kwargs):

print(num)

print(args)

print(kwargs)

demo(1, 2, 3, 4, 5, name="小明", age=18, gender=true)

多值引數案例 —— 計算任意多個數字的和

需求

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)

# 需要將乙個元組變數/字典變數傳遞給函式對應的引數

gl_nums = (1, 2, 3)

gl_xiaoming =

# 會把 num_tuple 和 xiaoming 作為元組傳遞個 args

# demo(gl_nums, gl_xiaoming)

demo(*gl_nums, **gl_xiaoming)

特點**特點示例**

def sum_numbers(num):

print(num)

# 遞迴的出口很重要,否則會出現死迴圈

需求

計算 1 + 2 + ... num 的結果

def sum_numbers(num):

if num == 1:

return 1

# 假設 sum_numbers 能夠完成 num - 1 的累加

temp = sum_numbers(num - 1)

# 函式內部的核心演算法就是 兩個數字的相加

No 12遞迴函式實現二分查詢演算法

1 什麼是二分查詢演算法?首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查...

python day12 函式高階

1.命名空間 分三種 全域性命名空間,區域性命名空間,內建命名空間。載入順序 內建命名空間 全域性命名空間 區域性命名空間 取值順序 區域性命名空間 全域性命名空間 內建命名空間 2.作用域 作用域就是作用範圍,按照生效範圍可以分為全域性作用域和區域性作用域。全域性作用域 包含 內建命名空間 全域性...

數學建模 NO 12回歸模型補充

解決異方差 多重共線性 解決多重共線性 逐步回歸分析 在上一節的回歸分析時我們都是預設了擾動項是球形擾動項 同方差性 無自相關 橫截面資料容易出現異方差的問題 時間序列資料容易出現自相關的問題。如果干擾項存在異方差會出現 ols估計出來的回歸係數是無偏的,一致的。假設檢驗無法使用 構造的統計量無效 ...