溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python自定義函數(shù)有哪些寫法及用法

發(fā)布時間:2020-08-25 13:36:38 來源:億速云 閱讀:185 作者:Leah 欄目:編程語言

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)python自定義函數(shù)有哪些寫法及用法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

函數(shù)是什么

函數(shù)是一組操作的集合,并賦予它一個名字。你已經(jīng)使用過許多 Python 內(nèi)置的函數(shù),例如 string.title() 和 list.sort() 。我們也可以定義自己的函數(shù),它們可以“教導(dǎo)” Python 作一些新的行為。

通用語法

一個函數(shù)通常如下所示:

# Let's define a function.
def function_name(argument_1, argument_2):
    # Do whatever we want this function to do,
    #  using argument_1 and argument_2

# Use function_name to call the function.
function_name(value_1, value_2)

這段代碼并不能運行,但顯示了函數(shù)的通常用法。

定義一個函數(shù)

使用關(guān)鍵字 def 告訴 Python 你將要定義一個函數(shù)。

給你的函數(shù)起一個名字。函數(shù)名應(yīng)當(dāng)能表明函數(shù)是干什么的。

給函數(shù)需要的數(shù)據(jù)起名稱。

它們是變量名,而且只在函數(shù)里用。

這些名稱被稱為函數(shù)的參數(shù)(arguments)

確保函數(shù)的定義以冒號結(jié)束。

在函數(shù)內(nèi)部,寫下任意你想要的代碼。

使用你的函數(shù)

函數(shù)名后跟圓括號調(diào)用函數(shù)。

在圓括號中,給出函數(shù)運行需要的數(shù)據(jù)。

函數(shù)中的參數(shù)可以是變量,例如 current_name 和 current_age,也可以是實際的數(shù)據(jù),例如 'eric' 和 5。

第一個例子

第一個簡單的例子,我們實現(xiàn)一個道賀的程序。我們先實現(xiàn)一個不用函數(shù)的版本,嘗試去理解函數(shù)的作用。如下所示:

print("You are doing good work, Adriana!")
print("Thank you very much for your efforts on this project.")

print("\nYou are doing good work, Billy!")
print("Thank you very much for your efforts on this project.")

print("\nYou are doing good work, Caroline!")
print("Thank you very much for your efforts on this project.")

上述代碼有很多重復(fù)的地方,函數(shù)就是用來替代重復(fù)的代碼,在需要的地方引用它。使用函數(shù)后的代碼如下所示:

def thank_you(name):
    # This function prints a two-line personalized thank you message.
    print("\nYou are doing good work, %s!" % name)
    print("Thank you very much for your efforts on this project.")
    
thank_you('Adriana')
thank_you('Billy')
thank_you('Caroline')

在初始代碼中,每條被打印的語句中,除了名字其他部分都是相同的。當(dāng)你看到這樣的重復(fù)語句后,就可以使用函數(shù)使你的程序更有效率。

一個常見的錯誤

函數(shù)一定要在使用之前定義。否則就會引起錯誤。示例如下:

thank_you('Adriana')
thank_you('Billy')
thank_you('Caroline')

def thank_you(name):
    # This function prints a two-line personalized thank you message.
    print("\nYou are doing good work, %s!" % name)
    print("Thank you very much for your efforts on this project.")

第一行先調(diào)用了函數(shù),但是 Python 不知道如何運行這個函數(shù)。只有在調(diào)用它之前定義才能正確運行。

第二個例子

在我們介紹列表中的排序方法時,寫了很多重復(fù)的代碼。讓我們先來看看不使用函數(shù)情況下的代碼。如下所示:

students = ['bernice', 'aaron', 'cody']

# Put students in alphabetical order.
students.sort()

# Display the list in its current order.
print("Our students are currently in alphabetical order.")
for student in students:
    print(student.title())

# Put students in reverse alphabetical order.
students.sort(reverse=True)

# Display the list in its current order.
print("\nOur students are now in reverse alphabetical order.")
for student in students:
    print(student.title())

