99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學院 頭像
蘋果6袋
6
麥子學院

Python學習之功能函數(shù)使用方法詳解

發(fā)布時間:2017-01-20 22:27  回復:0  查看:2304   最后回復:2017-01-20 22:27  

Python開發(fā)中的函數(shù)提供了有組織的,可重用的代碼來執(zhí)行一組操作。函數(shù)簡化了編碼過程,防止冗余邏輯,并使代碼更容易遵循。

  定義和調(diào)用簡單函數(shù)

  使用 def 語句來定義Python中的函數(shù)最常見的方式。 這種說法是所謂的單條復合語句 的語法如下:

  def function_name(parameters):

  statement(s)

  function_name 被稱為 標識符 的功能。 由于函數(shù)定義是一個可執(zhí)行語句其執(zhí)行 綁定 功能名稱可以在以后使用的標識符被稱為函數(shù)對象。

  parameters 是一個可選的標識符列表,綁定到調(diào)用函數(shù)時作為參數(shù)提供的值。 函數(shù)可以具有任意數(shù)量的參數(shù),這些參數(shù)由逗號分隔。

  statement(s) -也被稱為 函數(shù)體 -是每個函數(shù)被調(diào)用時執(zhí)行的語句的一個非空序列。 這意味著一個函數(shù)體不能為空。

  這里有一個簡單的函數(shù)定義,目的是打印的一個例子 Hello 每次被稱為時間:

  def greet():

  print("Hello")

  現(xiàn)在,讓我們把定義的 greet() 函數(shù):

  greet()# Out: Hello

  這是一個函數(shù)定義的另一個例子,它接受一個參數(shù),并在每次調(diào)用函數(shù)時顯示傳入的值:

  def greet_two(greeting):

  print(greeting)

  在此之后, greet_two() 功能必須與參數(shù)調(diào)用:

  greet_two("Howdy")

  OutHowdy

  也可以給該函數(shù)參數(shù)一個默認值:

  def greet_two(greeting="Howdy"):

  print(greeting)

  現(xiàn)在可以調(diào)用該函數(shù)而不給出值:

  greet_two()# Out: Howdy

  您會注意到,與許多其他語言不同,您不需要顯式聲明函數(shù)的返回類型。 Python函數(shù)可以通過返回任何類型的值 return 關鍵字。 一個函數(shù)可以返回任意數(shù)量的不同類型!

  def many_types(x):

  if x < 0:

  return "Hello!"

  else:

  return 0

  print many_types(1)print many_types(-1)

  # Output:0

  Hello!

  只要調(diào)用者正確地處理它,這是完全有效的Python代碼。

  到達執(zhí)行結束沒有return語句的函數(shù)總是返回 None 

  def do_nothing():

  pass

  print(do_nothing())# Out: None

  如前所述,函數(shù)定義必須有一個函數(shù)體,一個非空的語句序列。 因此, pass 語句作為函數(shù)體,這是一個空操作-當執(zhí)行它,什么都不會發(fā)生。 當語句需要語句時,它作為占位符是有用的,但是不需要執(zhí)行代碼。

  用任意數(shù)量的參數(shù)定義函數(shù)

  位置參數(shù)的任意數(shù)量:

  定義一個能夠獲取任意數(shù)量的參數(shù)的函數(shù)可以通過在參數(shù)前面加上一個參數(shù)來完成 *

  def func(*args):

  # args will be a tuple containing all values that are passed in

  for i in args:

  print(i)

  func(1, 2, 3) # Calling it with 3 arguments# Out: 1# 2# 3

  list_of_arg_values = [1, 2, 3]

  func(*list_of_arg_values) # Calling it with list of values, * expands the list# Out: 1# 2# 3

  func() # Calling it without arguments# No Output

  你 不能 提供一個默認的 args ,例如 func(*args=[1, 2, 3]) 將引發(fā)一個語法錯誤(甚至不會編譯)。

  你 不能 調(diào)用函數(shù)時,例如通過名稱提供這些 func(*args=[1, 2, 3]) 會提高一個TypeError。

  但是,如果你已經(jīng)有了你的論點在數(shù)組(或其他 Iterable ),你 可以 調(diào)用你的功能如下: func(*my_stuff) 

  這些參數(shù)( *args )可以通過索引訪問,例如 args[0] 將返回第一個參數(shù)

  關鍵字參數(shù)的任意數(shù)目

  您可以通過定義在定義的參數(shù)取一個名字參數(shù)任意數(shù)量 2 * 在它的面前:

  def func(**kwargs):

  # kwargs will be a dictionary containing the names as keys and the values as values

  for name, value in kwargs.items():

  print(name, value)

  func(value1=1, value2=2, value3=3) # Calling it with 3 arguments# Out: value2 2# value1 1# value3 3

  func() # Calling it without arguments# No Out put

  my_dict = {'foo': 1, 'bar': 2}

  func(**my_dict) # Calling it with a dictionary# Out: foo 1# bar 2

  你 不能 提供這些 沒有 名字,例如 func(1, 2, 3) 將引發(fā)一個 TypeError 。

  kwargs 是一個普通的本地python字典。 例如, args['value1'] 將給予參數(shù)的值value1 。請務必先確認是否有這樣的說法或 KeyError 將提高。

  警告

  您可以將這些與其他可選和必需的參數(shù)混合,但在定義內(nèi)的順序很重要。

  該 位置/關鍵字 參數(shù)放在第一位。 (必需參數(shù))。

  然后是 任意 *arg 參數(shù)。 (可選的)。

  那么 只有關鍵字的 論據(jù)來下一個。 (需要)。

  最后, 任意關鍵字 **kwargs

  來了。 (可選的)。

  # |-positional-|-optional-|---keyword-only--|-optional-|def func(arg1, arg2=10 , *args, kwarg1, kwarg2=2, **kwargs):

  pass

  · arg1 必須給予,否則一個 TypeError 上升。 它可以給出作為位置( func(10) )或關鍵字參數(shù)( func(arg1=10) )。

  · kwarg1 也必須給予,但它只能作為關鍵字參數(shù)來提供: func(kwarg1=10) 。

  · arg2  kwarg2 是可選的。 如果該值要更改的相同的規(guī)則 arg1 (無論是位置還是關鍵字)和 kwarg1 (僅限于關鍵字)適用。

  · *args 捕獲額外的位置參數(shù)。 但是注意, arg1  arg2 必須作為位置參數(shù)傳遞參數(shù)提供 *args  func(1, 1, 1, 1) 

  · **kwargs 捕捉所有其他關鍵字參數(shù)。 在這種情況下,即沒有任何參數(shù) arg1 arg2 , kwarg1  kwarg2 。 例如: func(kwarg3=10) 。

  · Python 3,你可以使用 * 單獨指示所有后續(xù)參數(shù)必須指定為關鍵字。 比如math.isclosePython 3.5的功能和更高的使用規(guī)定 def math.isclose (a, b, *, rel_tol=1e-09, abs_tol=0.0) ,這意味著前兩個參數(shù)可以在位置上提供,但可選的第三個和第四個參數(shù)只能作為關鍵字參數(shù)提供。

  Python 2.x不支持僅關鍵字的參數(shù)。 這種行為可以被效仿 kwargs 

  def func(arg1, arg2=10, **kwargs):

  try:

  kwarg1 = kwargs.pop("kwarg1")

  except KeyError:

  raise TypeError("missing required keyword-only argument: 'kwarg1'")

  kwarg2 = kwargs.pop("kwarg2", 2)

  # function body ...

  有關命名的注意事項

  命名可選位置參數(shù)的約定 args 和可選關鍵字參數(shù) kwargs 只是你一個約定 可以 使用任何你喜歡的名字 ,但 它是遵循慣例有用的,讓其他人知道你在做什么, 甚至自己以后 所以請不要。

  注意唯一性

  任何功能可以與被定義 沒有或者一個 *args  無或一種 **kwargs ,但不與每一個以上。 *args 必須 是最后一個位置參數(shù),并 **kwargs 必須是最后一個參數(shù)。試圖使用的任一個以上的  導致一個語法錯誤異常。

  有關可選參數(shù)的嵌套函數(shù)的注意事項

  這是可以嵌套這樣的功能和一般的慣例是刪除代碼已處理的項目 ,但 如果你是傳承的參數(shù)需要傳遞一個可選的位置ARGS * 前綴和可選關鍵字ARGS一個 ** 前綴,否則ARGS可以作為列表或元組傳遞,并將kwargs作為單個字典傳遞。 例如:

  def fn(**kwargs):

  print (kwargs)

  f1(**kwargs)

  def f1(**kwargs):

  print(len(kwargs))

  fn(a=1, b=2)# Out:# {'a': 1, 'b': 2}# 2

 

來源:博客園

您還未登錄,請先登錄

熱門帖子

最新帖子

?