小编use*_*473的帖子

python中一个合适的'do nothing'lambda表达式?

我有时会发现自己想要占位符'什么也不做'lambda表达式,类似于说:

def do_nothing(*args):
    pass
Run Code Online (Sandbox Code Playgroud)

但是以下语法是非法的,因为lambda表达式尝试返回冒号后面的内容,并且您无法返回pass.

do_nothing = lambda *args: pass
Run Code Online (Sandbox Code Playgroud)

所以我想知道,以下表达式是否适合替代上述?

do_nothing = lambda *args: None
Run Code Online (Sandbox Code Playgroud)

由于do_nothing上面的函数在技术上返回None,是否可以创建一个返回None用作占位符lambda表达式的lambda表达式?还是不好的做法?

python lambda

57
推荐指数
5
解决办法
3万
查看次数

使用Sublime Text 3设置Python 3构建系统

我想配置Sublime Text 3来构建Python 3,但我似乎不明白构建是如何工作的.许多教程告诉我制作一个包含以下代码的构建文件:

{
    'cmd': ['/usr/bin/python3', '-u', '$file'],
    'file_regex': '^[ ]*File "(…*?)", line ([0-9]*)',
    'selector': 'source.python'
}
Run Code Online (Sandbox Code Playgroud)

并将其保存为一个名为Python.sublime-build或的文件python3.sublime-build(我发现的大部分信息都是冲突的).一个教程建议在ST3 Packages文件夹中创建一个新文件夹,Python并在其中添加构建文件,而其他教程建议将其保留在名为的文件夹中User.

一个教程解释了我如何path在操作系统上更改环境变量以使其工作.这似乎也没有帮助.


我添加了一个文件夹PythonPackages(因为它是不存在的话),并在名为构建文件添加Python.sublime_build该功能只在我上面贴的代码.现在当我尝试运行Sublime Text时,它给了我这个错误:

Error trying to parse build system:
Expected value in Packages\Python\Python.sublime-build:2:5
Run Code Online (Sandbox Code Playgroud)

python python-3.x sublimetext3

51
推荐指数
4
解决办法
11万
查看次数

在没有numpy的情况下计算python中一组坐标元组的质心的最快方法

我一直在研究一个非常时间敏感的项目(不幸的是必须在python中),其中一个广泛使用的函数是一个计算(x,y)元组列表的质心的函数.为了显示:

def centroid(*points):
    x_coords = [p[0] for p in points]
    y_coords = [p[1] for p in points]
    _len = len(points)
    centroid_x = sum(x_coords)/_len
    centroid_y = sum(y_coords)/_len
    return [centroid_x, centroid_y]
Run Code Online (Sandbox Code Playgroud)

哪里

>>> centroid((0, 0), (10, 0), (10, 10), (0, 10))
[5, 5]
Run Code Online (Sandbox Code Playgroud)

这个函数运行得相当快,上面的例子在我的系统上平均完成了1.49e-05秒,但我正在寻找计算质心的最快方法.你有什么想法?

我遇到的其他解决方案之一是执行以下操作(l元组列表在哪里):

map(len(l).__rtruediv__, map(sum, zip(*l)))
Run Code Online (Sandbox Code Playgroud)

它运行在1.01e-05和9.6e-06秒之间,但不幸的是转换为列表(通过包围整个语句list( ... ))几乎使计算时间加倍.

编辑:建议在纯python中欢迎但不是numpy.

EDIT2:刚刚发现,如果为元组列表的长度保留一个单独的变量,那么我的上述实现map在9.2e-06秒内可靠地运行,但仍然存在转换回列表的问题.

EDIT3:

现在我只接受纯蟒蛇的答案,而不是numpy(对那些已经在numpy中回答的人抱歉!)

python performance

25
推荐指数
3
解决办法
3万
查看次数

为什么python的for循环对于大输入如此非线性?

我正在对一些python代码进行基准测试,我注意到了一些奇怪 我使用以下函数来测量迭代空for循环所需的速度:

def f(n):
    t1 = time.time()
    for i in range(n):
        pass
    print(time.time() - t1)
Run Code Online (Sandbox Code Playgroud)

f(10**6)打印about 0.035,f(10**7)about 0.35,f(10**8)about 3.5f(10**9)about 35.但是f(10**10)?好吧2000.这当然是意料之外的.为什么迭代10倍的元素需要花费60倍的时间?什么是python的for循环导致这个?这是特定于python的,还是会出现在很多语言中?

benchmarking for-loop python-3.x

