服务器之家

服务器之家 > 正文

Python 函数那不为人知的一面

时间:2021-11-09 20:50     来源/作者:Python七号

Python 函数那不为人知的一面

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

先看一段代码:

  1. defdo_something(opt:print('参数opt'),arg=print('参数arg'))->print('函数的返回值'):
  2. print("dosomethingruning")
  3. if__name__=='__main__':
  4. pass

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

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

Python 函数那不为人知的一面

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

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

  1. defdo_something(opt:print("参数opt"),arg=[])->print("函数的返回值"):
  2. print("dosomethingruning")
  3. print(f"{arg=}")
  4. arg.append(0)
  5. if__name__=="__main__":
  6. do_something(opt=1)
  7. do_something(opt=1)

运行结果如下:

Python 函数那不为人知的一面

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

Python 函数那不为人知的一面

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

  1. defdo_something(opt:1,arg=2)->3:
  2. print("dosomethingruning")
  3. print(f"{arg=}")
  4. arg.append(0)
  5. if__name__=="__main__":
  6. print(f"{do_something.__annotations__=}")
  7. print(f"{do_something.__defaults__=}")
  8. #do_something.__annotations__={'opt':1,'return':3}
  9. #do_something.__defaults__=(2,)

原文链接:https://mp.weixin.qq.com/s/djvD_tANr9YBeiNOL61y2A

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部