- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Python 程序,即使缺少某些功能所需的某些库,该程序也需要能够运行。 (编辑:我写了一些代码来实现最好的建议解决方案,它是 here ,带有 doctest here 。)
我通过将此类库的导入语句内嵌到使用它们的函数中而不是放在 Python 文件的顶部来解决这个问题。这意味着即使您没有该库,您也可以完美地加载文件,但如果您尝试调用其中一个函数,您当然会抛出 ImportError。
效果非常好,我发现自己有时也会为标准库模块这样做 - 但现在我想知道这样做是否会产生一些隐性成本?
基线代码:
import numpy
def foo():
return numpy.array([])
def bar():
return numpy.array([1, 2, 3])
带有内联导入的代码:
def foo():
import numpy
return numpy.array([])
def bar():
import numpy
return numpy.array([1, 2, 3])
编辑:
我完全同意不内联标准库代码——这显然很糟糕。
我现在认为 protected 导入是正确的解决方案。
特别是,我对调用进行了一些计时测试,虽然时间差异对于大多数应用程序来说可能并不重要,但它是可观的(细线,我知道!)
在一般情况下
import numpy
def f():
return numpy
在我的机器上大约需要 180 毫秒重复 100,000 次但是
def f():
import numpy
return numpy
大约需要 870 毫秒。
非常粗略的结论是,这会花费多达四个微不足道的函数调用 - 值得注意但在大多数情况下并不重要。不过,如果不需要花费任何费用,最好避免这样做。
在实验中,我还意识到内联导入的另一个缺点 - 这些导入会在调用函数时在不可预测的时间结束。在我的具有实时元素的应用程序中,这是 Not Acceptable 。
最佳答案
没有明显的性能影响,但它会使您的代码变得困惑。如果您决定添加新的导入或必须更改旧的导入,则必须在所有地方进行更改,而不是只在一个地方进行更改。
此外,您应该确保将其记录在案。如果库似乎正确导入但稍后在调用特定函数时失败,一些用户可能会感到恼火。此外,虽然整体性能没有受到影响,但可能会出现性能“重新洗牌”,从而导致意想不到的地方速度下降。第一次调用导入 numpy
的函数时,它必须进行导入,这需要时间。用户也可能会发现这种情况不受欢迎,并希望所有缓慢的导入都预先完成。
您可以通过 all-at-the-top 导入轻松获得类似的效果:
try:
import numpy
except ImportError:
warnings.warn("Numpy not available, some functions may not work!")
稍后尝试使用试图访问 numpy
的函数现在将失败并出现 NameError。通过使用警告(或只是打印/记录的消息),您还可以提前通知某些事情将无法正常工作,而不是稍后突然失败。
关于python - 使用 import inline 是否会产生负面影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841014/
看看这个 fiddle http://jsfiddle.net/9S4zc/2/ 为什么这在 firefox 和 chrome 中看起来不同(文本对齐方式不同) 如何让 inner:before 元素
我从文档中了解到的是 %{ %} 之间的内容。被插入到包装器中,%inline %{ %} 呢? ? 是一样的吗?如果不是,有什么区别? 也许我们可以找到很多%inline %{ %}的出现。但仅出现
当我使用 显示:inline-flex; 或 显示:内联网格; 似乎有一些额外的“空间”或某种额外的重点计算发生。我不确定到底发生了什么。当使用箭头键在 contentediatble div 中导航
如果我想让一个 div 与容器 div 的其他内联元素内联,而我的目的仅此而已,我应该更喜欢使用 inline-block 或 display property 还是 inline-flex?不能使用
这个问题在这里已经有了答案: Why does an inline-block align to top if it has no content? (2 个答案) 关闭 8 年前。
Ada 信息交换所 states the following : The use of pragma Inline does have its disadvantages. It can create
Name
我问这个基本问题是为了让记录更正。已转介 this question和 its currently accepted answer ,这没有说服力。然而second most voted answer
你好, 在管理面板中,我创建了用于添加产品的表单。表单包括 2 个内联表单集,因为有一些与产品相关的模型。用户可以创建产品,然后定义该产品的不同属性的变体。我将举例说明这一点。用户拥有一个品牌的 3
有很多关于 inline 的使用以及如何正确执行此操作以达到所需目的的信息,例如此处(我目前将其用作引用)Inline Functions in C . 当我尝试实现页面中指定的内容时,出现编译器错误
我正在编写 gtk 代码。我经常有不需要闭包的简短回调,因为它们传递了它们需要的所有参数。例如,我在创建一些 gtk.TreeViewColumns 时将其置于循环中: def widthChange
这个问题在这里已经有了答案: What is the difference between display: inline and display: inline-block? (7 个答案) 关闭
我已经搜索了很长时间来找到答案,但是我没有找到解决方案... 我制作了一个无序列表的链接,并将它们放在标题下,就像导航栏一样。然而,在 IE 中(是的那个恶魔..)我的链接似乎没有对齐到中间。下面是我
我想将两张 table 并排放置。由于我不是 floating 或使用“css hacks”的忠实拥护者,您有什么建议?没有它是否可以解决,还是我运气不好? 最佳答案 使用 table-cell显示以
这个问题在这里已经有了答案: Why is this inline-block element pushed downward? (8 个答案) 关闭 6 年前。
CSS display 的 inline 和 inline-block 值到底有什么区别? 最佳答案 视觉答案 想象一个 中的元素.如果你给 例如,元素高度为 100px 和红色边框,它看起来像这
我想使用 /纯 CSS 弹出窗口的标签,但是 表现为内联 block ,我无法将其更改为内联。 有没有办法强制表现得像 display:inline 而不是 inline-block?
我的想法是这是不可能的,或者我缺少一个额外的步骤。无论哪种方式,我都被卡住了,无法弄清楚。 使用内联模板的原因是能够使用 Laravel Blade 语法并结合 Vue Js 的强大功能。似乎是两者中
http://christianselig.com/wp/ 对于主导航,如果我使用 display: inline,它们将显示为 block 。我心血来潮添加了 display: inline-blo
Firefox 的 -moz-inline-box 和 -moz-inline-stack 专有显示值有什么区别? 最佳答案 https://developer.mozilla.org/en/CSS/
我是一名优秀的程序员,十分优秀!