所以我试图推出一个我在这个网站上真正第一次听到的技巧.
[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",对吧?
有时,当重写递归函数作为生成器时,我会想到它的简洁性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) >>> 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)
如果第二个案件抱怨,为什么第一个案件是沉默的?
我计划向我的 Rails 应用程序添加第二个 Redis 实例。通过阅读文档,https://devcenter.heroku.com/articles/heroku-redis#assessment-the-primary-instance,在 Heroku 上执行此操作的最佳实践似乎是将其中一个实例指定为“主要实例”。 “实例,使用配置变量指向它REDIS_URL,并使用另一个配置变量和其他名称指向第二个实例。
这不太适合我,因为我想使用更多语义名称。
将我的一个实例指定为“主要”有多重要?这样做我能得到什么?这些文档包含诸如“Heroku 建议使用REDIS_URL配置变量来存储主实例的位置”之类的句子,但没有详细介绍。
在Django文档说:
...即使切片未评估的QuerySet返回另一个未评估的QuerySet,也不允许进一步修改它(例如,添加更多过滤器或修改排序),因为这不能很好地转换为SQL,也不会有明确的含义.
从这里我认为这意味着做这样的事情:
q1 = Pizza.objects.all()[0:5]
q2 = q1.order_by(...)
Run Code Online (Sandbox Code Playgroud)
不被允许.我有两个问题:
Pizza对象,然后得到前5个?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) 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().
(这都是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 ×5
coding-style ×1
django ×1
fabricjs ×1
generator ×1
haskell ×1
heroku ×1
javascript ×1
orm ×1
python-2.7 ×1
python-3.x ×1
sql ×1
yield ×1