1. 程式人生 > >【Python3之函數對象】

【Python3之函數對象】

變量 類型 程序語言 部分 函數對象 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之函數對象】