16
推荐指数
2
解决办法
675
查看次数

Python的__loader__,它是什么?

我已经看到这个术语__loader__浮动在一些Python文件中,除了一些关于它的目的的简短描述之外我找不到任何文档,但它们仍然没有为我提供足够的信息以便对它有一个很好的理解.我所知道的是它与导入模块有关,除此之外我完全不知所措.它有什么作用?什么时候使用?如果有的话我怎么用呢?

python loader python-import

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

Python无法在函数中定义元组

出于某种原因,我每次尝试在函数中定义元组时都会遇到语法错误.例如,我有一个向程序添加向量的函数,它看起来像这样:

def add_vectors((angle_1, l_1),(angle_2, l_2)):
    x=math.sin(angle1)*l_1+math.sin(angle2)*l_2
    y=math.cos(angle1)*l_1+math.cos(angle2)*l_2

    angle=0.5*math.pi-math.atan2(y, x)
    length=math.hypot(x, y)
    return (angle, length)
Run Code Online (Sandbox Code Playgroud)

这似乎没问题,但解释者说有一个语法错误并突出显示第一个元组的第一个括号.我使用的是Python 3.2.3.我究竟做错了什么?

python tuples function python-3.x

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

python函数字节码中的零是什么意思?

我正在尝试自学python字节码是如何工作的,所以我可以通过操作函数的代码来做一些事情(只是为了好玩,而不是用于实际用途)所以我从一些简单的例子开始,例如:

def f(x):
    return x + 3/x
Run Code Online (Sandbox Code Playgroud)

字节码是*:

(124, 0, 0, 100, 1, 0, 124, 0, 0, 20, 23, 83)
Run Code Online (Sandbox Code Playgroud)

因此,它是有道理的,我认为124LOAD_FAST字节码,并且正在加载的对象的名称是f.__code__.co_varnames[0]这里0后是多少124.并100表示LOAD_CONST加载f.__code__.co_consts[1]在那里1是在数字后100.但是有一堆辅助零,比如第二个,第三个和第五个零,似乎没有任何意义,至少对我而言.他们表示什么?

文本字节码:

>>> dis.dis(f)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (3)
              6 LOAD_FAST                0 (x)
              9 BINARY_DIVIDE       
             10 BINARY_ADD          
             11 RETURN_VALUE   
Run Code Online (Sandbox Code Playgroud)

*注意:在Python 3中(字节码可能与上面不同),可以通过以下方式找到字节码:

>>> list(f.__code__.co_code)
[124, 0, 100, 1, 124, 0, 27, 0, 23, 0, 83, 0]
Run Code Online (Sandbox Code Playgroud)

python bytecode

9
推荐指数
2
解决办法
550
查看次数

多行的 Clang-Tidy `NOLINT`?

我正在处理一个 C++ 项目,该项目有一些自动生成的大段代码,我不想被 linted。是否有类似于//NOLINT注释的东西可以应用于多行?像下面这样:

// BEGINNOLINT
bad-code;
// ENDNOLINT
Run Code Online (Sandbox Code Playgroud)

我在网上能找到的只是一个应该实施建议。有没有办法避免// NOLINT在每一行的末尾写?

clang clang-tidy

7
推荐指数
2
解决办法
5041
查看次数

如何在回调中获得批次中使用的确切训练示例?

我在 Keras 中训练神经网络时遇到问题。每个 epoch,损失都会稳步下降,达到大约 1e-9,然后在 epoch 中间的某个地方(可能是任何地方),损失上升到 5e-5,并最终稳定在每个 epoch 相同的最终损失上。我相信这是由于我的数据集中的一些脏数据导致模型无法训练超过某个点,尽管我真的不确定。

为了测试我的假设,我想创建一个自定义的 Keras 回调对象,该对象将确定批次后的损失是否有足够大的跳跃,并指出哪个批次导致了跳跃。问题是batch提供给的参数keras.callbacks.Callback.on_batch_end只是批次编号,而不是该批次中使用的实际训练示例。此外,logs传入的dict 也仅包含lossacc

这意味着我实际上无法确定哪些数据导致了损失的增加。有没有办法可以确定导致每个时期跳跃的确切训练示例?有什么方法可以在回调中访问它吗?

python neural-network keras tensorflow tensorflow2.0

6
推荐指数
0
解决办法
469
查看次数

如何在python中使用Essentia?

我正在尝试在Python中使用Essentia,我不能在我的生活中弄清楚如何安装它,我不知道安装页面中发生了什么.有人可以告诉我如何做到这一点?

python install

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