一篇文章带你深入学习Python函数

目录

  • 函数的特性:
    • 函数是对象:
    • 函数可以删除:
  • 总结

    函数的特性:
    • 函数是对象
    • 函数可以删除
    • 函数名字和函数本身完全是分开的
    • 函数因为是对象,可以结合数据结构使用
    • 函数因为是对象,可以作为函数参数
    • 函数因为是对象,可以在嵌套在函数体内
    • 内层函数对象能够记忆住父函数的变量
    • 所有的函数都是对象,但是所有的对象并不一定都是函数
    对象成为函数需要实现__call__协议

    函数是对象:
    # 函数是对象:支持赋值操作。def test1(n):print(f"hello, {n}!")# test1的函数名赋值给 new1new1 = test1new1("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 = test3del test3new3("Jam") # hello, Jam!

    函数因为是对象,可以结合数据结构使用:
    # 函数因为是对象,就可以结合数据结构使用def test4(n):print(f"hello, {n}!")data = https://www.it610.com/article/[1,"a", {"name": "tom"}, test4]for i in data:from types import FunctionTypeif 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 newdef inner2(m):new = m + "***"return newif n > 3:return inner2else:return inner1result6 = test6(3)print(result6("tom"))# tom!!!

    内层函数对象能够记忆住父函数的变量:也称为闭包
    # 内层函数对象能够记忆住父函数的变量def test7(n):def inner(m):return m + nreturn innerresult7 = test7(7)print(result7(6))# 13

    所有的函数都是对象,但是所有的对象并不一定都是函数:
    # 所有的函数都是对象,但是所有的对象并不一定都是函数class A:passa = A()def test8():passfrom types import FunctionTypeprint(isinstance(a, A))# Trueprint(isinstance(test8, FunctionType))# Trueprint(isinstance(a, FunctionType))# False所有的对象并不一定都是函数

    对象成为函数需要实现__call__协议:
    # 对象成为函数需要实现__call__协议class B:def __init__(self, n):self.n = ndef __call__(self, m):return self.n + mb = B(9)print(b(9))# 18


    总结 【一篇文章带你深入学习Python函数】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

      推荐阅读