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

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

Python學習之函數(shù)以及函數(shù)式編程詳解

發(fā)布時間:2017-07-23 21:13  回復(fù):0  查看:2076   最后回復(fù):2017-07-23 21:13  
本文和大家分享的主要是python 函數(shù)及函數(shù)式編程相關(guān)內(nèi)容,一起來看看吧,希望對大家 學習python有所幫助。
   函數(shù)基本語法及特性
   定義
  數(shù)學函數(shù)定義: 一般的,在一個變化過程中,如果有兩個變量 x y ,并且對于 x 的每一 個確定的值, y 都有唯一確定的值與其對應(yīng),那么我們就把 x 稱為自變量,把 y 稱為因變 量, y x 的函數(shù)。自變量 x 的取值范圍叫做這個函數(shù)的定義域。
  但編程中的「函數(shù)」概念,與數(shù)學中的函數(shù)是有很  同的  函數(shù)是邏輯結(jié)構(gòu)化和過程化的一種編程方法
   函數(shù)的優(yōu)點
  ·  減少重復(fù)代碼
  ·  使程序變的可擴展
  ·  使程序變得易維護
   函數(shù)與過程
  ·  定義函數(shù)
   def  fun1(): # 函數(shù)名稱 "The function decription" print("in the func1")  return 0 # 返回值
  ·  定義過程
   def  fun2():"The progress decription"
  print("in the func2")
  ·  函數(shù)與過程 過程就是沒有返回值的函數(shù) 但是在 python 中,過程會隱式默認返回 none ,所以在 python 中即便是過程也可以算作函數(shù)。
   def  fun1():
  "The function decription"
  print("in the func1")
   return 0 def  fun2():
  "The progress decription"
  print("in the func2")
  x=fun1()
  y=fun2()
  print("from func1 return is %s" %x)
  print("from func2 return is %s" %y)
  結(jié)果為:
   in the func1 in the func2 from func1  return  is 0 from func2  return  is  None
   返回值
  要想獲取函數(shù)的執(zhí)  結(jié)果,就可以 return 語 把結(jié)果返回。
  1.
  函數(shù)在執(zhí)  過程中只要遇到return 語 ,就會停 執(zhí) 并返回結(jié)果,所以也可以 解為  return  語 代表著函數(shù)的結(jié)束,如果未在函數(shù)中指定 return, 那這個函數(shù)的返回值為 None 。
  2.
  3.
  接受返回值
  4.
  賦予變量,例如:
  5.
   def  test():
  print('in the test')
   return 0
  x=test()
  1.  返回什么樣的變量值
  return  個數(shù)沒有固定, return 的類型沒有固定。 例如:
   def  test1():
  print('in the test1')
   def  test2():
  print('in the test2')
   return 0
   def  test3():
  print('in the test3')
   return 1,'hello',['alex','wupeiqi'],{'name':'alex'}
   def  test4():
  print('in the test4')
   return test2
  x=test1()
  y=test2()
  z=test3()
  u=test4()
  print(x)
  print(y)
  print(z)
  print(u)
  結(jié)果是:
   in the test1 in the test2 in the test3 in the test4
  None
  0
  (1, 'hello', ['alex', 'wupeiqi'], {'name': 'alex'})
  < function test2 at 0x102439488>
  ·  返回值數(shù) =0: 返回 None  沒有 return
  ·  返回值數(shù) =1: 返回 object return 一個值, python  基本所有的數(shù)據(jù)類型都是對象。
  ·  返回值數(shù) >1: 返回 tuple ,  return 多個值。
  ·  返回可以返回函數(shù) :return test2 會將 test2 的內(nèi)存地址返回。
  1.  為什么要有返回值 ?
  想要整個函數(shù)執(zhí)行的結(jié)果。  可能對執(zhí)行結(jié)果進行相關(guān)操作。  比如登陸,返回true  接下來就可以進行其他操作。 如果是 false  則不給操作。
   函數(shù)參數(shù)
   形參和實參定義
  ·  形參
  形式參數(shù),不是實際存在,是虛擬變量。在定義函數(shù)和函數(shù)體的時候使用形參,目的是在函數(shù)調(diào)用時接收實參( 形參個數(shù),類型應(yīng)與實參一一對應(yīng) ) 。
  變量只有在被調(diào)時才分配內(nèi)存單元
  ·  實參
  實際參數(shù),調(diào)用函數(shù)時傳給函數(shù)的參數(shù),可以是常量、變量、表達式、函數(shù)等,無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須有確定的值,以  把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入  等辦法使參數(shù)獲得確定值。
  ·  區(qū)別
  形參是虛擬的,不占用內(nèi)存空間. 形參變量只有在被調(diào)用時才分配內(nèi)存單元,,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。因此,形參只在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后,則不能再使該形參變量。
  實參是一個變量,占用內(nèi)存空間,數(shù)據(jù)傳送單向,實參傳給形參,不能形參傳給實參。
   def  calc(x,y): #x,y 為形參
  res = x**y
   return res
  c = calc(a,b) #a,b 為實參
  print(c)
   def  test(x,y): #x,y 為形參
  print(x)
  print(y)
  x=1 #x 為實參
  y=2 #y 為實參
  test(x=x,y=y) # 等號左邊 x,y 為形參,等號右邊 x,y 為實參,引用不分順序,按關(guān)鍵字引用。
   默認參數(shù)
  定義函數(shù)的時候,還可以有默認參數(shù)。  函數(shù)的默認參數(shù)的作用是簡化調(diào)用,你只需要把必須的參數(shù)傳進去。但是在需要的時候,又可以傳入額外的參數(shù)來覆蓋默認參數(shù)值。
  # 定義一個計算  N 次方的函數(shù) , 默認是 2 次方 def  test6(x,n=2):
  s=1
   while n>0:
  n=n-1
  s=s*x
  print(s)
   return s
  test6(2)
  默認參數(shù)只能定義在必需參數(shù)的后面.
   可變參數(shù)
  如果想讓一個函數(shù)能接受任意個參數(shù),我們就可以定義一個可變參數(shù):
   def  fn(*args):
   print args
  可變參數(shù)的名字前面有個 *  號,我們可以傳入 0 個、 1 個或多個參數(shù)給可變參數(shù):  Python 解釋器會把傳入的一組參數(shù)組裝成一個 tuple 傳遞給可變參數(shù),因此,在函數(shù)內(nèi)部,直接把變量  args  看成一個  tuple  就好了。
  定義可變參數(shù)的目的也是為了簡化調(diào)用。假設(shè)我們要計算任意個數(shù)的平均值,就可以定義一個可變參數(shù):
   def  average(*args):
  ...
  這樣,在調(diào)用的時候,可以這樣寫:
  >>> average()0>>> average(1, 2)1.5>>> average(1, 2, 2, 3, 4)2.4
   位置參數(shù)和關(guān)鍵字
  位置參數(shù)調(diào)用:實參與形參位置一一對應(yīng)關(guān)鍵參數(shù)調(diào)用 : 位置無需固定。
  正常情況下,給函數(shù)傳參數(shù)要按順序,如果不按順序就可以用關(guān)鍵參數(shù)調(diào)用,只需指定參數(shù)名即可,但關(guān)鍵參數(shù)必須放在位置參數(shù)之后。
   def  test5(u,v,w):
  print(u)
  print(v)
  print(w)
  test5(3,w=2,v=6)
   函數(shù)調(diào)用
  Python 內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。
  要調(diào)用一個函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對值的函數(shù) abs ,它接收一個參數(shù)。
  調(diào)用 abs  函數(shù):
  >>> abs(-21)21
  調(diào)用函數(shù)的時候,如果傳入的參數(shù)數(shù)量不對,會報TypeError 的錯誤,并且 Python 會明確地告訴你: abs() 有且僅有 1 個參數(shù),但給出了兩個:
  >>> abs(21,8)
  Traceback (most recent  call  last):
  File "/Users/cathy/PycharmProjects/p51cto/day3/func_test3.py", line 67, in
  abs(21,8)
  TypeError: abs() takes exactly one  argument (2 given)
  如果傳入的參數(shù)數(shù)量是對的,但參數(shù)類型不能被函數(shù)所接受,也會報TypeError 的錯誤,并且給出錯誤信息: str 是錯誤的參數(shù)類型:
  >>> abs('a')
  Traceback (most recent  call  last):
  File "/Users/cathy/PycharmProjects/p51cto/day3/func_test3.py", line 69, in
  abs('a')
  TypeError:  bad operand type  for abs(): 'str'
   遞歸函數(shù)
  在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個函數(shù)在內(nèi)部調(diào)用自身本身,這個函數(shù)就是遞歸函數(shù)。
  舉個例子,我們來計算階乘 n! = 1 * 2 * 3 * ... * n ,用函數(shù)  fact(n) 表示:
   def  fact(n):
   if n==1:
   return 1
   return n * fact(n - 1)
  遞歸函數(shù)的優(yōu)點是定義簡單,邏輯清晰。理論上,所有的遞歸函數(shù)都可以寫成循環(huán)的方式,但循環(huán)的邏輯不如遞歸清晰。
   嵌套函數(shù)
  python 允許在定義函數(shù)的時候,其函數(shù)體內(nèi)又包含另外一個函數(shù)的完整定義。
  name = "test1" def  changeout():
  name = "test2"
   def  changeinner():
  name = "test3"
  print("changeinner 賦值打印 ", name)
  changeinner()  #  調(diào)用內(nèi)層函數(shù)
  print(" 外層調(diào)用內(nèi)層打印 ", name)
  changeout()
  print(" 調(diào)用外層打印 ", name)
  內(nèi)部函數(shù)可以訪問其外部函數(shù)的作用域,但是外部函數(shù)不能訪問內(nèi)部函數(shù)的作用域。
  def change1(name):
   匿名函數(shù)
  匿名函數(shù)就是不需要顯式的指定函數(shù)
  # 這段代碼  def calc(n): return n**n print(calc(10))
  # 換成匿名函數(shù)  calc = lambda n:n**n print(calc(10))
   函數(shù)式編程
  單說," 函數(shù)式編程 " 是一種 " 編程范式 " programming paradigm ),也就是如何編寫程序的方法論。
  主要思想是把運算過程盡量寫成一系列嵌套的函數(shù)調(diào)用。
來源: 博客園
您還未登錄,請先登錄

熱門帖子

最新帖子

?