【Python3之函數對象】
阿新 • • 發佈:2017-06-30
變量 類型 程序語言 部分 函數對象 utf-8 cti 一個 title
函數對象
函數(Function)作為程序語言中不可或缺的一部分,但函數作為第一類對象(First-Class Object)卻是 Python 函數的一大特性。
那到底什麽是第一類對象(First-Class Object)呢?
在 Python 中萬物皆為對象,函數也不例外,函數作為對象可以賦值給一個變量、可以作為元素添加到集合對象中、可作為參數值傳遞給其它函數,還可以當做函數的返回值,這些特性就是第一類對象所特有的。
1.函數身為一個對象,擁有對象模型的三個通用屬性:id、類型、和值。
#!/usr/bin/env python # -*- coding:utf-8 -*- def foo(): print(‘from foo‘) foo() print(id(foo)) print(type(foo)) print(foo)
輸出
from foo 4406808360 <class ‘function‘> <function foo at 0x106aa8f28>
2.函數可以被引用,即函數可以賦值給一個變量
還可以把該函數賦值給更多的變量,唯一變化的是該函數對象的引用計數不斷地增加,本質上這些變量最終指向的都是同一個函數對象。
#!/usr/bin/env python # -*- coding:utf-8 -*- def foo(): print(‘from foo‘) foo() func=foo #引用,賦值 print(foo) print(func) func()
輸出
from foo <function foo at 0x10eed8f28> <function foo at 0x10eed8f28> from foo
3.函數可以當做參數傳遞
def foo(): print(‘from foo‘) def bar(func): print(func) func() bar(foo)
輸出
<function foo at 0x1047eff28> from foo
4.函數可以作返回值
函數接受一個或多個函數作為輸入或者函數輸出(返回)的值是函數時,我們稱這樣的函數為高階函數
def foo(): print(‘from foo‘) def bar(func): return func f=bar(foo) print(f) f()
輸出
<function foo at 0x107f29f28> from foo
5.函數可以當作容器類型的元素
容器對象(list、dict、set等)中可以存放任何對象,包括整數、字符串,函數也可以作存放到容器對象中
def foo(): print(‘from foo‘) dic={‘func‘:foo} foo() print(dic[‘func‘]) dic[‘func‘]()
輸出
from foo <function foo at 0x10997ef28> from foo
6.函數還可以嵌套
函數嵌套的定義
def f1(): def f2(): print(‘from f2‘) def f3(): print(‘from f3‘) f3() f2() f1()
輸出
from f2 from f3
應用
def get(text): def clean(t): #2 return t[1:] new_text = clean(text) #1 return len(new_text) print(get(‘python‘))
輸出
5
【Python3之函數對象】