【語言對比】函數的定義

來源:互聯網
上載者:User

標籤:函數   python   電議   

    函數,是一小部分功能的集合。對於純物件導向語言的JAVA而已,並沒有獨立於類之外的函數。這裡不參與對比。和C++一樣,Python支援單獨定義函數,且函數的範圍為也可以理解為是Global的。只要把這個module import進來了,裡面的函數就能直接使用

   C++中函數的定義格式非常簡單:傳回值 函數名(參數...){函數體},就構成了一個函數。

   而在Python中,因為是動態語言,所以不需要傳回值類型定義;同樣參數也只有名稱,沒有類型;此外,python給函數增加了一個關鍵def來標識,這點和C++中也不太一樣。

範例:

>>> def sum(a,b):

return a+b


>>> print sum(1,4)

5

    Python中的函數參數支援預設值,這點和C++中一樣,但是JAVA中的函數是不支援預設值的。但是,python中函數參數值有個最大的不同在於,它的預設參數僅僅在第一次使用的時候進行判斷,之後再調用該函數時,就直接採用第一次使用的那個對象,而不是再進行一次賦值操作。由於python的這個特性,使的在使用可變對象(例如list、dictionary以及class)作為預設參數時,需要尤其注意;因為很有可能這個對象在使用的過程中取值發生了變化,導致同樣是採用預設參數調用該函數,前後兩次調用的結果卻不一樣。

例如:定義函數f,第二個參數的預設參數是一個空的list,在執行完該函數後,這個list中的取值,不再是空的,而是有了一個a對象;當我們第二次調用f,仍然僅傳入一個參數,第二個參數採用預設值時,此時的預設值不再是空了,而是包含了一個a對象的list,導致第二次調用f,返回的結果是[a,a]。如果不想要這樣的結果,就需要把預設參數L的取值,修改為None,讓其不能被改變。

>>> def f(a,L=[]):

L.append(a)

return L

>>> print f(1)

[1]

>>> print f(2)

[1, 2]

      這點其實和C++中採用全域變數作為參數的預設值一樣,函數的調用是會根據全域變數的取值變化而變化的;我們可以理解為Python自己用一個變數在第一次調用該函數時儲存了其預設變數的取值,如果有操作修改了該變數,那麼下一次調用該函數時,python仍然使用該變數去操作,自然結果就不同了。

    除了預設值外,python函數還支援通過參數名稱來指定參數,例如下面這個函數,一共有a,b,c三個參數,其中b和都設定了預設值,在調用函數的時候,可以不按照函數定義時參數的順序,而是通過參數的名稱,指定參數的取值。在C++中,我們調用函數時是不能寫錯參數的順序的。

>>> def max(a,b=3,c="hell0"):

print a

print b

print c

>>> max(c="ttt",a="44")

44

3

ttt

     Python的函數傳參還有一個非常奇葩我覺得不可理解的功能,居然支援傳入dictionary;看下面這個函數定義的例子,*c表示支援傳入不定個數個參數,**d表示的是傳入不定個數個key-value對。函數傳入不定參,在C++也支援,通過...來標識,取參數的值時,是通過第一個參數的地址位移來擷取對象的取值的。Python的實現和JAVA比較類似,都是通過數組來實現不定長參數的,雖然JAVA中也是通過...來標識,但是本質上和C++有很大的區別。


>>> def f(a,*c,**d):

print a

for i in c:

print i

keys = sorted(d.keys())

for k in keys:

print k, ":", d[k]

>>> f(1,"fsfer",hit="rwerwe",get="werwe")

1

fsfer

get : werwe

hit : rwerwe


    從整體上來說,python的函數比C++和JAVA函數的功能都更強大一些,雖然這些更為強大的功能未必有很大的用途。

本文出自 “星光” 部落格,請務必保留此出處http://galaxyflower.blog.51cto.com/9006676/1530075

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.