小编Ari*_*ide的帖子

在递归函数中重新排序匹配子句

我在学校有一些Ocaml课程,为了练习,我们必须编写函数长度.

我的老师向我们展示了Xavier Leroy如何编写他的功能:

let rec length_aux len = function
   [] -> len
 | a::l -> length_aux (len + 1) l

let length l = length_aux 0 l
Run Code Online (Sandbox Code Playgroud)

当我的老师向我们解释他为什么这样做长度函数时,他说他不知道为什么Xavier Leroy没有写:

let rec length_aux len = function
   a::l -> length_aux (len + 1) l
 | [] -> len

let length l = length_aux 0 l
Run Code Online (Sandbox Code Playgroud)

...为了使它更快(因为大多数情况下列表是非空的).

所以如果有人知道为什么第二个并不比第一个好,你能回答我吗?

谢谢.

algorithm optimization recursion ocaml

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

定义一个 IPython 魔法来替换下一个单元格的内容

line-magic命令%load将给定文件的内容加载到当前单元格中,例如,执行:

[cell 1]    %load hello_world.py
Run Code Online (Sandbox Code Playgroud)

...将单元格转换为:

[cell 1]    # %load hello_world.py
            print("hello, world")
Run Code Online (Sandbox Code Playgroud)

我想创建一个%load_nextline-magic 命令,它将将此文件加载到下一个单元格中。例如,在以下笔记本中执行单元 1:

[cell 1]    %load_next hello_world.py

[cell 2]    print("hello, cruel world")  # original content
Run Code Online (Sandbox Code Playgroud)

...将保持单元格 1 不变并使用新内容更新单元格 2:

[cell 1]    %load_next hello_world.py

[cell 2]    print("hello, world")
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个:

[cell 1]    %load hello_world.py
Run Code Online (Sandbox Code Playgroud)

但它会在当前单元格和下一个单元格之间插入内容:

[cell 1]    %load_next hello_world.py

[cell 2]    print("hello, world")

[cell 3]    print("hello, cruel world")  # original content
Run Code Online (Sandbox Code Playgroud)

是否可以使其替换下一个单元格,或在插入下一个单元格之前删除下一个单元格?

python ipython ipython-magic jupyter-notebook

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

在任一方向上循环一段时间

假设你想循环遍历两个边界ab(包括)之间的所有整数,但事先不知道如何a比较b.预期行为:

def run(a, b):
    if a < b:
        for i in range(a, b + 1):
            print i,
    elif a > b:
        for i in range(a, b - 1, -1):
            print i,
    else:
        print a
    print

run(3, 6)
run(6, 3)
run(5, 5)
Run Code Online (Sandbox Code Playgroud)

结果:

3 4 5 6
6 5 4 3
5
Run Code Online (Sandbox Code Playgroud)

有更优雅的解决方案吗?以下内容更简洁,但在以下情况下失败a == b:

def run(a, b):
    for i in range(a, b + cmp(b, a), cmp(b, a)):
        print i,
    print …
Run Code Online (Sandbox Code Playgroud)

python loops intervals

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

获得与给定值对应的"零值"

在Python 2.7中,给定一个内置类型的值t,如何在t不枚举所有情况的情况下计算"零值" ?

def zero_value(x):
    if isinstance(x, dict):
        return dict()
    if isinstance(x, int):
        return 0
    if isinstance(x, bool):
        return False
    if x is None:
        return None
    # ...

assert zero_value({1: 2, 3: 4}) == {}
assert zero_value(3) == 0
assert zero_value(None) == None
assert zero_value(True) == False
Run Code Online (Sandbox Code Playgroud)

不确定"零值"是否是正确的术语,因为我在SO或Google上找不到任何答案......我已经浏览了这个魔术方法列表而没有取得更多成功.

python types zero python-2.7

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

在Python 3中哈希一个int

我想向学生们展示MD5与这里给出的两个整数"消息"相冲突.这是我对Python 2.7的原始演示:

from hashlib import md5

m1 = "d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70"
m2 = "d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70"
# differences                               ^                                                   ^                           ^                                               ^                                                   ^                           ^

print md5(m1.decode("hex")).hexdigest()
print md5(m2.decode("hex")).hexdigest()
Run Code Online (Sandbox Code Playgroud)

正如所料,它打印两次79054025255fb1a26e4bc422aef54eb4.现在,当我尝试将最后两行转换为Python 3.5时:

print(md5(int(m1, 16)).hexdigest())
print(md5(int(m2, 16)).hexdigest())
Run Code Online (Sandbox Code Playgroud)

我得到的只是一条TypeError: object supporting the buffer API required信息.该方法decode在Python 3中不再有效,但我不确定int(m, base)如上所述替换它是个好主意.可能是问题在那里,而不是哈希函数API?

python hash hex

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