函式根據有沒有引數以及有沒有返回值,可以相互組合,一共有4 種組合形式
無引數,無返回值
無引數,有返回值
有引數,無返回值
有引數,有返回值
定義函式時,是否接收引數,或者是否返回結果,是根據實際的功能需求來決定的!如果函式內部處理的資料不確定,就可以將外界的資料以引數傳遞到函式內部
如果希望乙個函式執行完成後,向外界匯報執行結果,就可以增加函式的返回值
def
measure()
:"""測量溫度和濕度"""
print
("開始測量"
) temp =
39 wetnes =
50print
("測量結束"
)# 元祖可以包涵多個資料,因此可以讓函式返回多個
# 如果返回元祖,小括號可以省略
##return (temp, wetnes)
return temp, wetnes
result = measure(
)print
(result)
def
measure()
:"""測量溫度和濕度"""
print
("開始測量"
) temp =
39 wetnes =
50print
("測量結束"
)# 元祖可以包涵多個資料,因此可以讓函式返回多個
# 如果返回元祖,小括號可以省略
##return (temp, wetnes)
return temp, wetnes
# 如何函式返回的型別是元祖
# 可以使用多個變數,一次性接受函式的返回結果
print
('--------'
)gl_temp, gl_wetness = measure(
)print
(gl_temp)
print
(gl_wetness)
a =
6b =
100# 解法一 :使用其他變數
# c = a
# a = b
# b = c
# 解法二: 不適用其他變數
# a = a + b
# b = a - b
# a = a - b
## print(a, b)
# 解法三 : python
a, b =
(b, a)
print
(a, b)
無論傳遞的引數是可變還是不可變
* 只要針對引數使用賦值語句,會在函式內部修改區域性變數的引用,不會影響到 外部變數的引用
def
demo
(num, num_list)
:print
("函式內部**"
)# 在函式內部,針對引數使用賦值語句,不會修改到外部的實參變數
num =
100 num_list =[1
,2,3
]print
(num,num_list)
print
("函式完成"
)gl_num =
99gl_list =[3
,4,5
]demo(gl_num, gl_list)
print
(gl_num, gl_list )
因為,呼叫方法是不改變指向的位址的,而賦值之後,會改變位址,所以呼叫方法後,在原來的地方新增了3,而上面賦值之後,是改變了,位址的
def
demo
(num_list)
:print
("函式內部**"
)# 在函式內部,使用方法,會改變外面的值。。。。注意3)
print
(num_list)
print
("函式完成"
)gl_list =[3
,4,5
]demo(gl_list)
print
( gl_list )
def
demo
(num, num_list)
:print
("函式開始"
)# a += b *****> a = a + b
num += num
# 列表+= ,不會做相加在等於的事情,本質上實在呼叫 exten 的方法
# num_list += num_list
# num_list = num_list + num_list 外部不會發生變化
num_list.extend(num_list)
print
(num)
print
(num_list)
print
('函式結束'
)gl_num =
9gl_list =[1
,3,4
]demo(gl_num, gl_list)
print
(gl_num)
print
(gl_list)
相當於你不寫,他就是預設的 引數,你不寫true 他就預設你是男生
def
print_info
(name, gender=
true):
# 預設引數 gender=true 在引數後使用賦值語句,可以指定引數的預設值
gender_text =
"男生"
ifnot gender:
gender_text =
"女生"
print
("%s 是 %s"
%(name, gender_text)
)print_info(
"小公尺"
)
定義支援多值引數的函式
一般在給多值引數命名時,習慣使用以下兩個名字
def
demo
(num,
*nums,
**person)
:"""
@param num: 接受數值
@param nums: 乙個星號可以接收 元祖
@param person: 2個星號可以接收 字典
"""print
(num)
print
(nums)
print
(person)
# demo(1)
demo(1,
2,3,
4,5,name =
"小明"
, age =
'18'
)
多值引數案例 —— 計算任意多個數字的和
需求
定義乙個函式sum_numbers
,可以接收的任意多個整數功能要求:將傳遞的所有數字累加並且返回累加結果
# def sum_numbers(*args):
defsum_numbers
(*args)
: num =
0print
(args)
# 迴圈遍歷
for n in args:
num += n
return num
result = sum_numbers(1,
2,3,
4,5)
print
(result)
就可以使用拆包,簡化引數的傳遞,拆包的方式是:
def
demo
(*age,
**kwarge)
:print
(age)
print
(kwarge)
gl_nums =(1
,2,3
)gl_dict =
# 拆包語法,簡化元祖變數/字典變數的傳遞
demo(
*gl_nums,
**gl_dict)
乙個函式內部,自己呼叫自己def
sum_number
(num)
:print
(num)
# 一定要有遞迴的出口,當滿足某個條件後,不再執行
if num ==1:
return
# 自己呼叫自己
sum_number(num -1)
sum_number(
3)
python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
python的高階函式
示例 def calc num new func a 1 b 2 執行外界傳入過來的函式 result new func a,b return result def sum num num1,num2 return num1 num2 呼叫函式 result calc num sum num pri...