Python入門(八) 函數基礎

來源:互聯網
上載者:User

標籤:

    1. 定義一個函數:

    1)必須以def開頭

    2)參數之間用,隔開

    3)函數的內容以冒號:開始,並且縮排

    4)不帶運算式的return,相當於返回None

def function_name(parameters):    #do something    ...    return [expression]
def cal_sum(a,b):    return (a + b)   #調用函數sum = cal_sum(2, 6)print(sum)>>> 8

    2. 函數的參數傳遞    

    我們知道在c++中,函數的參數既可以傳遞值,也可以傳遞引用。那麼在Python中是怎麼樣的呢?

#改變整數def change_number(num):    print("num = ", num)    num += 1    print(‘num = ‘, num)    num = 3print(‘before change: num = ‘, num)change_number(num)print(‘after change: num = ‘, num)>>> before change: num =  3num =  3num =  4after change: num =  3
#改變字串def change_string(string):    print("string = ", string)    string = ‘hello‘    print(‘string = ‘, string)name = ‘billy‘print(‘before change: name = ‘, name)change_string(name)print(‘after change: name = ‘, name)>>> before change: name =  billystring =  billystring =  helloafter change: name =  billy
#改變listdef change_list(list_test):    print(list_test)    list_test[0] = 111    #print(list_test)list1 = [100, ‘b‘]change_list(list1)print(list1)>>> [100, ‘b‘][111, ‘b‘]

    通過上面的例子,可以看出,在Python中,對於整數、浮點數、True/False是按照值傳遞的,即會先將自己當前的值賦給函數的參數,在函數內部的任何修改均不影響外部的值。對於字串、list、dict這種變數類型,是按照引用傳遞的,即函數的參數是傳遞對象的引用,因此在函數內部的修改,均會影響到變數的值。這裡特別說明一下字串的傳遞與修改過程,首先string參數指向"billy"對象,由於Python中的字串是“不可變”對象,之後對string的修改,就是把string參數指向了"hello"對象了,而原先的name變數仍然指向"billy"對象。

    3. 預設參數:即讓該參數有一個預設值,這個在GUI編程中經常用到。

def create_label(width = 100, height = 10):    print(‘width = %d, height = %d‘ % (width, height))create_label()create_label(200)create_label(200, 30)>>> width = 100, height = 10width = 200, height = 10width = 200, height = 30

    4. 具名引數:預設的函數調用過程中,參數的傳遞是通過位置進行的,如果函數的個數比較多的情況下,我們很有可能會搞不清楚參數的位置,這個時候通過具名引數,就能很好的解決

def create_label(name, width, height = 10):    print(‘name = %s, width = %d, height = %d‘ % (name, width, height))create_label(‘label1‘, 200, 40)create_label(width=200, height=40, name=‘label2‘)>>>name = label1, width = 200, height = 40name = label2, width = 200, height = 40

    上述函數調用的效果是一樣的,不過通過具名引數,參數的位置就不用要求name必須防止在前面了。

    5.變長參數:在c語言中,用...來表示函數的參數個數不是固定的,那麼在Python中,我們首先會想到可以傳遞一個tuple, list, dict,tuple, list, dict裡面可以存放任意數量的值。如:

def cal_sum(num_list):    sum = 0    for num in num_list:        sum += num    return sumlist1 = [1, 2, 3]print(cal_sum(list1))>>>6

    課時這樣子有個缺陷,就是每次都要把要傳遞的值儲存到list中,Python通過*和**來解決,由Python幫我們完成此操作。

def cal_sum(*var_tuple):    sum = 0    for num in var_tuple:        sum += num    return sumprint(cal_sum(1, 2, 3, 4))print(cal_sum(1, 2, 3, 4, 5, 6))list1 = [1, 2, 3]print(cal_sum(*list1))>>>10216

    *不能傳遞具名引數,必須使用**

def create_window(**var_dict):    print(var_dict)    for(k, v) in var_dict.items():        print(k ,v)create_window(name=‘window1‘, height=300, width=200)dict1 = {‘name‘:‘window2‘, ‘width‘:200, ‘height‘:300}create_window(**dict1)>>>{‘name‘: ‘window1‘, ‘height‘: 300, ‘width‘: 200}name window1height 300width 200{‘name‘: ‘window2‘, ‘height‘: 300, ‘width‘: 200}name window2height 300width 200

    Note: 在函數的var_tuple參數前加上*,表示var_tuple接收的是一個tuple, 在var_dict參數前加上**,表示var_dict接收的是一個dict。

    而在調用cal_sum函數時,在list1前面加上*,表示把list1中的元素作為可變參數傳遞進去。在調用create_window函數時,在dict1前面加上**,表示把dict1中的元素作為命名的可變參數傳遞進去。

    6. 函數的傳回值。在Python中是可以有多個傳回值的

def return_value():    a = 1    b = 2    return a, b, a+bnum1, num2, num3 = return_value()print(num1, num2, num3)>>> 1 2 3

    實際上Python會將所有的傳回值存放到一個臨時的tuple中,如果只有1個變數來接收返回參數,那麼就會將此變數引用此tuple,如果有多個變數來接收返回參數,Python會對tuple變數進行unpack,此時會要求接收變數的個數與傳回值的個數一樣才行。


Python入門(八) 函數基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.