Python基礎理論 - 函數

來源:互聯網
上載者:User

標籤:ict   assm   方式   put   自己   map   多次   文檔   zip   

 

函數是第一類對象:可以當做資料來傳

1.  可以被引用

2.  可以作為函數參數

3.  可以作為函數傳回值

4.  可以作為容器類型的元素

小例子:

def func1():    print(‘func1‘)def func2():    print(‘func2‘)dic = {    ‘func1‘:func1,    ‘func2‘:func2,}func = dic.get(‘func1‘)func()

 

名稱空間:名字與值的綁定關係,時刻記得左面有一根豎線,標識著範圍的不同

何時生效、何時失效,定義名字的方法

局部空間、全域名稱空間、內建名稱空間

 

範圍:用的時候,尋找的範圍

locals()

glocals(),系統變數__name__, __file__, __doc__

全域範圍:全域有效,在任何位置都可以被訪問到,除非被刪除,否則存活到檔案執行結束

局部範圍:局部有效,只能在函數內部被訪問,在函數執行結束後,就釋放了

 

閉包

1. 定義在函數內部的函數

2. 該內建函式包含對外部範圍而不是全域範圍的引用

def func1():    x = 1    def func2():        print(x)    return func2func = func1()func()

特性:攜帶自己的範圍,先執行。包裹著一層

應用情境:爬蟲、裝飾器

 

裝飾器

開放封閉原則,對擴充開放,對修改封閉

什麼是裝飾器:

裝飾別的東西的工具:

裝飾器本身 ---> 任意可調用的對象,如函數

被裝飾對象 ---> 任意可調用的對象,如函數

裝飾器要遵循的原則

1. 不修改被裝飾對象的原始碼

2. 不修改被裝飾對象的調用方式

即定義和調用都不能修改

@deco # func = deco(func)def func():    pass@deco1@deco2 def func():    pass@deco(x) # 裝飾器也是函數,(),先調用,拿到結果@res在func的正上方def func():    pass

 

迭代器

迭代:重複上一次過程,每一次迭代都基於上一次執行地結果而繼續進行

如寫文檔,儲存,再修改

可迭代對象:obj.__iter__方法

可迭代對象 執行__iter__方法 ---> 迭代器

 

迭代器對象:

obj.__iter__方法

obj.__next__方法

為何要有迭代器:

提供一種不依賴於索引的迭代方式

如檔案、集合、字典都可以被迭代

# for 迴圈原理for i in obj:     pass # 先執行,obj.__iter__方法,再next() 

迭代器優缺點:

優點: 

1.  提供一種不依賴於索引的迭代方式

2.  記憶體中只有一個值,節省記憶體

缺點:
1.  無法擷取長度

2.  一次性,只能前進,不能後退

 

產生器

函數體內含有yield關鍵字,那該函數的執行結果是產生器對象

產生器對象本質就是迭代器,所以yield的功能是

1.  把函數的執行結果做成迭代器

2.  可以返回多次值,而return只能返回一次值

3.  暫停函數的運行,儲存上下文資訊

如類比管道

yield 的語句形式: yield 1

yield的運算式形式:x = yield 

food = yield food_list    # 暫停、擷取send賦值給food、返回food_list

 

內建函數

數值類:

abs()、round()、divmod()、pow()

bin()、oct()、hex()

chr()、ord()

max()、min()、sum()

變數判定:

id()、type()

資料類型 工廠函數:
dict()、int()、float()、str()、set()、list()

功能型函數:

print()、input()、len()、__import__()、sorted()、reversed()

enumarate()、range()

匿名函數相關:

f = lambda x, y: x+yprint(f)res = f(1,2)print(res)
"""1. 沒有名字,使用完立刻回收2. 有參數、有傳回值3. 情境邏輯簡單"""

zip()

max(*args, key=None)

sorted(*args, **kwargs)

函數式編程:

map(func, *iterables)   # func遍曆操作可迭代對象

from functools import reduce

reduce(function, sequence, initial=None)

filter(func, *iterables)  # 過濾func為True

物件導向:

property()、staticmethod()、classmethod()

hasattr()、getattr()、setattr()、delattr()

issubclass()、isinstance()

super()

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.