一篇文章带你深入学习Python函数
目录
- 函数的特性:
- 函数是对象:
- 函数可以删除:
- 总结
函数的特性:
- 函数是对象
- 函数可以删除
- 函数名字和函数本身完全是分开的
- 函数因为是对象,可以结合数据结构使用
- 函数因为是对象,可以作为函数参数
- 函数因为是对象,可以在嵌套在函数体内
- 内层函数对象能够记忆住父函数的变量
- 所有的函数都是对象,但是所有的对象并不一定都是函数
函数是对象:
# 函数是对象:支持赋值操作。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函数】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 投稿|关汉卿下场,S级制作“回春”?
- 投稿|宁德时代被比亚迪撞了下腰
- {调取该文章的TAG关键词}|逆市涨价,房租被谁推高了?
- {调取该文章的TAG关键词}|U型反弹、K型分化,中小企业面临的宏观形势|盛景彭志强
- 综合性文章管理|typora配置阿里OSS图床详细教程
- 投稿|蔚来需要一剂强心针
- 投稿|Cupshe想做泳装界的Shein
- {调取该文章的TAG关键词}|中国企业未来的六大机会|盛景彭志强
- 100003字,带你解密|100003字,带你解密 双11、618电商大促场景下的系统架构体系
- 竟然还有人说ArrayList是2倍扩容,今天带你手撕ArrayList源码