鉴于{ k1: v1, k2: v2 ... }我想要{ k1: f(v1), k2: f(v2) ... }提供的字典,我传递了一个函数f.
有没有这样的内置功能?或者我必须这样做
dict([(k, f(v)) for (k, v) in my_dictionary.iteritems()])
Run Code Online (Sandbox Code Playgroud)
理想情况下我会写
my_dictionary.map_values(f)
Run Code Online (Sandbox Code Playgroud)
要么
my_dictionary.mutate_values_with(f)
Run Code Online (Sandbox Code Playgroud)
也就是说,如果原始字典被改变或创建了副本,对我来说无关紧要.
我最近发现了一个使用名为的vim插件<Plug>.例如,有一个<Plug>abc_def我想要执行的命令.
我尝试过:<Plug>abc_def类似的东西.没有任何效果.并:help <Plug>没有提供任何信息.
但是,我已经能够通过创建映射来执行它:map x <Plug>(unite_redraw).然后我可以按下来执行它x.
现在,有没有办法执行:<Plug>abc_def而不创建虚拟映射只是为了运行它?我使用的实际插件是Unite.
我只是偶然发现了由Edward Kmett命名为" Monoids " 的幻灯片中的monoidal 解析这个术语.幻灯片始终使用haskell.
现在,在搜索这个词的时候,我发现只有极少数提及它,而且来自同一作者.所以我认为这个术语可以在这里解释.
那么,monoidal解析一些有趣和新的东西吗?它出现在除我链接到的幻灯片之外的任何地方吗?最重要的是它是什么?幻灯片本身似乎没有给出定义,也没有强调它.
我对matlab很新,但我知道如何为循环和匿名函数做两件事.现在我想结合这些.
我想写:
sa = @(c) for i = 1:numel(biscs{c}), figure(i), imshow(biscs{c}{i}.Image), end;
但这是无效的,因为matlab似乎只想要换行符作为命令分隔符.我的代码以清晰的方式编写(没有函数头):
for i = 1:numel(biscs{c})
figure(i)
imshow(biscs{c}{i}.Image)
end
Run Code Online (Sandbox Code Playgroud)
我寻找一个解决方案,我可以用一个匿名函数在一行中编写它,就像我的第一个例子.如果我可以用另一种方式创建该函数,我也会很高兴,只要我不需要一个新的函数m文件.
在Haskell中,在定义数据类型时,您可以选择自动派生某些实例,但是我可以推迟自动派生,甚至可以将其放在另一个库中吗?
这是一个例子:
在Haskell中自动导出是一个实时节省!
module MoneyModule where
data Money = Money Int
deriving Show
Run Code Online (Sandbox Code Playgroud)
现在我想使用MoneyModule,但我也想要一个Read实例Money:
module ExternalModule where
instance Read Money where
read = error "Can't this be done automatically instead?"
Run Code Online (Sandbox Code Playgroud)
但我真的更喜欢它自动派生,我知道如果只有MoneyModule作者自动派生Read实例,ghc可以做到.
我知道:
MoneyModule通过使用缺少的实例修补问题来解决实际问题.在我的情况下,我无法遵循最佳实践,因为类型类与数据类型无关.我怀疑类型类模块和数据类型模块是否想要保存实例,因此我创建了第三个库,因为在某些应用程序中需要实例声明.
在包装我只是偶然OneTuple 上hackage.我想知道它的目的,我确信作者并不是为了它的乐趣而创造它.那么这什么时候有用呢?很清楚它的作用,但不会在人们使用它的时候.
那么,当你可以从中受益时,任何人都知道任何很酷的例子吗?或者也许展示它背后的数学美?
我在测试返回迭代的python函数时遇到了困难,比如正在产生的函数或只返回一个iterable的函数,比如return imap(f, some_iter)或return permutations([1,2,3]).
因此,使用排列示例,我期望函数的输出[(1, 2, 3), (1, 3, 2), ...].所以,我开始测试我的代码.
def perm3():
return permutations([1,2,3])
# Lets ignore test framework and such details
def test_perm3():
assertEqual(perm3(), [(1, 2, 3), (1, 3, 2), ...])
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为perm3()它是可迭代的,而不是列表.所以我们可以解决这个特殊的例子.
def test_perm3():
assertEqual(list(perm3()), [(1, 2, 3), (1, 3, 2), ...])
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,如果我有嵌套的iterables怎么办?这是迭代产生迭代?喜欢说出表达方式
product(permutations([1, 2]), permutations([3, 4])).现在这可能没有用,但很明显它会(一旦展开迭代器)就像这样[((1, 2), (3, 4)), ((1, 2), (4, 3)), ...].然而,我们不能只是包装list围绕我们的结果,因为这只会反过来iterable<blah>给[iterable<blah>, iterable<blah>, ...].当然,我可以这样做map(list, product(...)),但这仅适用于2的嵌套级别.
那么,python测试社区在测试iterables时是否有解决问题的方法?当然,有些迭代物不能以这种方式进行测试,就像你想要一个无限的发生器一样,但是这个问题应该是足够普遍的,以便有人想到这个.
如果我们看一下containers包裹.他们有Data.Map.Strict,但没有相应的Data.Set.Strict.它存在是否有意义?
我目前正在使用不断返回警告的编译器,我不想看到警告.我注意到所有警告都以字符串"Note:"开头,所以我认为可以过滤掉这些行.
我编译
jrc *.jr
Run Code Online (Sandbox Code Playgroud)
是否有一个unix命令改变它给出的输出,不打印出以"Note:"开头的行?
当用大数字进行模数计算时,你会遇到巨大的性能惩罚mod (123456789^987654321) n.相反,你必须使用自己的^内部计算mod n进行中间计算.
当然,我可以很容易地实现自己的功能,但是我必须为每个操作明确说出"mod n".相反,可以构建一个数值表达式树并推迟实际计算,并且在最终状态模数n只有一次.(见下面的代码)
我开始这是为了清楚地表明我的意思,但我想知道是否已经存在这种实现,它看起来非常有用,所以有人应该实现它.
module Modulo where
data Expr =
V Integer
| Plus Expr Expr
| Mult Expr Expr
deriving (Eq, Show)
instance Num Expr where
(+) = Plus
(*) = Mult
fromInteger = V
eval :: Integer -> Expr -> Integer
eval m (V i) = i `mod` m
eval m (Plus e1 e2) = (eval m e1 + eval m e2) `mod` m
eval m (Mult e1 e2) = (eval …Run Code Online (Sandbox Code Playgroud) haskell ×5
python ×2
containers ×1
dictionary ×1
for-loop ×1
iterator ×1
map-function ×1
matlab ×1
modulo ×1
monoids ×1
parsing ×1
sed ×1
set ×1
strictness ×1
testing ×1
tuples ×1
typeclass ×1
unix ×1
vim ×1
vim-plugin ×1