Python 函数那不为人知的一面

作者:somenzz 时间:2022-09-24 10:03:31 

通常我们定义一个函数,然后调用该函数时,函数相关的代码才开始执行。可是很多人并不知道,当我们定义函数时,一些代码就开始执行了。今天就来说说函数这个不为人知的一面。

Python 函数那不为人知的一面

通常我们定义一个函数,然后调用该函数时,函数相关的代码才开始执行。可是很多人并不知道,当我们定义函数时,一些代码就开始执行了。今天就来说说函数这个不为人知的一面。

先看一段代码:


def do_something(opt: print('参数 opt'), arg=print('参数 arg')) -> print('函数的返回值'):
   print("do something runing")

if __name__ == '__main__':
   pass

上面的代码我们定义来一个函数,但是并没有调用它,那么它会输出信息吗?

会的,参数里无论是类型提示部分,还是默认赋值部分,还是返回值的类型提示,里面的语句都会被执行,结果如下:

Python 函数那不为人知的一面

这个做法我自己是很少见的。把 print 函数换成打开文件、连接数据库之类的操作,也都会被执行。

不过通常情况下,参数都是不可变类型,如果传入可变类型,可能每次的函数调用,其结果都会被改变,例如:


def do_something(opt: print("参数 opt"), arg=[]) -> print("函数的返回值"):
   print("do something runing")
   print(f"{arg = }")
   arg.append(0)

if __name__ == "__main__":
   do_something(opt=1)
   do_something(opt=1)

运行结果如下:

Python 函数那不为人知的一面

可以发现,调用两次函数 do_something,虽然并没有传入 arg 参数,arg 的值已经发送了变化。如果不注意这点,可能会有 bug 发生。在 Pythcarm 中,会警告我们 arg 是可变对象:

Python 函数那不为人知的一面

如果要获取函数的类型提示、默认值,可以这样:


def do_something(opt: 1, arg=2) -> 3:
   print("do something runing")
   print(f"{arg = }")
   arg.append(0)

if __name__ == "__main__":
   print(f"{do_something.__annotations__ = }")
   print(f"{do_something.__defaults__ = }")

#do_something.__annotations__ = {'opt': 1, 'return': 3}
#do_something.__defaults__ = (2,)

来源:https://developer.51cto.com/art/202111/689308.htm

标签:Python,函数
0
投稿

猜你喜欢

  • 利用Python找回微信撤回信息

    2022-11-21 22:34:03
  • 用CSS制作兼容多浏览量器的隐藏菜单

    2007-08-30 09:05:00
  • 在微信小程序中获取用户位置的详细过程

    2024-04-29 13:43:02
  • Flask接口签名sign原理与实例代码浅析

    2023-06-21 23:18:13
  • Python使用Beautiful Soup(BS4)库解析HTML和XML

    2023-01-04 18:11:43
  • 对python创建及引用动态变量名的示例讲解

    2023-02-03 07:10:49
  • JavaScript获取GridView中用户点击控件的行号,列号

    2024-04-23 09:30:04
  • php使用socket简单实现通信功能

    2023-05-31 13:01:23
  • python生成日历实例解析

    2023-05-16 12:47:31
  • Python实现的桶排序算法示例

    2021-01-04 09:09:14
  • python如何实现视频转代码视频

    2022-09-09 16:16:56
  • Python unittest基本使用方法代码实例

    2023-06-28 06:42:56
  • asp如何在约定时间显示特定的提示信息?

    2010-06-28 16:52:00
  • Bootstrap响应式侧边栏改进版

    2023-08-17 02:26:10
  • Python3使用requests包抓取并保存网页源码的方法

    2022-05-27 06:48:38
  • django session完成状态保持的方法

    2021-12-07 16:12:02
  • php字符串过滤strip_tags()函数用法实例分析

    2023-09-04 14:05:00
  • 详解python内置常用高阶函数(列出了5个常用的)

    2023-01-11 18:52:19
  • python爬虫入门教程--优雅的HTTP库requests(二)

    2022-04-01 05:10:43
  • GO语言基本数据类型总结

    2024-02-06 08:14:27
  • asp之家 网络编程 m.aspxhome.com