函數其實一段帶名字的代碼段,咱們能夠根據代碼段,重複執行某一段代碼段,或者有條件的執行某一段代碼段。編程
將一段代碼定義成函數後,咱們能夠很方便的根據本身的需求,隨時調用該代碼段。遇到需求變化的時候,只須要修改該函數,就能夠知足需求,不須要處處修改特定的代碼。編程語言
好比咱們定義一個print hello的函數:ide
def say_hello(): print("Hello!") say_hello() ''' Hello! '''
咱們能夠看到,咱們使用def來定義函數, 以冒號結尾。 輸入回車後,ide會自動縮進,縮進後的代碼就是函數的定義體。定義完函數體後,咱們一般空一行表示定義完函數。函數
咱們直接輸入函數名,便可調用函數。ui
咱們還能夠向函數傳遞「消息」,在編程語言中咱們稱之爲參數。好比咱們修改函數,能夠向其傳遞一我的名,並輸出想要語句。spa
def say_hello(name): print(name + ", Hello!") say_hello('Ralf') ''' Ralf, Hello! '''
經過上面代碼,咱們能夠看到,咱們從新修改了函數,增長了一個參數 name, 修改了函數體。這樣咱們能夠根據本身的須要,向函數傳遞消息,並輸出想要的結果。code
函數定義中的參數,咱們一般稱之爲 形參,好比上述例子中的變量name, 這個變量只在函數定義中使用,並不具備實際的值。咱們在調用函數時,傳遞的消息或者說變量,咱們稱之爲實參,是咱們「實際「上想要使用的參數或者數值,變量。blog
一般狀況下,咱們必須按照事先定義好的參數,依次傳遞給函數體,才能正確得出想要的結果。ci
def say_hello(name, city): print(name + ", Welcome to " + city + "!" ) say_hello('Ralf', "Shanghai")
''' Ralf, Welcome to Shanghai! '''
def say_hello(name, city): print(name + ", Welcome to " + city + "!" ) say_hello('Shanghai', "Ralf")
''' Shanghai, Welcome to Ralf! '''
def say_hello(name, city): print(name + ", Welcome to " + city + "!" ) say_hello('Ralf')
''' Traceback (most recent call last): File "D:/PythonStudy/test.py", line 31, in <module> say_hello('Ralf') TypeError: say_hello() missing 1 required positional argument: 'city' '''
咱們可使用關鍵字的形式來規避上面例子中出現的錯誤,即在調用函數時,使用 形參 = value的方式來調用函數:it
def say_hello(name, city): print(name + ", Welcome to " + city + "!" ) say_hello(city = "Shanghai", name = 'Ralf')
'''
輸出: Ralf, Welcome to Shanghai! '''
在定義函數時,咱們也能夠定義一些參數默認值,這樣在調用,若是給了實參,函數就使用實參,沒有給值,就是用默認值。
def say_hello(name, city = "Shanghai"): print(name + ", Welcome to " + city + "!" ) # 使用默認值 say_hello("Ralf") #使用實際值 say_hello("Rachel", "Beijing")
''' 輸出: Ralf, Welcome to Shanghai! Rachel, Welcome to Beijing! '''
返回值:
函數不只能夠接受外部傳送的變量參數,也能夠輸出一個返回值給調用者。
def say_hello(name, city = "Shanghai"): return name + ", Welcome to " + city + "!" out_message = say_hello("Rachel", "Beijing") print(out_message) ''' 輸出: Rachel, Welcome to Beijing! '''
返回一個列表:
def born_city(name, city = "Shanghai"): return [name, city] out_message = born_city("Rachel", "Beijing") print(type(out_message)) print(out_message) ''' 輸出: <class 'list'> ['Rachel', 'Beijing'] '''
返回一個字典:
def born_city(name, city = "Shanghai"): return {'name': name, 'city': city} out_message = born_city("Rachel", "Beijing") print(type(out_message)) print(out_message) ''' 輸出: <class 'dict'> {'name': 'Rachel', 'city': 'Beijing'} '''
傳遞任意數量的實參,有時候咱們不肯定,實際參數有幾個,能夠能是一個也多是多個,要怎麼定義哪。咱們能夠在形參前面加一個星號,表示這個參數能夠是多個:
def say_hello(*names): print(names) out_message = say_hello("Rachel", "Ralf", "Terry") print(out_message) ''' 輸出: ('Rachel', 'Ralf', 'Terry') '''
注意函數返回了一個元組,即使函數只輸入一個參數,返回的也是一個元組。
結合實參和任意數量的實參:
def say_hello(words, *names): for name in names: print(words + ", " + name) out_message = say_hello("hello", "Rachel", "Ralf", "Terry") print(out_message) ''' 輸出: hello, Rachel hello, Ralf hello, Terry '''
使用任意數量的關鍵字實參。有時候咱們須要接受任意數量的實參,可是不知傳遞給函數的會是什麼樣的信息。在這種狀況下,咱們能夠將函數編寫成接受任意數量的 鍵值對,即字典的形式。方式爲加兩個冒號 **dict:
def pepole_info(name, sex, **others): print(name + ": "+ sex ) for key, value in others.items(): print(key + ": " + value) out_message = pepole_info("Ralf", "male", height = "175", hobby = "football") print(out_message) ''' 輸出: Ralf: male height: 175 hobby: football '''