接下來使用函數(shù)來實現(xiàn)相同的功能。代碼如下所示:

def show_students(students, message):
    # Print out a message, and then the list of students
    print(message)
    for student in students:
        print(student.title())

students = ['bernice', 'aaron', 'cody']

# Put students in alphabetical order.
students.sort()
show_students(students, "Our students are currently in alphabetical order.")

#Put students in reverse alphabetical order.
students.sort(reverse=True)
show_students(students, "\nOur students are now in reverse alphabetical order.")

這段代碼就簡潔的多了。我們想要顯示列表中的學(xué)生名字并展示一條提示信息。給這個操作賦予一個名字 show_students() 。

這個函數(shù)需要兩條信息來完成它的工作。學(xué)生列表和一條要展示的信息。在函數(shù)內(nèi)部,打印要展示的信息并循環(huán)打印學(xué)生列表。

現(xiàn)在為止我們的程序變得相當(dāng)簡潔,我們只需要關(guān)注重復(fù)代碼中不同的部分即可。程序的可讀性也提高了。

使用函數(shù)的優(yōu)點

通過這些例子,你可能已經(jīng)體會到使用函數(shù)的好處:

在這個簡單的例子中,我們節(jié)省了不少的工作量。在更大的程序中,將會節(jié)省更多的工作量。

當(dāng)一個函數(shù)可以工作后,我們不必?fù)?dān)心函數(shù)的代碼。每次在程序中重復(fù)使用函數(shù)時,都是一次檢驗函數(shù)的機(jī)會。每次發(fā)現(xiàn) bug 時,只需要修改函數(shù)代碼而不必在每個重復(fù)的地方修改。

同理,在完善,增添代碼功能時,只需要修改函數(shù)內(nèi)部代碼即可。

返回值

每個函數(shù)都可以返回一個值。返回值可以是當(dāng)前函數(shù)主要功能外無足輕重的功能,也可以是函數(shù)的主要功能。下述代碼通過數(shù)字返回相應(yīng)的單詞。

def get_number_word(number):
    # Takes in a numerical value, and returns
    #  the word corresponding to that number.
    if number == 1:
        return 'one'
    elif number == 2:
        return 'two'
    elif number == 3:
        return 'three'
    # ...
    
# Let's try out our function.
for current_number in range(0,4):
    number_word = get_number_word(current_number)
    print(current_number, number_word)

在上述代碼中,輸出的第一行是 None,這是一個邏輯錯誤。函數(shù)接受一個參數(shù) 0,這個變量不在函數(shù) if 鏈的判斷范圍內(nèi),返回了一個 None。我們需要添加一個 else 來處理不在判斷范圍內(nèi)的情況。如下所示:

def get_number_word(number):
    # Takes in a numerical value, and returns
    #  the word corresponding to that number.
    if number == 0:
        return 'zero'
    elif number == 1:
        return 'one'
    elif number == 2:
        return 'two'
    elif number == 3:
        return 'three'
    else:
        return "I'm sorry, I don't know that number."
    
# Let's try out our function.
for current_number in range(0,6):
    number_word = get_number_word(current_number)
    print(current_number, number_word)

如果你在函數(shù)中使用返回語句,謹(jǐn)記在碰到返回返回語句后函數(shù)會立即停止執(zhí)行。例如,我們可以在函數(shù)的返回語句后添加一條語句,這條語句永遠(yuǎn)都不會被執(zhí)行。如下所示:

def get_number_word(number):
    # Takes in a numerical value, and returns
    #  the word corresponding to that number.
    if number == 0:
        return 'zero'
    elif number == 1:
        return 'one'
    elif number == 2:
        return 'two'
    elif number == 3:
        return 'three'
    else:
        return "I'm sorry, I don't know that number."
    
    # This line will never execute, because the function has already
    #  returned a value and stopped executing.
    print("This message will never be printed.")
    
# Let's try out our function.
for current_number in range(0,6):
    number_word = get_number_word(current_number)
    print(current_number, number_word)

上述就是小編為大家分享的python自定義函數(shù)有哪些寫法及用法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI