在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python函數(shù)
Python異常處理
Python循環(huán)
Python基本運(yùn)算符
Python網(wǎng)絡(luò)編程(Sockets)
Python可以開(kāi)發(fā)哪些程序?
Python XML解析和處理
Python數(shù)字
Python函數(shù)
Python變量類型
Python os模塊方法
Python迭代器
Python安裝和環(huán)境配置
Python構(gòu)造函數(shù)
Python文件對(duì)象方法
Python日期和時(shí)間
Python的歷史
Python生成器
Python+MySQL數(shù)據(jù)庫(kù)操作(PyMySQL)
Python命令行參數(shù)
Python元組
Python發(fā)送郵件
Python列表
Python文件讀寫(xiě)
Python教程
Python面向?qū)ο螅惡蛯?duì)象)
Python多線程編程
Python多重繼承
Python決策
Python是什么?
Python快速入門(mén)
Python繼承
Python字典
Python字符串
Python操作符重載
Python正則表達(dá)式
Python閉包
Python修飾器
Python功能特點(diǎn)
Python模塊

Python函數(shù)

函數(shù)是一個(gè)有組織,可重復(fù)使用的代碼塊,用于執(zhí)行單個(gè)相關(guān)操作。 函數(shù)為應(yīng)用程序提供更好的模塊化和高度的代碼重用。

我們知道,Python中也有給很多內(nèi)置的函數(shù),如print()等,但用戶也可以創(chuàng)建自己的函數(shù)。這樣的函數(shù)稱為用戶定義函數(shù)。

1.定義函數(shù)

可以定義提供所需函數(shù)的功能。 以下是在Python中定義函數(shù)的簡(jiǎn)單規(guī)則。

  • 函數(shù)塊以關(guān)鍵字def開(kāi)頭,后跟函數(shù)名和小括號(hào)(())。
  • 任何輸入?yún)?shù)或參數(shù)應(yīng)放置在這些小括號(hào)中。也可以在這些小括號(hào)內(nèi)定義參數(shù)。
  • 每個(gè)函數(shù)中的代碼塊以冒號(hào)(:)開(kāi)始,并縮進(jìn)。
  • 函數(shù)內(nèi)的第一個(gè)語(yǔ)句可以是可選語(yǔ)句 - 函數(shù)的文檔或docstring字符串。
  • 語(yǔ)句return [expression]用于退出一個(gè)函數(shù),可選地將一個(gè)表達(dá)式傳回給調(diào)用者。如果沒(méi)有使用參數(shù)的return語(yǔ)句,則它與return None相同。

語(yǔ)法

def functionname( parameters ):
    "function_docstring"
    function_suite
    return [expression]

默認(rèn)情況下,參數(shù)具有位置行為,您需要按照定義的順序通知它們或調(diào)用它們。

示例

以下函數(shù)將字符串作為輸入?yún)?shù),并在標(biāo)準(zhǔn)屏幕上打印參數(shù)的值。

def printme( str ):
    "This prints a passed string into this function"
    print (str)
    return

2.調(diào)用函數(shù)

定義一個(gè)函數(shù)需要為它起一個(gè)名字,指定要包括在函數(shù)中的參數(shù)并構(gòu)造代碼塊。
當(dāng)函數(shù)的基本結(jié)構(gòu)完成,可以通過(guò)從另一個(gè)函數(shù)調(diào)用它或直接從Python提示符執(zhí)行它。 以下是一個(gè)調(diào)用print_str()函數(shù)的例子 -

#!/usr/bin/python3

