App下載

Python 函數(shù)示例——如何使用參數(shù)聲明和調(diào)用

知名氣人小說寫手 2021-08-25 10:26:43 瀏覽數(shù) (3128)
反饋

Python 有一堆有用的內(nèi)置函數(shù),你可以用它來做各種事情。每個函數(shù)都能都執(zhí)行特定的任務。但是您知道 Python 還允許您定義自己的函數(shù)嗎?本文將向您展示如何創(chuàng)建和調(diào)用您自己的 Python 函數(shù)。它還將為您概述如何將輸入?yún)?shù)和參數(shù)傳遞給您的函數(shù)。

什么是函數(shù)?

函數(shù)是執(zhí)行特定任務的隔離代碼塊。

函數(shù)在編程中很有用,因為它們消除了在整個程序中不必要和過多的代碼復制和粘貼。

如果在不同的地方經(jīng)常需要某個動作,這是一個很好的指標,你可以為它編寫一個函數(shù)。函數(shù)是可重用的。

函數(shù)還有助于組織您的代碼。

如果您需要進行更改,則只需更新該特定功能。這使您不必通過復制和粘貼來搜索分散在程序中不同位置的相同代碼的不同部分。

這符合軟件開發(fā)中的 DRY(不要重復自己)原則。

函數(shù)內(nèi)的代碼僅在函數(shù)被調(diào)用時運行。

函數(shù)可以接受參數(shù)和默認值,并且在代碼運行后可能會或不會將值返回給調(diào)用者。

如何在 Python 中定義函數(shù)

在 Python 中創(chuàng)建函數(shù)的一般語法如下所示:

def function_name(parameters):
    function body

讓我們分解一下這里發(fā)生的事情:

  • def 是一個關(guān)鍵字,告訴 Python 正在定義一個新函數(shù)。
  • 接下來是您選擇的有效函數(shù)名稱。有效名稱以字母或下劃線開頭,但可以包含數(shù)字。單詞是小寫的并用下劃線分隔。重要的是要知道函數(shù)名不能是 Python 保留關(guān)鍵字。
  • 然后我們有一組左括號和右括號,()。在它們內(nèi)部,可以有零個、一個或多個可選的逗號分隔參數(shù)及其可選的默認值。這些被傳遞給函數(shù)。
  • 接下來是一個冒號,:結(jié)束函數(shù)的定義行。
  • 然后是一個新行,后跟縮進級別(您可以使用鍵盤或使用 1 個 Tab 使用 4 個空格來執(zhí)行此操作)。縮進很重要,因為它讓 Python 知道哪些代碼將屬于函數(shù)。
  • 然后我們有函數(shù)的主體。這里是要執(zhí)行的代碼 - 調(diào)用函數(shù)時要執(zhí)行的操作的內(nèi)容。
  • 最后,函數(shù)體中有一個可選的return 語句,在函數(shù)退出時將一個值傳回給調(diào)用者。

請記住,如果您在嘗試定義新函數(shù)時忘記了括號()或冒號:,Python 將報錯:SyntaxError.

如何在 Python 中定義和調(diào)用基本函數(shù)

下面是一個沒有 return 語句并且不接受任何參數(shù)的基本函數(shù)的示例。

它只是hello world在被調(diào)用時打印。

def hello_world_func():
    print("hello world")

一旦定義了函數(shù),代碼就不會自行運行。

要執(zhí)行函數(shù)內(nèi)的代碼,您必須進行函數(shù)調(diào)用或函數(shù)調(diào)用。

然后,您可以根據(jù)需要多次調(diào)用該函數(shù)。

要調(diào)用一個函數(shù),你需要這樣做:

function_name(arguments)

這是代碼的細分:

  • 鍵入函數(shù)名稱。
  • 函數(shù)名后面必須跟括號。如果有任何必需的參數(shù),它們必須在括號中傳遞。如果函數(shù)不接受任何參數(shù),您仍然需要括號。

要調(diào)用上面示例中不接受任何參數(shù)的函數(shù),請執(zhí)行以下操作:

hello_world_func()

#Output
#hello world 

如何定義和調(diào)用帶參數(shù)的函數(shù)

到目前為止,您已經(jīng)看到了一些簡單的函數(shù),除了向控制臺打印一些東西之外,它們實際上并沒有做太多事情。

如果你想向函數(shù)傳遞一些額外的數(shù)據(jù)怎么辦?

我們在這里使用了參數(shù)等術(shù)語。

他們的定義究竟是什么?

參數(shù)是將信息傳遞給函數(shù)的命名占位符。

它們充當在函數(shù)定義行中本地定義的變量。

def hello_to_you(name):
   print("Hello " + name)

在上面的例子中,有一個參數(shù),name。

我們可以使用f-string formatting它來代替——它的工作方式與前面的例子相同:

