函式就是將一些語句集中在一起的乙個部件,目的是減少我們同一段**的複製貼上,需要的時候以函式呼叫來代替,實現**的復用
函式定義語法:
def 函式名(0個或多個引數):
函式內要執行的**
return 返回值
#函式可以只定義函式名,沒有引數,也沒有返回值
defhello
():print
'hello world!'
# 函式的呼叫
res = hello() #hello world!
print type(res #
# 函式有返回值
# 函式的命名規則:乙個單詞直接小寫
# 多個單詞,每個單詞小寫,以下劃線分隔
defget_list
():return [1,2,3,4]
alist = get_list()
print type(alist),alist
# 函式可以有多個return語句,遇到return語句,跳出函式
defget_smaller
(x,y):
if xreturn x
print
'x is smaller'
else:
return y
smaller = get_smaller(1,2)
print smaller
# 函式有引數
# 引數:形參和實參,形參和實參要一一對應
defadd
(x,y):
return x+y
sum = add(1,2)
print sum
# 引數傳遞不正確的情況
# sum = add()
#typeerror: add() takes exactly 2 arguments (0 given)
# sum = add(1,2,3)
#typeerror: add() takes exactly 2 arguments (3 given)
# 預設引數
# 為了提高程式的健壯性,
# 如果我們想在x,y值不傳的時候,也給出乙個預設的結果,就需要用到預設引數
# 引數有預設值之後,可以根據需要傳遞實參
defadd
(x =2,y=3):
return x+y
sum = add()
print sum
sum = add(1)
print sum
sum = add(1,2)
print sum
# 函式的引數可以是任意型別
defprint_item
(x):
print x
print_item(1)
print_item(1.0)
print_item('string')
print_item([1,2,3])
print_item((1,2,3))
# 函式的引數可以是不同型別
defprint_userinfo
(name,age):
print
'username is %s and age is %d'%(name,age)
print_userinfo('xiaoming',18)
# 可以將要傳遞的引數放在tuple中
atuple = ('xiaoming',18)
print_userinfo(*atuple)
defprint_userinfo
(name='name',age=18):
print
'username is %s and age is %d'%(name,age)
# 要傳遞的引數放在字典中
adict =
print_userinfo(**adict)
# key不對應的情況
adict =
print_userinfo(**adict)
#typeerror: print_userinfo() got an unexpected keyword argument 'height'
# 可變長度的引數
defprint_userinfo
(name,age,*tuple_args,**dict_args):
print
'username is %s and age is %d'%(name,age)
print tuple_args
print dict_args
print_userinfo('xiaoming',18)
#username is xiaoxing and age is 18
#()#{}
# 傳遞引數有冗餘時,直接傳遞會報錯,如何解決
# 冗餘引數會傳遞到tuple_args
print_userinfo('xiaoming',18,170)
#username is xiaoming and age is 18
#(170,)
#{}atuple = ('xiaoming',18,170)
print_userinfo(*atuple)
#username is xiaoming and age is 18
#(170,)
#{}# 冗餘引數存放到dict_args
print_userinfo(name = 'xiaoming',age = 18,height = 170)
#username is xiaoming and age is 18
#()#
# 冗餘引數170,'xiaohong'存放到tuple_args,height = 170 存放到dict_args
print_userinfo('xiaoming',18, 170,'xiaohong',height = 170)、
#username is xiaoming and age is 18
#(170, 'xiaohong')
## 重複傳值給name引數
print_userinfo('xiaoming',18, 170,name = 'xiaohong',height = 170)
#typeerror: print_userinfo() got multiple values for keyword argument 'name'
# 函式內部可以呼叫其他函式
defcal
(x,y):
print x+y
res = cal(1,2)
# 如果乙個函式在內部呼叫自身,這個函式叫做遞迴函式
# 舉例:求乙個數n的階乘
# n的階乘為n*(n-1)*(n-2)...*1
# n! = n*(n-1)!
# n為1的時候,階乘為1
deffactorial
(n):
if n==1:
return
1else:
return n * factorial(n - 1)
print factorial(5)
# 變數的作用域問題
# 根據變數宣告的位置的不同,變數存在不同的作用域:全域性,區域性
# 全域性變數,區域性變數
# 變數的作用域限制了你在哪個地方可以訪問哪個變數
global_var = 'global'
deffoo
(): local_var = 'local'
print global_var+local_var
foo()
# foo中可以對所有的變數進行訪問,但是函式外只能訪問全域性變數,無法訪問函式的內部變數
# local_var是在函式體中定義的,只能在函式foo中使用
# global_var是在函式體外定義的,可以在指令碼的任意乙個位置訪問
print global_var
# print local_var
# x = 'xiaoming'
# def fun():
# x='xiaohong'
# print x
# fun()
# print x
# 函式內部也可以定義全域性變數
# 使用global關鍵字
# 注意:必須要先呼叫函式,函式體中定義的全域性變數才能生效
x = 'xiaoming'
deffun
(): x='xiaohong'
global global_y
global_y = 'xiaofang'
print x
fun()
print x
print global_y
# 如何在函式中修改全域性變數的值
x = 'xiaoming'
deffun
():global x
x='xiaohong'
print x
fun()
print x
# 匿名函式,lambda
deffunc
(x,y):
return x+y
func = lambda x,y:x+y
# reduce()函式
list1 = [1,2,3]
defadd
(x,y):
return x+y
print reduce(add,list1)
print reduce(lambda x,y:x+y,range(1,101))
Python筆記 函式
def function name 形參1,形參2,形參3.形參只是用來佔位的,函式呼叫時傳入的引數才是真正的引數 執行的語句 return 函式的返回值就是執行的結果,不是所有的函式都必須要有返回值 function name 實參1,實參3,實參3.函式呼叫時傳入的引數時實參 def tell ...
Python筆記 python基礎 函式
函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段 python內建了很多有用的函式,我們可以直接呼叫。要呼叫乙個函式,需要知道函式的名稱和引數。python內建函式官方文件 例如求絕對值的函式abs,只有乙個引數 a abs 100 print a 輸出結果 100 b abs 20 ...
python 筆記2 函式
a abs 變數a指向abs函式 a 1 所以也可以通過a呼叫abs函式 1def my abs x if x 0 return x else return x所以,定義預設引數要牢記一點 預設引數必須指向不變物件!例如none或常量 本質是乙個list和tuple 但是可以在引數上加個 號 def...