# Function definition is here
def print_str( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call print_str function
print_str("This is first call to the user defined function!")
print_str("Again second call to the same function")

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

This is first call to the user defined function!
Again second call to the same function

3.通過(guò)引用與通過(guò)值傳遞

Python語(yǔ)言中的所有參數(shù)(參數(shù))都將通過(guò)引用傳遞。如果在函數(shù)中更改參數(shù)所指的內(nèi)容,則更改也會(huì)反映在調(diào)用函數(shù)的外部。 例如 -

#!/usr/bin/python3

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   print ("Values inside the function before change: ", mylist)
   mylist[2]=50
   print ("Values inside the function after change: ", mylist)
   return

# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)

在這里,將保持對(duì)傳遞對(duì)象的引用并在相同的對(duì)象中賦值。 因此,這將產(chǎn)生以下結(jié)果 -

Values inside the function before change:  [10, 20, 30]
Values inside the function after change:  [10, 20, 50]
Values outside the function:  [10, 20, 50]

在上面的輸出結(jié)果中,可以清楚地看到,mylist[2]的值原來(lái)只在函數(shù)內(nèi)賦了一個(gè)值:50,但在函數(shù)外部的最后一個(gè)語(yǔ)句打出來(lái)的值是:50,這說(shuō)明更改也會(huì)反映在調(diào)用函數(shù)的外部。

還有一個(gè)例子:參數(shù)通過(guò)引用傳遞,引用在被調(diào)用函數(shù)內(nèi)被覆蓋。

#!/usr/bin/python3
#coding=utf-8

# Function definition is here
def changeme( mylist ):
    "This changes a passed list into this function"
    mylist = [1,2,3,4] # This would assi new reference in mylist
    print ("Values inside the function: ", mylist)
    return

# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)

參數(shù)mylistchangeme()函數(shù)的局部變量。在函數(shù)中更改mylist不影響mylist的值。函數(shù)執(zhí)行完成后,最終將產(chǎn)生以下結(jié)果 -

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

4.函數(shù)參數(shù)

可以使用以下類型的形式參數(shù)來(lái)調(diào)用函數(shù) -

  • 必需參數(shù)
  • 關(guān)鍵字參數(shù)
  • 默認(rèn)參數(shù)
  • 可變長(zhǎng)度參數(shù)

4.1.必需參數(shù)

必需參數(shù)是以正確的位置順序傳遞給函數(shù)的參數(shù)。這里,函數(shù)調(diào)用中的參數(shù)數(shù)量應(yīng)與函數(shù)定義完全一致。

如下示例中,要調(diào)用printme()函數(shù),則必需要傳遞一個(gè)參數(shù),否則會(huì)出現(xiàn)如下語(yǔ)法錯(cuò)誤 -

#!/usr/bin/python3

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# 現(xiàn)在要調(diào)用函數(shù),但不提供參數(shù)
printme()

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

提示:在調(diào)用 printme()函數(shù)時(shí),提供一個(gè)參數(shù)就可以了。如:printme('Maxsu') 。

4.2.關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)與函數(shù)調(diào)用有關(guān)。 在函數(shù)調(diào)用中使用關(guān)鍵字參數(shù)時(shí),調(diào)用者通過(guò)參數(shù)名稱來(lái)標(biāo)識(shí)參數(shù)。

這允許跳過(guò)參數(shù)或?qū)⑵渲糜跓o(wú)序狀態(tài),因?yàn)镻ython解釋器能夠使用提供的關(guān)鍵字將值與參數(shù)進(jìn)行匹配。還可以通過(guò)以下方式對(duì)printme()函數(shù)進(jìn)行關(guān)鍵字調(diào)用 -

#!/usr/bin/python3
#coding=utf-8

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call printme function
printme( str = "My string")

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

My string

以下示例給出了更清晰的映射。請(qǐng)注意,參數(shù)的順序并不重要。

#!/usr/bin/python3
#coding=utf-8

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print ("Name: ", name, "Age: ", age)
   return

# Now you can call printinfo function
printinfo( age = 25, name = "Maxsu" )
printinfo(name = "Minsu", age = 26 )

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Name:  Maxsu Age:  25
Name:  Minsu Age:  26

4.3.默認(rèn)參數(shù)

如果在該參數(shù)的函數(shù)調(diào)用中沒(méi)有提供值,則默認(rèn)參數(shù)是一個(gè)假設(shè)為默認(rèn)值的參數(shù)。 以下示例給出了默認(rèn)參數(shù)的想法,如果未通過(guò),則打印默認(rèn)年齡(age) -

#!/usr/bin/python3
#coding=utf-8

# Function definition is here
def printinfo( name, age = 25 ):
   "This prints a passed info into this function"
   print ("Name: ", name, "Age ", age)
   return

# Now you can call printinfo function
printinfo( age = 22, name = "Maxsu" )
printinfo( name = "Minsu" )

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Name:  Maxsu Age  22
Name:  Minsu Age  25

4.4.可變長(zhǎng)度參數(shù)