def hello_to_you(name):
    print(f"Hello {name}")

括號內(nèi)可以有一個參數(shù)列表,所有參數(shù)都用逗號分隔。

def name_and_age(name,age):
    print(f"I am {name} and I am {age} years old!")

這里,函數(shù)中的參數(shù)是name和age。

當一個函數(shù)被調(diào)用時,參數(shù)被傳入。

參數(shù)與參數(shù)一樣,是傳遞給函數(shù)的信息。

特別是,它們是與函數(shù)定義中的參數(shù)對應的實際值。

調(diào)用上一個示例中的函數(shù)并傳入?yún)?shù)將如下所示:

def hello_to_you(name):
    print(f"Hello {name}")
    
    
hello_to_you("Timmy")
#Output
# Hello Timmy

該函數(shù)可以被多次調(diào)用,每次傳入不同的值。

def hello_to_you(name):
    print(f"Hello {name}")
    
hello_to_you("Timmy")
hello_to_you("Kristy")
hello_to_you("Jackie")
hello_to_you("Liv")

#Output:
#"Hello Timmy"
#"Hello Kristy"
#"Hello Jackie"
#"Hello Liv"

到目前為止提出的參數(shù)稱為位置參數(shù)。

非常需要所有位置參數(shù)。

位置參數(shù)的數(shù)量很重要

調(diào)用函數(shù)時,需要傳入正確數(shù)量的參數(shù),否則會報錯。

對于位置參數(shù),傳遞給函數(shù)調(diào)用的參數(shù)數(shù)量必須與函數(shù)定義中的參數(shù)數(shù)量完全相同。

您不能遺漏任何內(nèi)容或添加任何內(nèi)容。

假設(shè)您有一個接受兩個參數(shù)的函數(shù):

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")

如果只傳入一個參數(shù)調(diào)用函數(shù),像這樣,會出現(xiàn)錯誤:

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")
    

hello_to_you("Timmy")

輸出:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: hello_to_you() missing 1 required positional argument: 'last_name'

如果在傳入三個參數(shù)的情況下調(diào)用該函數(shù),則會再次出現(xiàn)錯誤:

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")
    

hello_to_you("Timmy","Jones",34)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: hello_to_you() takes 2 positional arguments but 3 were given

如果我們不傳入任何參數(shù),也會出現(xiàn)錯誤。

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")
    

hello_to_you()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: hello_to_you() missing 2 required positional arguments: 'first_name' and 'last_name'

相反,我們需要兩個參數(shù),因為函數(shù)定義中列出了兩個參數(shù)。

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")
    

hello_to_you("Timmy","Jones")
#Output:
# Hello,Timmy Jones

位置參數(shù)的順序很重要

除了包括正確數(shù)量的參數(shù)外,重要的是要注意參數(shù)傳遞的順序很重要。

參數(shù)的傳遞順序必須與函數(shù)定義中聲明的參數(shù)的順序完全相同。

它的工作原理類似于變量賦值。

第一個參數(shù)是函數(shù)定義中第一個參數(shù)的值。第二個參數(shù)是函數(shù) ddefinition 中第二個參數(shù)的值——依此類推。

def hello_to_you(first_name,last_name):
    print(f"Hello, {first_name} {last_name}")
    

hello_to_you("Timmy","Jones")
#Output
#Hello,Timmy Jones 
#you can visualise it like:
#first_name = "Timmy"
#last_name = "Jones"

如果順序不正確,輸出可能沒有多大意義,也不是您想要的。

def fave_language(name,language):
    print(f"Hello, I am {name} and my favorite programming language is {language}")

    
fave_language("Python","Dionysia")
#output:
#Hello, I am Python and my favorite programming language is Dionysia
#it is like you did
#name="Python"
#language = "Dionysia"

如何在 Python 函數(shù)中使用關(guān)鍵字參數(shù)

到目前為止,您已經(jīng)看到了一種類型的參數(shù),位置參數(shù)。

使用位置參數(shù),只使用在函數(shù)調(diào)用中傳遞的值來調(diào)用函數(shù)。在那里,每個值直接對應于函數(shù)定義中每個參數(shù)的數(shù)量、順序和位置。

然而,Python 中的函數(shù)可以接受另一種類型的參數(shù),即關(guān)鍵字參數(shù)。

在這種情況下,不是在函數(shù)調(diào)用中只傳遞值,而是指定參數(shù)的名稱,然后指定要分配給它的值,格式為key = value.

每個鍵匹配函數(shù)定義中的每個參數(shù)。

顯式調(diào)用參數(shù)名稱和它們采用的值有助于更清楚地了解您傳入的內(nèi)容并避免任何可能的混淆。

def fave_language(name,language):
    print(f"Hello, I am {name} and my favorite programming language is {language}")

    
