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

鍍金池/ 教程/ Python/ Python3函數(shù)
Python3文件操作
Python3日期和時(shí)間
Python3基礎(chǔ)語法
Python3字典
Python3元組
Python3文件方法
Python3字符串
Python3引入什么新的東西?
Python3異常處理
Python3模塊
Python3數(shù)字
Python3變量類型
Python3函數(shù)
Python3循環(huán)
Python3 os文件目錄的方法
Python3 while循環(huán)語句
Python3斷言
Python3基本運(yùn)算符
Python3環(huán)境安裝設(shè)置
Python3標(biāo)準(zhǔn)異常
Python3嵌套循環(huán)
Python3教程
Python3決策
Python3 for循環(huán)語句
Python3列表

Python3函數(shù)

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

你可以已經(jīng)知道(了解),Python有類似于 printf()等許多內(nèi)置函數(shù)。但你也可以創(chuàng)建自己的函數(shù)。 這些函數(shù)被稱為:用戶自定義函數(shù)。

如何定義一個(gè)函數(shù)

可以定義函數(shù),以提供所需的功能。 下面是一些簡單的規(guī)則用來定義 Python 中的函數(shù)。

  • 函數(shù)模塊使用 def 關(guān)鍵字開頭,后跟函數(shù)名以及括號( ( ) ).

  • 任何輸入?yún)?shù)或參數(shù)都應(yīng)該放在這些括號內(nèi)。 還可以定義這些括號內(nèi)的參數(shù)。

  • 函數(shù)的第一個(gè)語句可以是一個(gè)可選的聲明 - 函數(shù)或文檔說明的字符串。
  • 每個(gè)函數(shù)中的代碼塊使用冒號(:)開始和縮進(jìn)。
  • 語句返回[expression]存在于函數(shù)中,一個(gè)表達(dá)式可選地傳遞給調(diào)用者。不帶參數(shù)的return語句返回None。

語法

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]
默認(rèn)情況下,參數(shù)有一個(gè)位置的行為,你需要告知它們定義的相同順序。

示例

下面的函數(shù)接受一個(gè)字符串作為輸入?yún)?shù),并打印標(biāo)準(zhǔn)屏幕上。
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

如何調(diào)用函數(shù)

定義一個(gè)函數(shù)只需要給出它的名稱,指定要被包括在函數(shù)和結(jié)構(gòu)的代碼塊中的參數(shù)。

當(dāng)函數(shù)的基本結(jié)構(gòu)完成,可以通過從其它函數(shù)或直接從Python提示符調(diào)用它執(zhí)行它。下面是一個(gè)調(diào)用 print()函數(shù)的例子 -

#!/usr/bin/python3

# 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("I'm first call to user defined function!")
printme("Again second call to the same function")
當(dāng)執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -
I'm first call to user defined function!
Again second call to the same function

通過引用 VS 值傳遞

所有參數(shù)(參數(shù))在Python語言中是通過引用傳遞。這意味著,如果在函數(shù)中你改變參數(shù)的值, 參數(shù)的值變動(dòng)也會反映回調(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) 

在這里,我們維持傳遞的對象參考,并在同一個(gè)對象追加值。因此,這將產(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]
存在這樣的情況:參數(shù)正在被引用傳遞,以及參考被覆蓋調(diào)用函數(shù)里面的一個(gè)例子。
#!/usr/bin/python3

# 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ù) mylist 是局部在函數(shù) changeme。在函數(shù)中更改mylist 不影響 mylist 的值。函數(shù)不會起任何作用,最終這將產(chǎn)生以下結(jié)果:

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

函數(shù)參數(shù)

可以通過使用以下類型的形式參數(shù)來調(diào)用一個(gè)函數(shù):
  • 必需參數(shù)
  • 關(guān)鍵字參數(shù)
  • 默認(rèn)參數(shù)
  • 可變長度參數(shù)

必需的參數(shù)

必需的參數(shù)是傳遞到到一個(gè)函數(shù)正確的位置順序的參數(shù)。這里,在函數(shù)調(diào)用的參數(shù)數(shù)目應(yīng)當(dāng)與函數(shù)定義完全匹配。

在調(diào)用函數(shù) printme(),肯定需要傳遞一個(gè)參數(shù),否則它給出了一個(gè)語法錯(cuò)誤如下 -
#!/usr/bin/python3

# 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()
當(dāng)執(zhí)行上面的代碼,它產(chǎn)生了以下結(jié)果:
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    printme();
TypeError: printme() takes exactly 1 argument (0 given)

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

關(guān)鍵字參數(shù)會關(guān)系到函數(shù)的調(diào)用。當(dāng)你在一個(gè)函數(shù)調(diào)用中使用關(guān)鍵字參數(shù),調(diào)用者是由參數(shù)名稱標(biāo)識的參數(shù)。

