四、元組和字典的拆包(了解)
五、函式的遞迴
def
demo
(num,num_list)
("函式開始"
)# num = num + num
num += num
# num_list = num_list + num_list
# 列表變數使用 + 不會做相加在賦值的操作
# 本質上是在呼叫列表的 extend 方法
num_list += num_list
# num_list.extend(num_list)
(num)
(num_list)
("函式完成"
)gl_num =
9gl_list =[1
,2,3
]demo(gl_num,gl_list)
(gl_num)
(gl_list)
注意事項:def
print_info
(name, gender=
true):
""" :param name: 班上同學的姓名
:param gender: true 男生 false 女生
"""gender_text =
"男生"
ifnot gender:
gender_text =
"女生"
("%s 是 %s"
%(name,gender_text)
)# 加入班上同學男生居多
print_info(
"小明"
)print_info(
"小美"
,false
)
預設引數的定義位置
必須保證帶有預設值的預設引數在引數列表末尾
所以以下定義是錯誤的!
呼叫帶有多個預設引數的函式def
print_info
(name, gender =
true
, title)
在呼叫函式時,如果有多個預設引數,需要指定引數名,這樣直譯器才能夠知道引數的對應關係!
一般在給多值引數命名時,習慣使用以下兩個名字
args
是arguments
的縮寫,有變數的含義
kw
是keyword
的縮寫,kwargs
可以記憶鍵值對引數
就可以使用拆包,簡化引數的傳遞,拆包的方式是:def
demo
(num,
*args,
**kwargs)
(num)
(args)
(kwargs)
demo(1,
2,3,
4,5, name=
"小明"
, age=
18, gender=
true
)
特點**特點函式內部的**是相同的,只是針對引數不同,處理的結果不同當引數滿足乙個條件時,函式不再執行def
demo
(*args,
**kwargs)
(args)
(kwargs)
# 需要將乙個元組變數/字典變數傳遞給函式對應的引數
gl_nums =(1
,2,3
)gl_dict =
# 會把 num_tuple 和 dict 作為元組傳遞個 args
# demo(gl_nums, gl_dict)
# 拆包語法,簡化元組變數/字典變數的傳遞
demo(
*gl_nums,
**gl_dict)
這個非常重要,通常被稱為遞迴的出口,否則會出現死迴圈!
示例**
需求*定義乙個函式def
sum_numbers
(num)
(num)
# 遞迴的出口很重要,否則會出現死迴圈
if num ==1:
return
sum_numbers(num -1)
sum_numbers(
3)
sum_numbers
能夠接收乙個num
的整數引數
計算 1 + 2 + … num 的結果
**如下:
def
sum_numbers
(num)
:# 1.出口
if num ==1:
return
1# 2.數字的累加 num + (1...num -1)
# 假設 sum_numbers 能夠完成 1...num - 1 的累加
temp = sum_numbers(num -1)
# 函式內部的核心演算法就是 兩個數字的相加
網路知識總結 (五)高階I O函式
pipe 函式用於建立乙個管道,以實現程序間通訊。include int pipe int fd 2 引數是乙個包含兩個 int 型整數的陣列指標。成功 返回 0 並將一對開啟的檔案描述符值傳入陣列中。失敗 返回 1,並設定errno。通過 pipe 函式建立的兩個檔案描述符 fd 0 和 fd 1...
JS高階教程知識整理 07函式中的this
1.this是什麼 任何函式本質上都是通過某個物件來呼叫的,如果沒有直接指定就是window 所有函式內部都有乙個變數this 它的值是呼叫函式的當前物件 2.如何確定this的值 test window new test 新建立的物件 p.test p p.call obj obj 實現 lang...
函式的高階
def func a1,a2,a3 print a1,a2,a3 func 1,3,4 a1 1,a2 3,a3 4def func a1,a2 print a1,a2 func a2 99,a1 2 關鍵字傳引數和位置傳參可以混合使用 位置傳入的引數 關鍵字引數在後 總引數個數 def func1...