小编Eli*_*ICA的帖子

在python列表理解中调用print

所以我试图推出一个我在这个网站上真正第一次听到的技巧.

[i for i in range(0, 10) if True or print(i)]
Run Code Online (Sandbox Code Playgroud)

这个想法是你可以在listcomp的每一步调用一个任意函数,方法是将它放在一个总是返回True的"if"语句中.但该代码给出了语法错误.

如果我包装我想要这样调用的函数,但是:

def f(i):
    print i

[i for i in range(0, 10) if True or f(i)]
Run Code Online (Sandbox Code Playgroud)

它产生所需的输出.所以我想知道,在Python的脑海中,两者之间有什么不同,因为我不知道它可能是什么 - 两个函数都返回"None",对吧?

python list-comprehension python-2.7

3
推荐指数
2
解决办法
256
查看次数

相当于Python生成器的`return`

有时,当重写递归函数作为生成器时,我会想到它的简洁性return.

"""
Returns a list of all length n strings that can be made out of a's and/or b's.
"""
def ab_star(n):
    if n == 0:
        return [""]

    results = []
    for s in ab_star(n - 1):
        results.append("a" + s)
        results.append("b" + s)

    return results
Run Code Online (Sandbox Code Playgroud)

变成

"""
Generator for all length n strings that can be made out of a's and/or b's.
"""
def ab_star(n):
    if n == 0:
        yield ""

    else:
        for s in ab_star(n - 1): …
Run Code Online (Sandbox Code Playgroud)

python coding-style yield generator

3
推荐指数
2
解决办法
1249
查看次数

Python:为什么足够大的浮点值无限?

>>> 1e100000000
inf
>>> 1000000 ... [400 zeroes snipped] ... 000000
1000000 ... [400 zeroes snipped] ... 000000
>>> 1000000 ... [400 zeroes snipped] ... 000000.0
inf
Run Code Online (Sandbox Code Playgroud)

为什么Python决定大浮点数是无限的?如果表示不能表示该值,我希望它会给出错误,如下所示:

>>> 10.0 ** 1000000000000000000000000000000000000000000000000000000
OverflowError: (34, 'Numerical result out of range')
Run Code Online (Sandbox Code Playgroud)

如果第二个案件抱怨,为什么第一个案件是沉默的?

python floating-point

3
推荐指数
1
解决办法
110
查看次数

Heroku 上多个 Redis 实例的最佳实践?

我计划向我的 Rails 应用程序添加第二个 Redis 实例。通过阅读文档,https://devcenter.heroku.com/articles/heroku-redis#assessment-the-primary-instance,在 Heroku 上执行此操作的最佳实践似乎是将其中一个实例指定为“主要实例”。 “实例,使用配置变量指向它REDIS_URL,并使用另一个配置变量和其他名称指向第二个实例。

这不太适合我,因为我想使用更多语义名称。

将我的一个实例指定为“主要”有多重要?这样做我能得到什么?这些文档包含诸如“Heroku 建议使用REDIS_URL配置变量来存储主实例的位置”之类的句子,但没有详细介绍。

ruby-on-rails heroku

3
推荐指数
1
解决办法
1028
查看次数

切片后对Django QuerySet进行排序

Django文档说:

...即使切片未评估的QuerySet返回另一个未评估的QuerySet,也不允许进一步修改它(例如,添加更多过滤器或修改排序),因为这不能很好地转换为SQL,也不会有明确的含义.

从这里我认为这意味着做这样的事情:

q1 = Pizza.objects.all()[0:5]
q2 = q1.order_by(...)
Run Code Online (Sandbox Code Playgroud)

不被允许.我有两个问题:

  • 为什么文档说这个?我可以理解,也许它不能很好地转化为SQL,但对我来说,"明确的含义"是你获得前5个披萨对象,然后你按照任何标准订购它们.
  • 如果这样做会怎么样?我已经做了一段时间,代码是正确的(但很慢).它是否实际上反向执行 - 命令所有Pizza对象,然后得到前5个?

python sql django orm

1
推荐指数
1
解决办法
639
查看次数

Haskell - 无法在无限序列中推导出(a~Integer)

powers_of :: (Integral a) => a -> [Integer]
powers_of n = sequence
where
    sequence = 1 : next sequence
    next (first : rest) = (n * first) : next rest
Run Code Online (Sandbox Code Playgroud)

这让我:

Could not deduce (a ~ Integer)
from the context (Integral a)
  bound by the type signature for
             powers_of :: Integral a => a -> [Integer]
  at Triangle.hs:(10,1)-(13,61)
  `a' is a rigid type variable bound by
      the type signature for powers_of :: Integral a => a -> [Integer]
      at Triangle.hs:10:1 …
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
1
解决办法
589
查看次数

Fabric.js:`add()`和`addWithUpdate()`有什么区别?

var canvas = new fabric.Canvas('canvas');
var a = new fabric.Rect({ width: 20, height: 20 });
var g = new fabric.Group([a]);
canvas.add(g);

var b = new fabric.Rect({ width: 20, height: 20, left: 30 });
g.add(b);
canvas.renderAll();
Run Code Online (Sandbox Code Playgroud)

我希望这段代码能给我两个水平分隔30个像素的正方形.相反,它给了我这个:

方块未对齐!

当我替换g.add()上面的时候g.addWithUpdate(),我得到了预期的结果.为什么?我不认为我理解文档; 他们说addWithUpdate()

将对象添加到组中; 然后重新计算组的维度,位置.

我不知道该组的维度或位置与此有何关系.任何人都能解释一下吗?我遇到的真正问题比上面的问题更复杂,但我认为基本上是因为我不明白addWithUpdate().

javascript fabricjs

0
推荐指数
1
解决办法
2038
查看次数

函数调用中的 Python 推导式 (PEP 448)

(这都是Python 3.5.2上的)

在PEP 448的底部,我看到:

函数调用中不带括号的推导式(例如 )f(x for x in it)已经有效。

这很有趣。如果我定义以下函数:

def f(a, b, c):
    return a + b + c
Run Code Online (Sandbox Code Playgroud)

那么这个措辞让我这么认为f(thing for thing in [1, 2, 3]) == 6。但实际上,我得到:

>>> f(thing for thing in [1, 2, 3])
TypeError: f() missing 2 required positional arguments: 'b' and 'c'
Run Code Online (Sandbox Code Playgroud)

即整个生成器表达式作为 传递a

那么PEP 448中的这句话是什么意思呢?只是您可以传递生成器表达式作为参数吗?

python language-lawyer python-3.x

0
推荐指数
1
解决办法
115
查看次数