Day3 - Python基礎3 函數、遞迴、內建函數

來源:互聯網
上載者:User

標籤:www   follow   doc   map   highlight   理解   分配   try   running   

Day3 - Python基礎3 函數、遞迴、內建函數1. 函數基本文法及特性

   定義:將一組語句的集合通過一個名字(函數名)封裝起來,當執行該函數時,只需調用該函數名即可

 特性

   1.避免重複代碼

   2.增強程式可擴充性

   3.代碼容易維護

2. 參數與局部變數

   形參變數只有被調用時才會分配記憶體單元,在調用結束後,記憶體單元即刻被釋放。因此,形參只在函數內部有效,當函數調用返回主調用函數時,形參的變數將不再可用

 實參變數可以是常量、變數、運算式、函數等,無論實參是何種類型的量,當函數調用時,傳給形參時都必須是確定的值。因此應預先使用賦值、輸入等方法,使形參獲得確定值

 局部變數:函數內定義的變數,只在函數運行時起作用,運行結束後自動釋放

 預設參數:
def stuffs(name,age,country=‘CN‘):    print("姓名:%s"%name)    print("年齡:%d" % age)    print("國家:%s" % country)stuffs(‘sam‘,18)
 非固定參數:
#*args會把多傳的參數變成一個元組>>> def stuffs(name,age,*args):...     print(name,age,args)...>>> stuffs(‘sam‘,18,‘football‘,‘Movie‘,‘Python‘)sam 18 (‘football‘, ‘Movie‘, ‘Python‘)>>>#**kwargs會把多傳的參數變成一個字典>>> def stuffs(name,age,*args,**kwargs):...     print(name,age,args,kwargs)...>>> stuffs(‘sam‘,18,‘CN‘,‘python‘,sex=‘man‘,hobby=‘running‘)sam 18 (‘CN‘, ‘python‘) {‘hobby‘: ‘running‘, ‘sex‘: ‘man‘}>>>
  關鍵參數:

  關鍵參數必須在位置參數之後 

>>> def stuffs(name,age,country=‘CN‘):...     print("姓名:%s"%name)...     print("年齡:%d" % age)...     print("國家:%s" % country)...>>>>>> stuffs(country=‘USA‘,‘sam‘,18)   #關鍵參數在位參前面,導致報錯  File "<stdin>", line 1SyntaxError: positional argument follows keyword argument>>> stuffs(‘sam‘,18,country=‘USA‘)   #關鍵參數的位參之後正常姓名:sam年齡:18國家:USA>>>
  全域和局部變數:

  在子程式定義的變數叫局部變數,在程式一開始就定義的變數叫全域變數

  局部變數範圍是定義該變數的子程式,全域變數範圍是整個程式

  當二者同名時,在定義局部變數的子程式中局部變數起作用,其它地方全域變數起作用

3. 傳回值

  要想擷取執行結果,就可以用return把結果返回

  • 函數執行過程中,只要遇到return語句時就會停止執行並返回結果,可以理解為return就是函數的結束
  • 函數如未設定return,則預設傳回值為None
   嵌套函數

  函數內再套用函數

name = ‘sam‘def change_name():    name = ‘sam2‘    def change_name2():        name = ‘sam3‘        print("第3層列印",name)    change_name2()  #調用內層函數    print(‘第2層列印‘,name)change_name()print(‘第1層列印‘,name)
4.遞迴

 如果一個函數在內部調用自身本身,這就叫遞迴函式  

 特性:

   1.要有明確的結束條件

   2.每當進入深一層次的遞迴時,問題規模相對上次都要有所減少

   3.遞迴效率不高,遞迴層次過多可能導致棧溢出

5.匿名函數

 不需要顯示的指定函數 ,和其它函數搭配使用

 >>> calc = lambda n:n**n

>>> print(calc(10))

10000000000 

#和其它函數配合使用
>>> res = map(lambda n:n**3,[1,2,3,4])>>> res<map object at 0x0000000000DEDCF8>>>> for i in res:... print(i)...182764
6.函數式編程介紹

 函數是Python內建支援的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函數就是面向過程的程式設計的基本單元。

 函數式編程中的函數這個術語不是指電腦中的函數(實際上是Subroutine),而是指數學中的函數,即自變數的映射。也就是說一個函數的值僅決定於函數參數的值,不依賴其他狀態。比如sqrt(x)Function Computex的平方根,只要x不變,不論什麼時候調用,調用幾次,值都是不變的。

一、定義

簡單說,"函數式編程"是一種"編程範式"(programming paradigm),也就是如何編寫程式的方法論。主要思想是把運算過程盡量寫成一系列嵌套的函數調用。

7.高階函數

 變數可以指向函數,函數的參數能接受變數,那麼一個函數就可以接受另一個函數作為參數,這種函數稱為高階函數

1 >>> def add(x,y,f):2 ...     return f(x) + f(y)3 ...4 >>> res = add(3,-6,abs)5 >>> print(res)6 9
8.內建函數

  

內建參數詳解 https://docs.python.org/3/library/functions.html?highlight=built#ascii 

Day3 - Python基礎3 函數、遞迴、內建函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.