python – 类型提示:别名原始数据类型是不好的做法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 类型提示:别名原始数据类型是不好的做法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1686字,纯文字阅读大概需要3分钟。
内容图文
![python – 类型提示:别名原始数据类型是不好的做法?](/upload/InfoBanner/zyjiaocheng/797/19e6b35c85c8459b95064c43bc9d731d.jpg)
在Python文档中输入&类型提示我们有以下example:
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector]
矢量类型别名清楚地表明类型别名对于简化复杂类型签名很有用.
但是,对原始数据类型的别名呢?
让我们对比函数签名的两个基本例子:
URL = str
def process_url(url: URL) -> URL:
pass
与
def process_url(url: str) -> str:
pass
具有基本类型str的类型别名URL的版本是:
>自我记录(除其他外,现在我可以跳过记录返回值,因为它应该显然是一个网址),
>抵制类型实现更改(我可以稍后将URL切换为Dict或namedtuple而不更改函数签名).
问题是我找不到其他人遵循这样的做法.我只是害怕我无意中滥用类型提示来实现我自己的想法而不是遵循他们的预期目的.
解决方法:
使用别名来标记值的含义可能会产生误导和危险.应该使用NewType代替.
Recall that the use of a type alias declares two types to be equivalent to one another. Doing
Alias = Original
will make the static type checker treatAlias
as being exactly equivalent toOriginal
in all cases. This is useful when you want to simplify complex type signatures.
简单的混叠有两种方式. List [float]是一个向量,str是一个URL – 除了它不是. URL是一种特殊的str而不是任何可以取而代之的.别名是一种过于强烈的平等陈述,因为它无法表达这种区别.实际上,任何不查看源代码的检查都没有看到区别:
In [1]: def foo(bar: URL):
...: pass
...:
In [2]: foo?
Signature: foo(bar: str)
考虑你在一个模块中将Celsius = float别名,而在另一个模块中使用Fahrenheit = float.这表示使用Celsius作为华氏度是有效的,这是错误的.
除非你的类型具有cary分离意义,否则你应该采用url:str.名称表示含义,有效值的类型.这意味着您的类型应该适合分隔有效值和无效值!
使用别名缩短提示,但使用NewType来优化它们.
Vector = List[float] # alias shortens
URL = NewType("URL", str) # new type separates
内容总结
以上是互联网集市为您收集整理的python – 类型提示:别名原始数据类型是不好的做法?全部内容,希望文章能够帮你解决python – 类型提示:别名原始数据类型是不好的做法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。