1. 程式人生 > >[Python]學習基礎篇:函數

[Python]學習基礎篇:函數

函數的那些事

函數

函數是一段特定功能的,被封裝的,可重用的程序代碼段。給這段程序一個名稱,然後就可以在其他程序的任何地方通過這個名稱任意地運行這個斷碼塊。


  • 函數的定義及調用
    對於Python函數的定義,不同於大家熟知的c,java等編程語言的定義,以java為例,在定義函數時,要指明函數的返回值類型,要麽為void,要麽為替他數據類型,同時定義函數時也可以指明函數為私有,共有,靜態等,而Python函數的定義非常簡單,如下:
    格式:def function_name([參數]):
    對於函數的調用直接在主函數體重使用方法名+參數就行


  • 局部變量和全局變量
    局部變量:在函數體中起作用的變量,而其他函數體無法使用。
    全局變量:在函數內部給一個定義在函數外能夠賦值的變量。

    全局變量的定義:
    格式:global 變量1,變量2….

(1).方式一
一個變量已在函數外部定義,若要在函數內部進行復制的話,在函數內部使用global關鍵字進行定義。
!/usr/pythondef  sum():
    global x    
    print x
x=4
sum()
(2).方式二
在函數內部直接定義一個全局變量,函數外沒有聲明。
!/usr/pythondef  func():
    global x
    x=4
    print x
func()
print 'x=',x
  • 參數的類型
    (1).默認參數
    默認參數是指在定義函數參數時,給參數設置默認值,調用函數時可以給此參數傳值,也可以不傳。

    格式: def function(形參1,形參2=value..):

!/bin/pythondef function(i,c=2):
    print 'i=?c=?' i,c
function(1)
function(3,5)

註意:對於默認參數的定義,要放在替他參數之後。
(2).關鍵參數
關鍵參數指在函數中有多個參數時,調用函數時不想安裝參數的順序進行傳值,可以通過命名為參數賦值。

!/bin/pythondef 
func(i,a=2,c=4):
    print '1=?,a=?,c=?'func(1,c=6)     //i的值為1,a=2,c=6
func(3,5)       //i=3,b=5
func(c=8,a=4)   //c=8,a=4

(3).可變長度參數
你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,和上述2種參數不同,聲明時不會命名。基本語法如下:
def func(*pa):

!/bin/pythondef  func(*pa):
    print pa
func(1,2,3,4,5)

使用標識符’*’表示參數的長度可以變化,此時參數以tuple的形式出現。
那麽如果我們想在傳遞參數時,給函數傳遞一個dict怎麽辦呢?
此時使用’**’標識符可以實現傳遞一個字典

!/bin/pythondef  func(**pa):
    print pa
func(x=1,y=3,z=5)
運行結果:{'x':1,'y':3,'z':5}

(4).序列參數
在Python中默認的使用序列作為參數,只能實現單變量的傳遞,但是對於參數個數不匹配的問題時,在實參前加*可以實現把實參分解給各個形參,實現傳遞list。

!/bin/pythondef  func(a,b,c,d):
    print a+b+c+d
li=[1,2,3]
func(1,*li)

  • 例題
    (1).編寫函數,判斷一個年份是否為閏年。

 !/bin/python def run(x):
     if (x%4==0 and x%100!=0) or x%400==0:         
             print 'y'
     else:         
         print 'n'
a=input('請輸入一個年份:')
run(a)

(2).編寫函數,判斷一個數是否為水仙花數。

!/bin/pythondef  
flower(x):
    a=int(x/100)   //返回整數部分
    b=int((x-a*100)/10)
    c=x-a*100-b*10
    print a    
    print b    
    print c    
    if pow(a,3)*pow(b,3)*pow(c,3)==x:        
         print x,'為水仙花數'
    else:        
         print x,'不是水仙花數'
a=int(input('請輸入一個數:'))
flower(a)
  • 高階函數
    什麽什高階函數呢?
    首先我們看變量指向函數
    在編程語言中我們可以將一個值賦給變量,那麽可不可以將函數賦給變量呢?我們舉一個例子:abs(x)

但我們在程序中直接使用abs()時,此時屬於函數的調用
>>>abs(-10)
10
那麽我們將函數本身賦值給變量
>>>s=abs()
>>>s
<built-in function abs>
此時,變量指向了函數,我們來調用這個變量
>>>s(-10)
10

既然函數可以賦值給變量,函數在傳值時傳入的是變量,那麽一個函數也可以接受哪一個函數作為參數,那麽這種函數就稱之高階函數
例如:

!/bin/pythondef  
func(a,c,f):
    print f(a)    
    print f(c)
f=abs()
func(-39,-2,f)
  • 返回函數
    對於一般函數而言要麽返回一個值,要麽不返回。既然在傳入參數時可以傳入函數,那麽在返回時也可以返回函數。
    例如:我們在代碼前面調用一個函數,但是此時不需要這個函數結果,而是在後面的代碼中,根據需要再計算怎麽辦?此時可以不返回結果,而是返回求和的函數。

!/bin/pythondef func():
    def che(x,y):
        return x*y    
    return che
f=func()
f()

註意:在函數內部定義一個函數時不要使用循環語句。


[Python]學習基礎篇:函數