在定義函數(shù)時(shí),可能需要處理更多參數(shù)的函數(shù)。這些參數(shù)被稱為可變長(zhǎng)度參數(shù),并且不像要求的和默認(rèn)的參數(shù)那樣在函數(shù)定義中命名。

具有非關(guān)鍵字變量參數(shù)的函數(shù)的語(yǔ)法如下:

def functionname([formal_args,] *var_args_tuple ):
    "function_docstring"
    function_suite
    return [expression]

星號(hào)(*)放在保存所有非關(guān)鍵字變量參數(shù)值的變量名之前。 如果在函數(shù)調(diào)用期間沒(méi)有指定額外的參數(shù),則此元組保持為空。以下是一個(gè)簡(jiǎn)單的例子 -

#!/usr/bin/python3
#coding=utf-8

# Function definition is here
def printinfo( arg1, *vartuple ):
    "This prints a variable passed arguments"
    print ("Output is: ", arg1)
    for var in vartuple:
      print (var, )
    return

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Output is:  10
Output is:  70
60
50

5.匿名函數(shù)

這些函數(shù)被稱為匿名的,因?yàn)樗鼈儧](méi)有使用def關(guān)鍵字以標(biāo)準(zhǔn)方式聲明??梢允褂?code>lambda關(guān)鍵字創(chuàng)建小型匿名函數(shù)。

  • Lambda表單可以接受任意數(shù)量的參數(shù),但只能以表達(dá)式的形式返回一個(gè)值。它們不能包含命令或多個(gè)表達(dá)式。
  • 匿名函數(shù)不能直接調(diào)用打印,因?yàn)?code>lambda需要一個(gè)表達(dá)式。
  • Lambda函數(shù)有自己的本地命名空間,不能訪問(wèn)其參數(shù)列表和全局命名空間中的變量。
  • 雖然lambdas是一個(gè)單行版本的函數(shù),但它們并不等同于CC++中的內(nèi)聯(lián)語(yǔ)句,其目的是通過(guò)傳遞函數(shù)來(lái)進(jìn)行堆棧分配。

語(yǔ)法

lambda函數(shù)的語(yǔ)法只包含一個(gè)語(yǔ)句,如下所示:

lambda [arg1 [,arg2,.....argn]]:expression

以下是一個(gè)示例,以顯示lambda形式的函數(shù)如何工作 -

#!/usr/bin/python3

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2


# Now you can call sum as a function
print ("Value of total : ", sum( 10, 20 ))
print ("Value of total : ", sum( 20, 20 ))

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Value of total :  30
Value of total :  40

6.return語(yǔ)句

return [expression]語(yǔ)句退出一個(gè)函數(shù),可選地將一個(gè)表達(dá)式傳回給調(diào)用者。沒(méi)有參數(shù)的return語(yǔ)句與return None相同。

下面給出的所有例子都沒(méi)有返回任何值。可以從函數(shù)返回值,如下所示:

#!/usr/bin/python3
#coding=utf-8

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print ("Inside the function : ", total)
   return total

# Now you can call sum function
total = sum( 10, 20 )
print ("Outside the function : ", total )

全部執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Inside the function :  30
Outside the function :  30

7.變量范圍

程序中的所有變量在該程序的所有位置可能無(wú)法訪問(wèn)。這取決于在哪里聲明一個(gè)變量。變量的范圍決定了可以訪問(wèn)特定標(biāo)識(shí)符的程序部分。Python中有兩個(gè)變量的基本范圍 -

  • 全局變量
  • 局部變量

8.全局與局部變量

在函數(shù)體內(nèi)定義的變量具有局部作用域,外部定義的變量具有全局作用域。

局部變量只能在它們聲明的函數(shù)內(nèi)部訪問(wèn),而全局變量可以通過(guò)所有函數(shù)在整個(gè)程序體中訪問(wèn)。 當(dāng)調(diào)用一個(gè)函數(shù)時(shí),它內(nèi)部聲明的變量被帶入范圍。 以下是一個(gè)簡(jiǎn)單的例子 -

total = 0 # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print ("Inside the function local total : ", total)
   return total

# Now you can call sum function
sum( 10, 20 )
print ("Outside the function global total : ", total )

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Inside the function local total :  30
Outside the function global total :  0