fave_language(name="Dionysia",language="Python")
#output:
#Hello, I am Dionysia and my favorite programming language is Python

如上所示,關(guān)鍵字參數(shù)可以按特定順序排列。但它們比位置參數(shù)更靈活,因為參數(shù)的順序現(xiàn)在無關(guān)緊要。

所以你可以這樣做并且不會有錯誤:

def fave_language(name,language):
    print(f"Hello, I am {name} and my favorite programming language is {language}")

    
fave_language(language="Python",name="Dionysia")
#output:
#Hello, I am Dionysia and my favorite programming language is Python

但是您仍然必須提供正確數(shù)量的參數(shù)。

您可以在函數(shù)調(diào)用中同時使用位置參數(shù)和關(guān)鍵字參數(shù),如下例所示,其中有一個位置參數(shù)和一個關(guān)鍵字參數(shù):

def fave_language(name,language):
    print(f"Hello, I am {name} and my favorite programming language is {language}")

    
fave_language("dionysia",language="Python")
#output:
#Hello, I am dionysia and my favorite programming language is Python

在這種情況下,順序又很重要。

位置參數(shù)總是首先出現(xiàn),所有關(guān)鍵字參數(shù)都應該跟在位置參數(shù)之后。否則會報錯:

def fave_language(name,language):
    print(f"Hello, I am {name} and my favorite programming language is {language}")

    
fave_language(language="Python","dionysia")

如何在 Python 中定義具有默認值的參數(shù)

函數(shù)參數(shù)也可以有默認值。它們被稱為默認或可選參數(shù)。

對于具有默認值的函數(shù)參數(shù),您必須為函數(shù)定義中的參數(shù)分配一個默認值。

您使用key=value表單執(zhí)行此操作,其中value將是該參數(shù)的默認值。

def fave_language(language="python"):
    print(f"My favorite  programming language is {language}!")
    
fave_language()
#output
#My favorite  programming language is python!

正如你看到的,都是缺省參數(shù)未在函數(shù)調(diào)用所需,和值language將始終默認到Python如果呼叫中沒有提供其他值。

但是,如果您在函數(shù)調(diào)用中提供另一個值,則可以輕松覆蓋默認值:

def fave_language(language="python"):
    print(f"My favorite  programming language is {language}!")
    
fave_language("Java")
#prints "My favorite  programming language is Java!" to the console

可以有多個默認值傳遞給函數(shù)。

調(diào)用函數(shù)時,可以提供無、一個、部分或全部默認參數(shù),順序無關(guān)緊要。

def personal_details(name="Jimmy",age=28,city="Berlin"):
    print(f"I am {name},{age} years old and live in {city}") 
    
#We can do:

personal_details()
#output:
#I am Jimmy,28 years old and live in Berlin

personal_details(age=30)
#I am Jimmy,30 years old and live in Berlin

personal_details(city="Athens",name="Ben",age=24)
##I am Ben,24 years old and live in Athens

默認參數(shù)可以與函數(shù)調(diào)用中的非默認參數(shù)組合。

這是一個接受兩個參數(shù)的函數(shù):一個是位置性的,非默認的 ( name) 和一個可選的,默認的 ( language)。

def fave_language(name,language="Python"):
    print(f"My name is {name} and my favorite  programming language is {language}!")
    
fave_language("Dionysia")
#output:
#"My name is Dionysia and my favorite  programming language is Python!" 

默認參數(shù)langyage="Python"是optional。但是位置參數(shù) ,name總是需要的。如果language未傳入另一個,則該值將始終默認為 Python。

這里要提到的另一件事是,當默認值和非默認值一起使用時,它們在函數(shù)定義中的定義順序很重要。

所有位置參數(shù)都在前面,然后是默認參數(shù)。

這將不起作用:

def fave_language(language="Python",name):
    print(f"My name is {name} and my favorite  programming language is {language}!")
    
fave_language("Dionysia")

輸出:

 File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

結(jié)論

在本文中,您學習了如何在 Python 編程語言中聲明函數(shù)并使用參數(shù)調(diào)用它們。

這是關(guān)于如何創(chuàng)建簡單函數(shù)以及如何使用參數(shù)將數(shù)據(jù)傳遞給它們的介紹。我們還討論了不同類型的參數(shù),如positional、keyword和default參數(shù)。

回顧一下:

  • 位置參數(shù)的順序和數(shù)量很重要。
  • 對于關(guān)鍵字參數(shù),順序無關(guān)緊要。但是,數(shù)字確實很重要,因為每個關(guān)鍵字參數(shù)都對應于函數(shù)定義中的每個參數(shù)。
  • 默認參數(shù)完全是可選的。您可以傳遞所有這些,其中一些,或者根本不傳遞。


0 人點贊