這使您可以跳過參數(shù)或順序,因?yàn)镻ython解釋器能夠使用提供帶參數(shù)的值相匹配關(guān)鍵字。您也可以使用關(guān)鍵字調(diào)用print()函數(shù)在以下幾個(gè)方面-

#!/usr/bin/python3

# 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í)行上面的代碼,它產(chǎn)生以下結(jié)果 -
My string
下面的例子提供了更多的清晰代碼畫面。注意,這里參數(shù)的順序并不重要。
#!/usr/bin/python3

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

# Now you can call printinfo function
printinfo( age=50, name="miki" )
當(dāng)執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -
Name:  miki
Age  50

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

默認(rèn)參數(shù)是,如果參數(shù)不提供一個(gè)值,那么函數(shù)就會調(diào)用這個(gè)默認(rèn)參數(shù)。下面的例子給出了默認(rèn)參數(shù)示例,如果沒有傳遞它,它將打印默認(rèn)的 age 值 -

#!/usr/bin/python3

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

# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )
當(dāng)執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -
Name:  miki
Age  50
Name:  miki
Age  35

可變長度參數(shù)

您可能需要處理函數(shù)在定義函數(shù)時(shí)指定時(shí)更多的參數(shù)。 這些參數(shù)稱為可變長度參數(shù)在函數(shù)定義時(shí)不會被命名,不像必需參數(shù)和默認(rèn)參數(shù)。

非關(guān)鍵字可變參數(shù)的函數(shù)語法是這樣的 -
def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression] 

星號(*)放在持有的所有非關(guān)鍵字變量參數(shù)值的變量名之前。如果函數(shù)調(diào)用期間沒有指定任何其他參數(shù)此元組是空的。下面是一個(gè)簡單的例子 -

#!/usr/bin/python3

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

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )
當(dāng)執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -
Output is:
10
Output is:
70
60
50

匿名函數(shù)

這些函數(shù)被稱為匿名,因?yàn)樗鼈儾皇峭ㄟ^使用def關(guān)鍵字標(biāo)準(zhǔn)方式的聲明。您可以使用lambda關(guān)鍵字創(chuàng)建小的匿名函數(shù)。

  • lambda形式可以使用任何數(shù)量的參數(shù),但在表現(xiàn)形式上只返回一個(gè)值。 它們不能包含命令或多個(gè)表達(dá)式。

  • 匿名函數(shù)不能直接調(diào)用打印,因?yàn)閘ambda需要表達(dá)式。
  • lambda函數(shù)都有自己的命名空間,并且不能訪問除了在其參數(shù)列表和在全局命名空間中的其他變量。
  • 盡管似乎 lambda 是一個(gè)函數(shù)的單行版,它們不等同于C或C++的內(nèi)聯(lián)聲明,它的目的是調(diào)用出于性能考慮,在傳遞函數(shù)由堆棧分配。

語法

lambda函數(shù)的語法只包含一個(gè)聲明,如下 -
lambda [arg1 [,arg2,.....argn]]:expression
以下是顯示 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í)行上面的代碼,它產(chǎn)生以下結(jié)果 -
Value of total :  30
Value of total :  40

return語句

該語句返回[expression] 存在一個(gè)函數(shù),一個(gè)表達(dá)式可選地傳遞給調(diào)用者。不帶參數(shù)的return語句一樣返回None。

所有上述實(shí)施例不返回任何值。您可以從一個(gè)函數(shù)返回一個(gè)值如下 -
#!/usr/bin/python3

# 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 )
當(dāng)執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -
Inside the function :  30
Outside the function :  30

變量范圍

程序中的所有變量可能不會在該程序中的所有位置都可以進(jìn)行訪問。這取決于這個(gè)變量在哪里聲明。

變量的作用域確定了程序,可以訪問特定標(biāo)識的部分。有很多的 Python 變量兩種基本范圍 -

  • 全局變量
  • 局部變量

全局與局部變量

被一個(gè)函數(shù)體中定義的變量有一個(gè)局部范圍,之外定義那些具有全局范圍。

這意味著,局部變量只能在聲明它們的函數(shù)內(nèi)部訪問,而全局變量在整個(gè)程序中通過函數(shù)體內(nèi)進(jìn)行訪問。當(dāng)你調(diào)用一個(gè)函數(shù),其內(nèi)部聲明的變量也有一個(gè)作用域。下面是一個(gè)簡單的例子 -

#!/usr/bin/python3

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í)行上面的代碼,它產(chǎn)生以下結(jié)果 -
Inside the function local total :  30
Outside the function global total :  0