考虑:
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可以移动任何不同的情况?
您正在用Java编写俄罗斯方块程序.您将如何根据以下方面设置课程设计?
Piece类,内部数组决定了作品的形状,而不是七个Piece类,每个作品一个.它们都是一个通用Piece类的子类.Block,代表一个方块的一个,每个Block包含它在Board上的位置(在图形坐标中)而不是具有4x4数组,这null意味着那里没有块,并且确定了位置通过阵列的形状.Block中的每个位置都存储其位置,并且知道构成它们的位置.PieceBoardPieceBoardBlocksgetRandomPiece,或者PieceFactory你在其中创建一个实例的genRandomPiece方法.Proxy模式,以便需要访问它的所有内容只使用代理,或者getCurrentPiece在Board类上有一个方法,并在您想要使用当前部分执行某些操作时调用它.这不是功课.我只是对我的大学里介绍CS课程的内容不和,我想看看人们普遍认为的是什么.什么被认为是"好"的OOP设计?忽略这是一个介绍课程的事实 - 你会怎么做?
我想在一组组合中为每个组合预先计算一些值.例如,当从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)点.
说我有这样的代码:
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
我有一个错误,我在使用时依赖于彼此相等的方法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) 我的输入包含一个嵌套列表列表,如下所示:
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方式?
如何判断计算机的整体内存使用情况来自于在Windows XP上运行的Python?
我经常有一个处理一个文件的命令,我想在目录中的每个文件上运行它.有没有内置的方法来做到这一点?
例如,假设我有一个程序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) 这是我运行服务器的代码:
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) 我试图让XQuartz在OSX上工作,所以我可以通过Docker进行X11转发.我按照这里的说明操作.我相信我的问题可以仅通过第一部分来回答,但为了以防万一(为了避免XY问题),我也提供了第二部分.
我已经通过自制软件安装了它brew cask install xquartz.然后我open -a XQuartz开始吧.
测试它,如果我尝试打开它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) python ×5
algorithm ×1
bash ×1
bind ×1
c++ ×1
c++11 ×1
combinations ×1
docker ×1
equality ×1
exception ×1
hash ×1
identity ×1
lambda ×1
list ×1
macos ×1
map ×1
memory ×1
methods ×1
nested-lists ×1
oop ×1
port ×1
pywin32 ×1
reference ×1
shell ×1
sorting ×1
tcp ×1
try-catch ×1
winapi ×1
x11 ×1
xquartz ×1