Python 函数的高级写法?

2018-08-27 16:45:54 +08:00
 Leigg

看源码的时候,经常看到:

def func(args) -> str: ...

这种写法,问问大佬们这种写法什么意思,什么时候会用到?

2345 次点击
所在节点    Python
10 条回复
WildCat
2018-08-27 16:48:12 +08:00
stevenshuang
2018-08-27 16:48:21 +08:00
返回类型
lincanbin
2018-08-27 16:49:32 +08:00
声明返回值类型,为了解决弱类型语言中某些操蛋的问题
lincanbin
2018-08-27 16:51:01 +08:00
Python 算是强类型语言,但是没有显式类型声明。
例如 a + b,如果 a 跟 b 是字符串'1',那么结果是 11。
如果 a 跟 b 是整数 1,那么结果是 2。
huangzhe8263
2018-08-27 16:57:37 +08:00
python 3.5 以上新加的, 专门用来规范实现类型标注的
免得让接手的人或者半年后的自己想活剥了写代码的人的
type hint

特别是再加上 Pycharm 就更好用了
lincanbin
2018-08-27 16:58:52 +08:00
在没有显式类型声明的情况下,如果你的数据来源于其他接口,很可能你不知道或者不确定它是什么类型,那么你对这个数据的操作结果,也就不可预料。
例如你计算用户完成若干个任务的返现,你从 json 接口 1 拿到{"a": "100"},从接口 2 拿到{"b": "100"}。
原来你应该结算给用户 200 块的,现在你直接 a+b,好了,你给用户返现了 100100 块。

如果你用:

def add(a:int, b:int) -> int:
return a + b

这个问题就解决了
cnrting
2018-08-28 09:40:49 +08:00
@lincanbin "100100"不是 100100
bmos
2018-08-28 14:31:11 +08:00
@lincanbin 意思是 add('100','100'')返回 200 吗,我实验了一下好像没有效果。返回“ 100100"。py3.6
frostming
2018-08-28 17:21:07 +08:00
@lincanbin 类型标注并不会强制转换,所以就算你标了 int 传进来该是什么还是什么

类型标注的意义只是为了让某些代码检查工具(如 mypy )做静态检查。
Qzier
2018-08-29 01:17:59 +08:00
关键词 type hint

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/483698

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX