python3.7 函式基礎入門

ckxllf發表於2020-04-22

  一、函式

  從開始接觸python就接觸了函式。 例如 input()函式用於獲取使用者鍵盤輸入、print()函式用於輸出結果、range()函式用於生成整數序列、len()函式用於獲取序列的長度。不僅如此python還為我們提供了自定義函式。即將有規律,可重複使用的程式碼封裝成函式,從而達到一次編寫多次呼叫的結果。由此可見我們可以簡單的認為函式是可以實現特定功能的程式碼塊。

  二、函式的定義

  假如我們要求0-100之間的和應該怎麼將其寫成函式呢?

  def sun():

  a = 0

  for i in list(range(101)):

  a += i

  print(a)

  sun()

  --------------------

  5050

  上述程式碼我們定義了一個函式實現0-100的求和。 而且得到了準確的結果。 首先用def關鍵字用來定義一個函式。後面跟一個函式名。 函式名顧名思義就是函式的名字。 這個名字是我們自定義的同樣遵循命名規範。函式名後面的"()"表示引數列表。 具體會在下一個列子中講到。 括號後面的是函式體即我們的求和功能。 程式的最後一行sun()稱之為函式的呼叫。 定義了函式如果不呼叫就相當於不執行。簡而言之也就無法生成求和的功能。

  同時我們思考另一個問題。 不是說函式是可以重複利用的嘛。 很明顯上述函式只能完成0-100的求和。 假如說要完成1-1000,或者0-300之間的求和,難道要繼續寫嘛。顯然不是。

  def sun(mag):

  a = 0

  for i in list(range(mag)):

  a += i

  print(a)

  sun(1002)

  sun(301)

  501501

  -----------------

  45150

  透過上述程式碼我們發現我們在示例1 的基礎上在引數列表假如mag,這個成為引數。 關於引數後面還會具體講到。 一個引數可以有多個引數。 引數與引數之間用逗號隔開。 與此同時我們吧range裡原先的100換成了我們的引數。 此時不難發現我們在呼叫函式的時候分別在括號裡填上了1001和301。 這樣就實現了我們提出的求0-1000和0-300求個的功能。

  那麼我們有提出新的疑問。假如說我們不僅要實現求和。 然後還要將求出來的和參與別的運算。此時我們又應該怎麼做呢?

  def sun(mag):

  a = 0

  for i in list(range(mag)):

  a += i

  return a

  b = sun(1002)

  print(b)

  c = b - 10000

  print(c)

  501501

  ------------------

  491501

  我們在示例2 的基礎上又新增了return a 這句話的意思是把計算結果返回到函式呼叫的地方。這樣我們就可以用個計算結果去做別的事了。

  小結:

  函式名:其實就是一個符合 Python 語法的識別符號,但不建議讀者使用 a、b、c 這類簡單的識別符號作為函式名,函式名最好能夠體現出該函式的功能。

  形參列表:即上面括號裡的函式列表,設定該函式可以接收多少個引數,多個引數之間用逗號( , )分隔。

  [return [返回值] ]:整體作為函式的可選參引數,用於設定該函式的返回值。也就是說,一個函式,可以用返回值,也可以沒有返回值,是否需要根據實際情況而定

  三、函式的呼叫

  到目前為止對函式的呼叫已經比較熟悉。 即 函式名(形參值),函式名即指的是要呼叫的函式的名稱;形參值指的是當初建立函式時要求傳入的各個形參的值,需要注意的是,建立函式有多少個形參,那麼呼叫時就需要傳入多少個值,且順序必須和建立函式時一致。即便該函式沒有引數,函式名後的小括號也不能省略。

  四、pass語句

  如果想定義一個什麼事也不做的空函式,可以用pass語句.pass語句什麼都不做,那有什麼用?實際上pass可以用來作為佔位符,比如現在還沒想好怎麼寫函式的程式碼,就可以先放一個pass,讓程式碼能執行起來。

  def sun():

  pass

  五、為函式新增說明文件

  函式不僅僅是給自己用的。 在一個團隊中很可能其他人也要用到。 這時如果他不知道函式的功能就沒法準確的呼叫。或者時隔很久要做維護和修改或者新員工要接手專案。 如果沒寫註釋不僅效率低。而且有可能回成為吐槽的物件。 因此新增說明文件必不可少。例如

  """

  功能:求指定序列的和

  mag 要生成的序列的最大值

  """

  def sun(mag):

  a = 0

  # 透過迴圈求和並返回結果

  for i in list(range(mag)):

  a += i

  return a

  b = sun(1002)

  print(b)

  六、引數檢查

  函式呼叫時如果引數的個數不對。python的直譯器會自動檢查出來

  """

  功能:求指定序列的和

  mag 要生成的序列的最大值

  """

  def sun(mag):

  a = 0

  # 透過迴圈求和並返回結果

  for i in list(range(mag)):

  a += i

  return a

  b = sun()

  print(b)

  Traceback (most recent call last):

  File "/Users/apple/Documents/重要檔案/python3/python20.py", line 12, in

  b = sun()

  TypeError: sun() missing 1 required positional argument: 'mag'

  但是引數的型別不對那麼直譯器就無能為力了。

  def my_list(number):

  print(list(range(number)))

  my_list("10")

  Traceback (most recent call last):

  File "/Users/apple/Documents/重要檔案/python3/python20.py", line 5, in

  my_list("10") 鄭州正規人流醫院

  File "/Users/apple/Documents/重要檔案/python3/python20.py", line 3, in my_list

  print(list(range(number)))

  TypeError: 'str' object cannot be interpreted as an integer

  顯然我們要生成0-9的列表。而我們偏偏傳入了字串這時就會報錯。此時內建函式isinstance()就派上用場了

  def my_list(number):

  if isinstance(number, int):

  print(list(range(number)))

  else:

  print("只接受整型的數值")

  my_list("10")

  my_list(10)

  只接受整型的數值

  ---------------

  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  那麼可不可以一個引數滿足兩個或者以上型別呢?當然可以

  def my_list(number):

  if isinstance(number, (int, float, str)):

  print("我滿足了條件")

  else:

  print("我不滿足條件")

  my_list("10")

  my_list(10)

  my_list((1, 2))

  我滿足了條件

  我滿足了條件

  我不滿足條件

  七、函式返回多個值

  def my_list():

  return 10, 20, [1, 3]

  a = my_list()

  print(a)

  (10, 20, [1, 3])

  由上述例子可知函式是可以一次性返回多個值的。但是這個返回值是tuple

  小結

  定義函式時,需要確定函式名和引數個數;

  如果有必要,可以先對引數的資料型別做檢查;

  函式體內部可以用return隨時返回函式結果;

  函式執行完畢也沒有return語句時,自動return None。

  函式可以同時返回多個值,但其實就是一個tuple。

  可以定義空函式


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2687669/,如需轉載,請註明出處,否則將追究法律責任。

相關文章