>>> def f(ham: str, eggs: str = 'eggs') -> str:
... print("Annotations:", f.__annotations__)
... print("Arguments:", ham, eggs)
... return ham + ' and ' + eggs
...
>>> f('spam')
Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}
Arguments: spam eggs
'spam and eggs
这新功能简直是福音啊!
1
oyjc 2016-04-01 21:22:53 +08:00
有啥用吗?为了静态编译?
|
3
lecher 2016-04-01 21:29:11 +08:00 via Android
文档学得好就用不上。
不过写测试脚本很有用,做规范性的接口检测。 |
4
ethego 2016-04-01 21:35:33 +08:00
@lecher 我觉得这么搞还不如静态类型+类型推断来的好,事实证明动态类型是一条歧路,好的类型推断已经能足够取得几乎一切动态类型的优势了。
|
6
zhuangzhuang1988 2016-04-01 22:35:53 +08:00
不好, 还不如 ts 来得爽。。 而且 python 中的默认参数也有坑。绑定在函数对象上, 而不是在函数代码中判断。
|
7
neoblackcap 2016-04-01 22:36:56 +08:00
这个其实问题不大,暂时也还是文档的作用。毕竟之前成型一点的项目文档也是会写上类型参数的,同时实现里面还一大堆 assert
|
8
guyskk 2016-04-01 23:28:09 +08:00
没什么用,顶多当作文档,动态类型有动态类型的特点,简单,灵活,不需要这些东西。
|
9
XIVN1987 2016-04-01 23:50:12 +08:00
@ethego
在 iPython 里面做计算或学习库的时候为了简单一个变量名来回用,一个 d 刚开始赋值字符串,计算过程中赋值数组、 ndarray 各种类型的值随便赋,,静态类型怎么做到?? 难道在这种探索性学习、研究的时候还有考虑怎么给变量命名的问题吗?? |
10
Kilerd 2016-04-01 23:58:53 +08:00
怎么感觉跟 Swift 越来越像了
管他呢,反正我是 py2 |
11
ethego 2016-04-02 02:16:08 +08:00
@XIVN1987 这些类型推断也可以做到。数组的话你需要考虑并集和泛型的问题,但是就算是动态类型,你一样也需要思考这些,不然程序未免不出 bug
|
12
XIVN1987 2016-04-02 08:04:40 +08:00 via Android
|
13
Frapples 2016-04-02 09:36:43 +08:00
个人觉得用处还是很大的,一般需要动态语言的灵活性的地方不多,在不需要这种灵活性的地方用这种语法,大大减少了 bug 。
否则,就是一次 coding,到处 debug 了。。。 |
14
janxin 2016-04-02 10:28:52 +08:00 via iPhone
现在都在看 type hint 吧
|
15
bdbai 2016-04-02 10:39:45 +08:00 via Android
@zhuangzhuang1988 活捉传教士一枚
|
16
ethego 2016-04-02 11:31:01 +08:00
@XIVN1987 你啊,不要总想着搞个大新闻,把静态类型批判一番, naive
Rust: https://play.rust-lang.org/?gist=8a301713d15d44d5a80c44d28d5d0c72&version=nightly&backtrace=0 Crystal: https://play.crystal-lang.org/#/r/vsl 这确实不叫赋值,叫重新绑定。对于结构体,你可以用泛型来做到,只需一点安全必要的牺牲。 iPython 那种 REPL ,现在很多静态语言都有啊。 |
18
lins05 2016-04-02 11:54:46 +08:00
对 jedi 这种工具,还是有不少增强的 https://github.com/davidhalter/jedi/pull/661
|
20
pynix 2016-04-03 04:41:52 +08:00
后期应该会给予这个做 jit 优化。
|
21
wizardforcel 2016-04-03 13:15:06 +08:00 via Android
|