一、 Python函數
是什麼呢?函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重複利用率,可以被用戶調用。
二、Python函數定義
語法:
def functionname( parameters): #沒有參數可以不寫()
"函數_文檔字符串" #存放函數說明
function_suite
return [expression] #沒有返回值可以不加[]內容,也可以省略return
三、Python函數調用
調用函數的一般形式是:
函數名(參數表)
例:函數定義與調用
#函數定義
#-*-coding:utf-8-*-
def printstr(str):
"Printstring"
print str
return #此處可替換為return str或直接省略不寫
#函數調用
printstr('Hello Python!')
運行結果如下:
四、Python函數參數
1、形式參數和實際參數
在 定義函數 時,函數名後面圓括號中的變量名稱叫做形式參數,或簡稱“ 形參 ”;
在 調用函數 時,函數名後面圓括號中的變量名稱叫做“實際參數”,或簡稱為“ 實參 ”。
例1:單參數
def fun(x):#x形參
print x
fun(1) #1實參
運行結果如下:
例2:多參數
def pet (x,y):
print 'I wanta',x,y
pet('black','dog')
注:形參與實參要一一對應。
2、缺省參數
調用函數時,缺省參數的值如果沒有傳入,則被認為是默認值。函數取值是從左到右的 。 如果有實參,默認值就被覆蓋。
例1:設定默認值
def pet (x='white',y='cat'):
print 'I want a',x,y
pet()
運行結果如下:
注:如果沒有實參,傳入默認值。如果有實參,默認值就被覆蓋。
例2:兩個參數,一個默認值
def pet (x,y='cat'):
print 'I want a',x,y
pet('black')
運行結果如下:
例3:將第一個參數值改為默認,第二個參數值不默認
def pet (x='white',y):
print 'I want a',x,y
pet('dog')
運行結果如下:
注:函數取值是從左到右,實際應用中可將沒有默認值得置前,有默認值的置後。
例4:例3交換X,Y位置可達到效果。
def pet (y,x='white'):
print 'I want a',x,y
pet('dog')
運行結果如下:
3、多類型傳值
向函數傳元組和字典。
例1:傳入多類型值
def f(x):
print x
f(10) #整型
f('hello') #字符串
f([1,2,3]) #列表[]
f((1,2,3)) #元組()
f({'name':'emma','age':18})#字典{}
運行結果如下:
例2:傳入多類型多個值
def f(x,y):
print('My name is %s.My old is %d.')%(x,y)#格式化
f('emma',18)
運行結果如下:
例3:將元組傳給函數(*)
def f(x,y):
print('My name is %s.My old is %d.')%(x,y)#格式化
t=('emma',18) #定義元組
f(*t)
運行結果如下:
例4:將字典傳給函數(**)
deff(name='name',city='city'):
print "name:%s"%name
print"city:%s"%city
d={'name':'emma','city':'Beijing'}
f(**d)
運行結果如下:
例4:將字典傳給函數-形參與實參不對應(**)
deff(name='name',city='city'):
print "name:%s"%name
print"city:%s"%city
d={'a':'emma','b':'Beijing'}#形參和實參名稱不對應
#f(**d)#直接傳參會報錯
f(d['a'],d['b'])#指定鍵值對方式
運行結果如下:
注:形參和實參要一一對應(數量、順序)。
4、不定長(冗餘)參數處理
示例一:
def func(x,*args):
print x,args
示例二:
def func(x,*args,**kw):
print x,args,kw
例1:
def f(x,*args):
print x
print args
f(1,2,3)# args多餘實參傳遞到args元組中
運行結果如下:
例2:
def f(x,*args,**dic):
print x
print args
print dic
f(1,2,3,y=7,z=10) #前面有個1給X賦值,這裡不能再寫一遍x=某值,否則會因重複賦值而報錯。 作為值、元組、字典傳遞
運行結果如下:
注:處理映射關係用字典
五、Python函數返回值return
1.可以返回任意數據類型,默認為None
2.執行完return,函數退出
3.注意區分return和print
例1:
def fun():
return 'Hello Python'
print fun()
運行結果如下:
例2:
def fun():
return range(10)#返回列表
print fun()
運行結果如下:
例3:執行完return,函數退出
1)
def fun(x,y):
if x>y:
return 1 #條件成立返回1
print "Hello Python" #條件不成立直接打印Hello Python
fun(1,2)
運行結果如下:
2)
def fun(x,y):
if x>y:
return 1 #條件成立返回1
print "Hello Python"
print fun(2,1)
運行結果如下:
注:條件成立返回1後,函數並沒有打印Hello Python,說明執行完return,函數退出了,不執行下面語句。
例4:多個return語句-邏輯關係的返回
#-*-coding:utf-8-*-
def fun (x,y):
if x>y:
return 1
elif x
return -1
else:
return 0
#print fun(1,2)#第一次執行
#print fun(2,1) #第二次執行
print fun(2,2) #第三次執行
運行結果如下:
例5:區分return和print
1)def fun (x,y):
print x+y #此處為print
a=fun(1,2)
print a
運行結果如下:
注:第一次打印x+y=3,第二次打印a的值為None(無返回值)。
2)def fun (x,y):
return x+y#此處為return
a=fun(1,2)
print a
注:函數的返回值為x+y。
運行結果如下:
六、Python變量作用域-全局變量與局部變量
一個程序的所有的變量並不是在哪個位置都可以訪問的。訪問權限決定於這個變量是在哪裡賦值的。變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。
兩種最基本的變量作用域如下:全局變量、局部變量
局部變量是函數內部定義,僅在函數內有效。
全局變量在函數外部定義,可以被其他程序段調用。
函數內部通過global可以強制定義全局變量,當函數調用時全局變量生效。
例1:區分全局變量和局部變量的作用域
a=1 #全局變量
def fun():
a=2 #局部變量
print a
fun()
print a
運行結果如下:
注:調用fun()函數,先執行函數內的打印a值(局部變量);函數外的print a打印的是全局變量。
例2:global強制定義全局變量,在函數調用時才生效
1)a=1
deffun():
a=2
global b
b=3
print a
b #沒調用函數,直接打印b
運行結果如下:
注:沒調用函數,直接打印b,b沒有被定義。
2) a=1
deffun():
a=2
global b
b=3
print a
fun()
b #先調用函數後,再打印b
運行結果如下:
注:先調用函數後,再打印b,b=3。
七、Python匿名函數
lambda函數是一種快速單行定義函數的方法,使代碼更簡潔,避免了不必要的函數體定義。
func(x,y):
return x*y
與上面正常函數等價的匿名函數寫法:
func=lambda x,y:x*y
注:冒號:前面是參數,可以有多個,中間用逗號隔開,後面是返回值。
例1:
def func(x,y):
return x*y
print func(2,3)
與上面函數等價的匿名函數如下:
func=lambda x,y:x*y #一行搞定
print func(2,3)
注:輸出的值都是6。
例2:
1)計算累加用reduce與lambda函數示例
def add(x,y):
return x+y
print reduce(add,(1,2,3,4,5,6))
與上面函數等價的匿名函數如下:
add=reduce(lambdax,y:x+y,(1,2,3,4,5,6))
print add
注:結果輸出1+2+3+4+5+6的結果即21。
2)計算階乘用reduce與lambda函數示例
def multiply(x,y):
return x*y
print reduce(multiply,range(1,7))
multiply=reduce(lambdax,y:x*y,(1,2,3,4,5,6))
print multiply
注:結果輸出1*2*3*4*5*6的結果即720。
知識點詳解:python中的reduce函數
python中的reduce內建函數是一個二元操作函數,用來將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給reduce中的函數func()(必須是一個二元操作函數)先對集合中的第1,2個數據進行操作,得到的結果再與第三個數據用func()函數運算,最後得到一個結果。reduce內建函數有兩個參數,第一個參數是函數,第二個是要運算的數據。
如:
1、def add(x,y):
return x+y
print reduce(add,(1,2,3,4,5,6))
注:結果輸出1+2+3+4+5+6的結果即21。
2、def multiply(x,y):
return x*y
print reduce(multiply,range(1,7))#計算6的階乘
注:結果輸出1*2*3*4*5*6的結果即720。
很多小夥伴找我問:老鐵,這些代碼我寫的和你一樣,為什麼我的不行。其實這是最基本的函數,你照葫蘆畫瓢是沒什麼多大的作用的。我不會直接告訴你答案也不是我不想告訴你,而是希望你能跟著思路,自己找到答案,這才是真的學會了,掌握了這其中的知識點,下次在遇到就會了,而不是到處去問。如果你還在迷茫,不知道該往哪個方向走,如果你還找不到Python的入門,如果你還在為碰到各種知識點不會而苦惱,那就加小編自己弄的一個交流學習基地吧。大家可以加入交流基地:58937142,裡面新手入門資料,可以說從零到項目實戰,都是可以免費獲取的,還有熱心腸的答疑小夥伴為各位免費解答問題,熱心腸的小夥伴也是蠻多的。不失為是一個交流的的好地方,小編在這裡邀請大家加入我的大家庭。歡迎你的到來。一起交流學習!共同進步!小編等你!