- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我真的希望这不是重复的。我试图搜索我的问题,但似乎找不到。
所以我有一个相当简单的函数可以将英尺转换为米:
def feetToMeters(val):
return numpy.array(val) * 0.3048
这很好地工作并接受整数、 float 、数组和列表。但是,如果我放入一个列表(而不是一个 numpy 数组),我希望返回一个列表。所以我写了这个:
def feetToMeters(val):
try:
return val * 0.3084
except TypeError:
return [0.3084 * v for v in val]
(或者,如果我想在这里使用 numpy
,我可以在最后一行使用 return list(numpy.array(val) * 0.3084)
,但我不这样做)不知道这是否真的很重要。)
这是在此处合并鸭子类型(duck typing)的最佳方式,以便我可以避免使用 type
函数吗?本来我试过AttributeError
,但是没有用。尽管如此,我还是对 TypeError
感到厌烦,尽管它似乎有效。
使用 if type(val) is list
代替会不会亵渎神明?
最佳答案
Would it be sacrilegious to use
if type(val) is list
instead?
是的,因为它不适用于列表的子类。如果你想这样做,至少要执行 isinstance(val, list)
。这是一个专门处理列表并将其他所有内容(包括标量和元组)转换为 NumPy 数组的解决方案:
def feetToMeters(feet):
meters = np.asarray(feet) * 0.3048
return list(meters) if isinstance(feet, list) else meters
注意:
list
的子类实例将导致返回一个普通的 list
;您可以扩展它以专门处理更多类型,但通常,对于要处理的每种类型,您需要编写更多代码,因为您需要知道如何构造该类型。因此,这种类型转换通常留给客户端代码。
关于python - 如何正确合并鸭子类型(duck typing)以返回原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421901/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我习惯于动态类型意味着在运行时检查对象/非面向对象结构的类型信息并抛出某种类型错误,即如果它像鸭子类型(duck typing)一样嘎嘎叫,它就是一只鸭子类型(duck typing)。是否有不同类型
这是《Practical Object-Oriented Design in Ruby》书中的一个示例。我有兴趣将这个 ruby 代码翻译成 javascript,以便更好地理解 JS 中的鸭子类
我又在 Scala 闲逛,我希望这是一个关于鸭子类型的基本问题,或者它可能真的与函数定义有关。让我解释: 鉴于以下代码: package johnmcase.scala.oneoffs object
Typescript 在某些情况下执行“鸭子”键入,例如当您针对接口(interface)检查函数参数的有效性时。 例如: interface Named { name: string } fun
代替遍历集合,有时在过程上循环遍历它们更方便。为了避免根据输入区分$_和$_.Key / $_.Value,更一致的键/值处理将是不错的: ForEach-KV $object { Param($k,
我正在使用带有继承的面向对象方法来解决问题,并且我想知道如何将“鸭子类型(duck typing)”原则应用于此问题。 我有一个类 BoxOfShapes ,它将使用 Shapes 列表(Circle
我正在尝试找到一种方法来为继承一对相似接口(interface)的两个对象表达共同的基类型。 请看下面的代码:很明显,fb1 和 fb2 应该有一个可能的公共(public)基类型(例如,类似 IFi
我有一个使用参数元组创建类实例的“工厂”: def factory(cls, arg): return cls(*arg) class Foo(object): def __init__(se
我正在编写一个 Duck 类,这样创建的每个 Duck 对象都包含翼展和重量字段变量。每只鸭子都应该随机初始化这些中的每一个。翼展应初始化为 [80.0,100.0]cm 范围内的随机 float 。
我有一些代码可以在我的应用程序中实现音频闪避。当用户正在听一些音乐时,然后进入某个位置,将播放特定的音乐片段。发生这种情况时,正在播放的原始音乐“低声”(或变得更安静),而我的应用程序开始播放的新音乐
如 TypeScript 中所述 handbook : One of TypeScript’s core principles is that type-checking focuses on the
Python 有特定的 ABCs for container types .它说它们是,“……用于测试类是否提供特定接口(interface)。” (而且它们对某些混入也很有用,但我们暂时忽略它。)
问题 我现在已经阅读了很多关于 Duck Typing 的内容,并且我似乎理解了这个概念。 我不明白的是,在什么情况下放弃强类型化编程的好处而转向 Duck Typing 的好处实际上是有意义的。 在
我的文档太多了,因为每当我遇到一个复杂的鸭子类型(duck typing)时,我都需要某种方式来表达“这个鸭子类型(duck typing)”,但却陷入了“你的函数需要这个输入的这个”的无休止循环,但
在 Advantages of Exceptions Java™ 教程的部分: A method can duck any exceptions thrown within it, thereby a
在我目前的工作中,我正在构建一套严重依赖对象的 Perl 脚本。 (在哈希上使用 Perl 的 bless() 以尽可能接近 OO) 现在,由于缺乏更好的表达方式,我公司的大多数程序员都不是很聪明。更
Can I specify interfaces when I declare a member? 在考虑了这个问题一段时间后,我突然想到静态鸭子类型(duck typing)的语言可能真的有效。为什
我对这两个术语有点困惑,这就是我所知道的: 多态性是不同类型的对象由一个公共(public)接口(interface)处理的能力。而鸭子类型(duck typing),是一种动态类型,它允许不同类型的
所有动态语言都支持duck typing ? 我认为 PHP 支持鸭子类型(duck typing)。是这样吗? 最佳答案 任何动态类型的 oop 语言都支持鸭子类型(duck typing),包括
我是一名优秀的程序员,十分优秀!