标签: built-in

为什么 Python 中的无分支函数和内置函数速度较慢?

我发现了 2 个无分支函数,它们在 python 中查找两个数字的最大值,并将它们与 if 语句和内置 max 函数进行比较。我认为无分支或内置函数将是最快的,但最快的是 if 语句函数。有人知道这是为什么吗?以下是功能:

If 语句(25000 次操作需要 2.16 秒):

def max1(a, b):
    if a > b:
        return a
    return b
Run Code Online (Sandbox Code Playgroud)

内置(25000次操作4.69秒):

def max2(a, b):
    return max(a, b)
Run Code Online (Sandbox Code Playgroud)

Branchless 1(25000 次操作需要 4.12 秒):

def max3(a, b):
    return (a > b) * a + (a <= b) * b
Run Code Online (Sandbox Code Playgroud)

Branchless 2(25000 次操作需要 5.34 秒):

def max4(a, b):
    diff = a - b
    return a - (diff & diff >> 31)
Run Code Online (Sandbox Code Playgroud)

python performance built-in branchless

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

如何在vim中禁用内置命令

在vim中,当我点击:wq它时几乎总是在尝试输入时发生的事故:w.我想禁用:wq.

我找到的最接近的是cmap,但它有一些奇怪的行为.如果我做的事情

:cmap wq w
Run Code Online (Sandbox Code Playgroud)

我甚至不能输入:wq; 它只是将击键序列重新映射wqw命令模式.例如,我不能在包含的字符串上输入搜索/替换命令wq.

我只是想别名的准确命令:wq:w或无操作.有没有办法做到这一点?

编辑:澄清为什么:cmap不是我的选择

vim command built-in remap

8
推荐指数
2
解决办法
2024
查看次数

为什么有些Prelude函数是根据foldl定义的?

一般来说,foldl避免赞成foldl'foldr.引用真实世界Haskell:

由于foldl的thunking行为,在实际程序中避免这种功能是明智的:即使它没有完全失败,也会不必要地低效.相反,导入Data.List并使用foldl'.

然而,一些Prelude函数是根据它来定义的(例如(\\)unionBy).为什么是这样?是不是对这些功能引入了太多的严格要求?

haskell built-in

8
推荐指数
2
解决办法
398
查看次数

如果在使用read时未使用新行char(\n)终止,则尊重最后一行

我注意到有一段时间,read如果没有文件的最后一行,那么它最后就不会读取一个"换行符".如果考虑到这一点,这是可以理解的,只要文件中没有"换行"字符,就好像它包含0行(这很难承认!).例如,请参阅以下内容:

$ echo 'foo' > bar ; wc -l bar
1 bar
Run Code Online (Sandbox Code Playgroud)

但...

$ echo -n 'bar' > foo ; wc -l foo
0 foo
Run Code Online (Sandbox Code Playgroud)

那么问题是:当我使用read处理尚未由我自己创建或修改的文件时,如何处理这种情况,以及我不知道它们是否真的以"换行符"结尾?

bash shell built-in

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

os.path.join()如何工作?

请帮我理解内置的os.path.join()函数是如何工作的.例如:

import os
print os.path.join('cat','dog') # 'cat/dog' no surprise here
print os.path.join('cat','dog').join('fish') # 'fcat/dogicat/dogscat/dogh'
Run Code Online (Sandbox Code Playgroud)

在Mac上(我猜Linux也是)os.name是posixpath的别名.所以查看posixpath.py模块,join()函数如下所示:

def join(a, *p):
"""Join two or more pathname components, inserting '/' as needed.
If any component is an absolute path, all previous path components
will be discarded.  An empty last part will result in a path that
ends with a separator."""
path = a
for b in p:
    if b.startswith('/'):
        path = b
    elif path == '' or path.endswith('/'):
        path +=  b
    else:
        path += …
Run Code Online (Sandbox Code Playgroud)

python macos path built-in

8
推荐指数
2
解决办法
1万
查看次数

为什么在切换到python3时从python builtins中重新加载了重新加载?

我最近从python 2切换到python 3. Python 3文档读取:" Removed reload().使用imp.reload() "它并没有真正说明为什么.

这个问题描述了它现在如何在python 3中完成.有没有人知道为什么它已从内置函数中删除,现在需要impimportlib重新加载?在使用交互式提示构建程序时测试程序时,默认情况下重新加载程序非常方便.显然,我可以通过做类似的事情来解决这个问题

from imp import reload
Run Code Online (Sandbox Code Playgroud)

每次打开交互式提示测试代码时,它只是另一行代码.这种变化背后的原因是什么?

python reload built-in python-2.7 python-3.x

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

覆盖__init__.py中的len - python

我想__init__.py通过以下方式为我的包的文件中的另一个函数分配另一个函数:

llen = len
len = lambda x: llen(x) - 1
Run Code Online (Sandbox Code Playgroud)

它工作正常,但只在__init__.py文件中.如何让它影响我的包中的其他模块?

python monkeypatching built-in shadowing

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

没有cd命令的手册页

Ubuntu Linux 15.10 - 我刚注意到没有手册页 cd

这看起来有点奇怪.

我试过了:

man cd
Run Code Online (Sandbox Code Playgroud)

在cmd线,我回来了

No manual entry for cd
Run Code Online (Sandbox Code Playgroud)

我试图找到文档

cd -
Run Code Online (Sandbox Code Playgroud)

这对于在最后一个目录和当前目录之间翻转非常方便

cd --

这似乎是别名

cd ~
Run Code Online (Sandbox Code Playgroud)

我在这里遗漏了一些非常明显的东西,或者手册页应该存在吗?

linux shell command built-in ubuntu-15.10

8
推荐指数
2
解决办法
6083
查看次数

如何使用 __builtin_ctz 加速二进制 GCD 算法?

clang 和 GCC 有一个int __builtin_ctz(unsigned)功能。这会计算整数中的尾随零。关于这一系列函数维基百科文章提到可以使用 加速二进制 GCD 算法__builtin_ctz,但我不明白如何。

二进制 GCD的示例实现如下所示:

unsigned int gcd(unsigned int u, unsigned int v)
{
    // simple cases (termination)
    if (u == v)
        return u;

    if (u == 0)
        return v;

    if (v == 0)
        return u;

    // look for factors of 2
    if (~u & 1) // u is even
        if (v & 1) // v is odd
            return gcd(u >> 1, v);
        else // …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm bit-manipulation built-in greatest-common-divisor

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

Python更改异常可打印输出,例如重载__builtins__

我正在寻找一种方法将异常的可打印输出更改为愚蠢的消息,以便了解有关 python 内部结构的更多信息(并与朋友搞混;),但到目前为止还没有成功。

考虑以下代码

try:
   x # is not defined
except NameError as exc:
   print(exc)
Run Code Online (Sandbox Code Playgroud)

代码应输出 name 'x' is not defined

我希望将输出更改为the name 'x' you suggested is not yet defined, my lord. Improve your coding skills.

到目前为止,我明白你不能改变,__builtins__因为它们被“烘焙”为 C 代码,除非:

  1. 您使用 forbiddenfruit.curse 方法添加/更改任何对象的属性
  2. 您手动覆盖对象的字典

我已经尝试了两种解决方案,但没有成功:

禁果解决方案:

from forbiddenfruit import curse

curse(BaseException, 'repr', lambda self: print("Test message for repr"))
curse(BaseException, 'str', lambda self: print("Test message for str"))

try:
    x
except NameError as exc:
    print(exc.str()) # Works, shows test …
Run Code Online (Sandbox Code Playgroud)

python built-in python-3.x

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