Python函數以及函數式編程

來源:互聯網
上載者:User

標籤:

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

Python函數以及函數式編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.