小编Cla*_*diu的帖子

如果lambda在运行时被移动/破坏会发生什么?

考虑:

std::vector<std::function<void()>> vec;
something_unmovable m;
vec.push_back([&vec, m]() {
    vec.resize(100);
    // things with 'm'
});
vec[0]();
Run Code Online (Sandbox Code Playgroud)

vec.resize(100)可能会导致向量的重新分配,这意味着std::functions将被复制到一个新位置,而旧的位置将被销毁.然而,当旧的仍在运行时,就会发生这种情况.这个特定的代码运行是因为lambda没有做任何事情,但我想这很容易导致未定义的行为.

那么,究竟发生了什么?是m仍然向量访问?或者是thislambda 的指针现在是无效的(指向释放的内存),因此lambda捕获的任何内容都无法访问,但如果它运行的代码不使用它捕获的任何内容,那么它是不是未定义的行为?

此外,lambda可以移动任何不同的情况?

c++ lambda undefined-behavior c++11

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

OOP-Tetris的哲学设计问题

您正在用Java编写俄罗斯方块程序.您将如何根据以下方面设置课程设计?

  • Piece class:有一个Piece类,内部数组决定了作品的形状,而不是七个Piece类,每个作品一个.它们都是一个通用Piece类的子类.
  • Piece类表示:有一个4个实例的数组Block,代表一个方块的一个,每个Block包含它在Board上的位置(在图形坐标中)而不是具有4x4数组,这null意味着那里没有块,并且确定了位置通过阵列的形状.
  • 位置:阵列中或阵列Block中的每个位置都存储其位置,并且知道构成它们的位置.PieceBoardPieceBoardBlocks
  • 生成一块:有一个Piece类的静态方法getRandomPiece,或者PieceFactory你在其中创建一个实例的genRandomPiece方法.
  • 操作当前部分:使用Proxy模式,以便需要访问它的所有内容只使用代理,或者getCurrentPieceBoard类上有一个方法,并在您想要使用当前部分执行某些操作时调用它.

这不是功课.我只是对我的大学里介绍CS课程的内容不和,我想看看人们普遍认为的是什么.什么被认为是"好"的OOP设计?忽略这是一个介绍课程的事实 - 你会怎么做?

oop

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

计算组合的等级?

我想在一组组合中为每个组合预先计算一些值.例如,当从0到12中选择3个数字时,我将为每个数字计算一些值:

>>> for n in choose(range(13), 3):
    print n, foo(n)

(0, 1, 2) 78
(0, 1, 3) 4
(0, 1, 4) 64
(0, 1, 5) 33
(0, 1, 6) 20
(0, 1, 7) 64
(0, 1, 8) 13
(0, 1, 9) 24
(0, 1, 10) 85
(0, 1, 11) 13
etc...
Run Code Online (Sandbox Code Playgroud)

我想将这些值存储在一个数组中,以便给定组合,我可以计算它并获取值.例如:

>>> a = [78, 4, 64, 33]
>>> a[magic((0,1,2))]
78
Run Code Online (Sandbox Code Playgroud)

magic是什么?

最初我想将它存储为尺寸为13 x 13 x 13的3维矩阵,因此我可以轻松地将其编入索引.虽然这对于13选择3来说是好的,但对于像13选择7这样的东西来说这会有太多的开销.

我不想使用dict,因为最终这个代码将在C中,无论如何数组都会更高效.

更新:我也有类似的问题,但使用重复的组合,所以任何关于如何获得这些的排名的答案将非常感激=).

更新:为了说清楚,我正在努力节省空间.这些组合中的每一个实际上都指向占用大量空间的东西,比方说2千字节.如果我使用13x13x13阵列,那将是4兆字节,其中我只需要572千字节使用(13选3)点.

language-agnostic algorithm hash combinations combinatorics

14
推荐指数
2
解决办法
2834
查看次数

python:如果finally块引发异常,则从try块恢复异常

说我有这样的代码:

try:
    try:
        raise Exception("in the try")
    finally:
        raise Exception("in the finally")
except Exception, e:
    print "try block failed: %s" % (e,)
Run Code Online (Sandbox Code Playgroud)

输出是:

try block failed: in the finally
Run Code Online (Sandbox Code Playgroud)

从print语句的角度来看,有没有办法访问try中引发的异常,还是它永远消失了?

注意:我没有考虑用例; 这只是好奇心.

python exception-handling exception try-catch try-catch-finally

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

为什么方法没有引用相等?

我有一个错误,我在使用时依赖于彼此相等的方法is.事实证明并非如此:

>>> class What(object):
    def meth(self):
        pass

