日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

一篇文章帶你深入學習Python函數_python

作者:三爺帶你飛 ? 更新時間: 2022-04-06 編程語言

函數的特性:

  • 函數是對象
  • 函數可以刪除
  • 函數名字和函數本身完全是分開的
  • 函數因為是對象,可以結合數據結構使用
  • 函數因為是對象,可以作為函數參數
  • 函數因為是對象,可以在嵌套在函數體內
  • 內層函數對象能夠記憶住父函數的變量
  • 所有的函數都是對象,但是所有的對象并不一定都是函數

對象成為函數需要實現__call__協議

函數是對象:

# 函數是對象:支持賦值操作。
def test1(n):
    print(f"hello, {n}!")

# test1的函數名賦值給 new1
new1 = test1
new1("tom") # hello, tom!

函數可以刪除:

# 函數可以刪除
def test2(n):
    print(f"hello, {n}!")
del test2
# test2("tom") # NameError: name 'test2' is not defined

函數名字和函數本身完全是分開的:刪除test3,不影響已經賦值的new3的調用

# 函數名字和函數本身完全是分開的:刪除test3,不影響已經賦值的調用
def test3(n):
    print(f"hello, {n}!")

new3 = test3
del test3
new3("Jam") # hello, Jam!

函數因為是對象,可以結合數據結構使用:

# 函數因為是對象,就可以結合數據結構使用
def test4(n):
    print(f"hello, {n}!")

data = [1, "a", {"name": "tom"}, test4]
for i in data:
    from types import FunctionType
    if type(i) == FunctionType:
        test4("Lily")  # hello, Lily!

函數因為是對象,可以作為函數參數:

# 函數因為是對象,就可以作為函數參數
def test5(n):
    print("原始函數執行")
    print(f"hello, {n}")

def new5(n):
    n("Golang")

new5(test5)  # 原始函數執行  hello, Golang

函數因為是對象,可以在嵌套在函數體內:

# 函數因為是對象,可以在嵌套在函數體內
def test6(n):
    def inner1(m):
        new = m + "!!!"
        return new
    def inner2(m):
        new = m + "***"
        return new
    if n > 3:
        return inner2
    else:
        return inner1

result6 = test6(3)
print(result6("tom"))  # tom!!!

內層函數對象能夠記憶住父函數的變量:也稱為閉包

# 內層函數對象能夠記憶住父函數的變量
def test7(n):
    def inner(m):
        return m + n
    return inner

result7 = test7(7)
print(result7(6))  # 13

所有的函數都是對象,但是所有的對象并不一定都是函數:

# 所有的函數都是對象,但是所有的對象并不一定都是函數
class A:
    pass

a = A()

def test8():
    pass

from types import FunctionType
print(isinstance(a, A))  # True
print(isinstance(test8, FunctionType))  # True
print(isinstance(a, FunctionType))  # False  所有的對象并不一定都是函數

對象成為函數需要實現__call__協議:

# 對象成為函數需要實現__call__協議
class B:
    def __init__(self, n):
        self.n = n
    def __call__(self, m):
        return self.n + m

b = B(9)
print(b(9))  # 18

總結

原文鏈接:https://blog.csdn.net/hzblucky1314/article/details/122659958

欄目分類
最近更新