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
上面的代码我们定义来一个函数,但是并没有调用它,那么它会输出信息吗?
会的,参数里无论是类型提示部分,还是默认赋值部分,还是返回值的类型提示,里面的语句都会被执行,结果如下:
这个做法我自己是很少见的。把 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)
运行结果如下:
可以发现,调用两次函数 do_something,虽然并没有传入 arg 参数,arg 的值已经发送了变化。如果不注意这点,可能会有 bug 发生。在 Pythcarm 中,会警告我们 arg 是可变对象:
如果要获取函数的类型提示、默认值,可以这样:
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
0
投稿
猜你喜欢
- 写了一个小巧的jquery拾色工具,代码简单得不得了,只有这么几行:(function($){ $.fn.pickColor=fu
- 简单的一个python日志处理类#/usr/bin/python#coding=utf-8import time,typesclass lo
- python的pdb调试命令的命令整理及实例一、命令整理pdb调试命令完整命令简写命令描述argsa打印当前函数的参数breakb设置断点c
- Tebsorflow开源实现多GPU训练cifar10数据集:cifar10_multi_gpu_train.pyTensorflow开源实
- 本文来给大家介绍一个php版淘宝网查询商品接口代码的例子,下面要改成你的信息的在代码后面都有说明了,同时sdk包我们也要官方下载。下载SDK
- 一、Beautiful Soup的安装Beautiful Soup是Python的一个HTML或XML的解析库,使用它可以很方便地从网页中提
- #mysqldump --help1.mysqldump的几种常用方法:(1)导出整个数据库(包括数据库中的数据)mysqldump -u
- 昨天写了一段用来做分层随机抽样的代码,很粗糙,不过用公司的2万名导购名单试了一下,结果感人,我觉得此刻的我已经要上天了,哈哈哈哈哈哈代码如下
- ASP结合ADO对数据库方便快捷的访问、结合XML、COM/ActiveX等其它技术 实现服务器多层结构的功能使它在今天还有着顽强的生命力。
- 15分钟学会vue项目改造成SSRPs:网上看了好多服务器渲染的例子,基本都是从0开始的,用Nuxt或者vue官网推荐的ssr方案(vue-
- Python变量与注释高级用法1.概述好的变量和注释并非为计算机而写,而是为每个阅读代码的人而写。变量与注释是表达作者思想的基础,他们对代码
- 这篇文章主要介绍了Python 实现两个矩形重合面积代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- Dmitry这篇设计评论表单很有启发意义,尤其提到关键的评论内容、评论者信息录入顺序问题。好比我们在日常沟通时,对信息的反馈都是第一诉求,写
- 介绍对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具。不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布
- 点云生成 3D 网格的最快方法已经用 Python 编写了几个实现来从点云中获取网格。它们中的大多数
- Python安装selenium包打开命令行窗口,进入python交互环境python尝试导入selenium包,报错,说明尚未安装sele
- wheel文件Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改
- 概述运行python脚本时通过命令行方式传入运行参数通常有以下两种自建方式:sys.argv - 简洁argparse - 丰富,可自定义下
- 本文实例为大家分享了python实现电子书翻页的具体代码,供大家参考,具体内容如下1.题目:电子书翻页:(1)自动翻页:每次默认读三行,读完
- Python多线程与多进程中join()方法的效果是相同的。下面仅以多线程为例:首先需要明确几个概念:知识点一:当一个进程启动之后,会默认产