在较早前的问题有关zipWith,@马丁Odersky的建议的,与其类似
foo zipWith(_ + _) bar
Run Code Online (Sandbox Code Playgroud)
(foo以及bar哪些Seq是)以下更好(实际上在Scala中有效).
(foo, bar).zipped map (_ + _)
Run Code Online (Sandbox Code Playgroud)
我的问题是如何map知道它的论证(表面看起来似乎是一对)应该分成两个元素?
以下实际上在工作表中运行.
val list1 = List(1, 2, 3, 4) //> list1 : List[Int] = List(1, 2, 3, 4)
val list2 = List(5, 6, 7, 8) //> list2 : List[Int] = List(5, 6, 7, 8)
val zippedResult = (list1, list2).zipped //> list3 : scala.runtime.Tuple2Zipped[Int,List[Int],Int,List[Int]] = scala.run
//| time.Tuple2Zipped@f4bf78da
zippedResult.mkString(", ") //> res4: String = (1,5), (2,6), …Run Code Online (Sandbox Code Playgroud) 我breed有个叫players.每player-owns一个player-strategy.有6种可能player-strategies.当我写作
histogram [player-strategy] of players
我的情节中没有任何内容.
我有一个带一支笔的情节 - 并没有设置情节或笔名.plot-name返回情节.pen-mode是bar.interval是1.0
我不知道如何要求当前penname.但由于情节只有一支笔,所以无所谓.
直方图命令位于plot-update和pen-update.我在一起或一次尝试过它.我也试过代码.没有区别.
我需要做什么才能显示直方图?
这是一个简单的有界生成器。
def bounded_naturals(limit):
num = 1
while num <= limit:
yield num
num += 1
Run Code Online (Sandbox Code Playgroud)
如果我写
bn_gen = bounded_naturals(3)
Run Code Online (Sandbox Code Playgroud)
bn_gen 将是预期的生成器对象。
但是如果我写
(a, b, c) = bounded_naturals(3)
Run Code Online (Sandbox Code Playgroud)
a、b和c分别为 1、2 和 3。这让我觉得很奇怪,因为代码中似乎没有任何东西要求生成器生成值。Python 规范中是否有需要这种解释的地方?
更惊人的是,如果我写
bn_gen = (a, b, c) = bounded_naturals(3)
Run Code Online (Sandbox Code Playgroud)
我得到了两个结果!bn_gen将是一个生成器对象,并且a,b和c将是 1、2 和 3。我应该如何理解发生了什么?
最后,如果我写
(a, b) = bounded_naturals(3)
Run Code Online (Sandbox Code Playgroud)
我得到: ValueError: too many values to unpack (expected 2).
如果编译器足够聪明来执行这些其他技巧,为什么在这种情况下只要求生成器提供所需的元素数量还不够聪明?
Python 文档中是否有一节解释了所有这些?
谢谢。
编写一个由其他两个函数组成的函数是相当简单的。(为简单起见,假设它们各有一个参数。)
def compose(f, g):
fg = lambda x: f(g(x))
return fg
def add1(x):
return x + 1
def add2(x):
return x + 2
print(compose(add1, add2)(5)) # => 8
Run Code Online (Sandbox Code Playgroud)
我想使用运算符进行组合,例如(add1 . add2)(5).
有没有办法做到这一点?
我尝试了各种装饰器配方,但我无法让它们中的任何一个起作用。
def composable(f):
"""
Nothing I tried worked. I won't clutter up the question
with my failed attempts.
"""
@composable
def add1(x):
return x + 1
Run Code Online (Sandbox Code Playgroud)
谢谢。
刚刚遇到了一些对我来说似乎很奇怪的事情。反引号的功能类似于语法运算符。
applyOp :: Int -> (Int -> Int -> Int) -> Int -> Int
applyOp x op y = x `op` y
> applyOp 2 (+) 5
7
Run Code Online (Sandbox Code Playgroud)
看到这一点我很惊讶。我一直认为需要反引号来包围运算符符号或标识符,而不是可以在执行期间绑定到运算符的标识符。我是否以错误的方式思考这个问题?
假设我有一个简单abstract BinaryTree的子类Node,Leaf我想写一个产生一个的函数List[Leaf].
def getLeaves(tree: BinaryTree): List[Leaf] =
tree match {
case Leaf(v) => List(tree.asInstanceOf[Leaf])
case Node(left, right) => getLeaves(left) ++ getLeaves(right)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法避免案件中的明确asInstanceOf[Leaf]演员?如果我把它遗漏,我得到一个诊断说法:发现:BinaryTree; 需要叶.Leaf