>>> What.meth is What.meth
False
>>> inst = What()
>>> inst.meth is inst.meth
False
Run Code Online (Sandbox Code Playgroud)

为什么会这样?它适用于常规功能:

>>> def func():
    pass

>>> func is func
True
Run Code Online (Sandbox Code Playgroud)

python methods identity equality reference

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

Python - 对嵌套列表进行排序

我的输入包含一个嵌套列表列表,如下所示:

l = [[[[[39]]]], [1, 2, 3], [4, [5, 3], 1], [[[[8, 9], 10], 11], 12]]
Run Code Online (Sandbox Code Playgroud)

我想根据嵌套列表中所有数字的总和对此列表进行排序...因此,我想要按l排序的值将如下所示:

[39, 6, 13, 50]
Run Code Online (Sandbox Code Playgroud)

然后我想根据这些进行排序.所以输出应该是:

[[1, 2, 3], [4, [5, 3], 1], [[[[39]]]], [[[[8, 9], 10], 11], 12]]
Run Code Online (Sandbox Code Playgroud)

这样做有什么好的pythonic方式?

python sorting list nested-lists

13
推荐指数
3
解决办法
7944
查看次数

使用Python在Windows中获取计算机的内存使用情况

如何判断计算机的整体内存使用情况来自于在Windows XP上运行的Python?

python memory winapi memory-management pywin32

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

bash"map"等效:对每个文件运行命令

我经常有一个处理一个文件的命令,我想在目录中的每个文件上运行它.有没有内置的方法来做到这一点?

例如,假设我有一个程序data输出关于文件的重要数字:

./data foo
137
./data bar
42
Run Code Online (Sandbox Code Playgroud)

我想以某种方式在目录中的每个文件上运行它,如下所示:

map data `ls *`
ls * | map data
Run Code Online (Sandbox Code Playgroud)

产生这样的输出:

foo: 137
bar: 42
Run Code Online (Sandbox Code Playgroud)

bash shell map

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

python TCPServer地址已经在使用但我关闭了服务器,我使用`allow_reuse_address`

这是我运行服务器的代码:

class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    #....

PORT = 8089

httpd = SocketServer.TCPServer(("", PORT), MyRequestHandler)
httpd.allow_reuse_address = True

print "Serving forever at port", PORT
try:
    httpd.serve_forever()
except:
    print "Closing the server."
    httpd.server_close()
    raise
Run Code Online (Sandbox Code Playgroud)

然而这就是:

^CClosing the server.
Traceback (most recent call last):
  File "server.py", line 118, in <module>
    self.send_error(400, "Unimplemented GET command: %s" % (self.path,))
  File "/home/claudiu/local/lib/python2.6/SocketServer.py", line 224, in serve_forever
    r, w, e = select.select([self], [], [], poll_interval)
KeyboardInterrupt
(.virtualenv)claudiu@xxx:~/xxx$ python server.py
Traceback (most recent call last):
  File "server.py", line 122, in …
Run Code Online (Sandbox Code Playgroud)

python port tcp bind

13
推荐指数
2
解决办法
9660
查看次数

Xt错误:如果使用默认的DISPLAY,则无法打开显示

概观

我试图让XQuartz在OSX上工作,所以我可以通过Docker进行X11转发.我按照这里的说明操作.我相信我的问题可以仅通过第一部分来回答,但为了以防万一(为了避免XY问题),我也提供了第二部分.

安装

我已经通过自制软件安装了它brew cask install xquartz.然后我open -a XQuartz开始吧.

本地xterms

测试它,如果我尝试打开它xterm,它不起作用:

MacBook-Pro:opencv-gui csaftoiu$ xterm
xterm: Xt error: Can't open display: /private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
Run Code Online (Sandbox Code Playgroud)

但是,伪文件存在:

MacBook-Pro:opencv-gui csaftoiu$ echo $DISPLAY
/private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
MacBook-Pro:opencv-gui csaftoiu$ ls -alh $DISPLAY
srw-rw-rw-  1 csaftoiu  wheel     0B May  6 21:12 /private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
Run Code Online (Sandbox Code Playgroud)

可以通过XQuartz打开一个xterm.然后:

bash-3.2$ echo $DISPLAY
:0
Run Code Online (Sandbox Code Playgroud)

此值也适用于常规OSX:

$ DISPLAY=:0 xterm
# opens xterm, waits for it to finish
$
Run Code Online (Sandbox Code Playgroud)

以下不起作用,不知道为什么基于这里的答案:

xterm: Xt error: Can't open display: localhost:0
MacBook-Pro:opencv-gui …
Run Code Online (Sandbox Code Playgroud)

x11 macos x11-forwarding docker xquartz

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