小编Alb*_*ert的帖子

Python:如何增加ctypes POINTER实例

假设p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char)).

因此,我们有p.contents.value == "f".

如何直接访问和操作(例如递增)指针?比如(p + 1).contents.value == "o".

python ctypes pointers

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

Git,Mac OS X和重音字符

在使用Git的MacOSX上,文件名编码的不同UTF8表示存在问题.(SVN中也存在类似的问题.)

有这个补丁在这里.

我想知道是否有任何错误报告(在他们的bug追踪器中,我还没有找到)和任何关于为什么还没有被拉动或者是否有人正在研究它等的讨论.

git macos utf-8

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

Mac 上的 dl_iterate_phdr 等效项

我想迭代所有加载的共享库并获取它们的基地址以及文件名。这基本上是dl_iterate_phdr在Linux上。

但我想对 Mac 做同样的事情。

c macos

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

给定其vars dict的模块实例

假设我有一个模块的字典(通过vars(mod),或mod.__dict__,或globals()),例如:

import mod

d = vars(mod)
Run Code Online (Sandbox Code Playgroud)

有了dict d,我该如何找回模块mod?即我想编写一个函数get_mod_from_dict(d),如果字典属于某个模块,则返回该模块,或者None

>>> get_mod_from_dict(d)
<module 'mod'>
Run Code Online (Sandbox Code Playgroud)

如果get_mod_from_dict返回模块,则必须具有:

mod = get_mod_from_dict(d)
assert mod is None or mod.__dict__ is d
Run Code Online (Sandbox Code Playgroud)

我实际上可以这样实现:

def get_mod_from_dict(d):
    mods = {id(mod.__dict__): mod for (modname, mod) in sys.modules.items()
                                  if mod and modname != "__main__"}
    return mods.get(id(d), None)
Run Code Online (Sandbox Code Playgroud)

但是,对我来说,遍历这似乎效率很低sys.modules

有没有更好的办法?


我为什么需要这个?

  • 在某些情况下,您只能访问字典。例如在堆栈框架中。然后,根据您想做什么,也许只是出于检查/调试的目的,找回模块很有帮助。

  • 我写了一些扩展程序Pickler,可以使方法,函数等腌制。其中一些引用了模块或模块字典。在腌制过程中,无论我有一个属于模块的字典,我都不想腌制该字典,而要引用该模块。

python

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

C++:vector和list之间的混合:类似于std :: rope?

当存储一堆物品而我不需要随机访问容器时,我使用的std::list是一个很好的.但是,有时候(特别是当我只是将条目推回到后面并且从不删除中间的某个地方时),我希望我有一些具有更好性能的结构来添加条目.

std::vector 是坏事,因为:

  • 如果它不再适合,它必须重新分配.
  • 它并不适用于大量数据(因为你不能总是获得非常大的连续空闲内存).

std::list 是坏事,因为:

  • 它在每个push_back上进行分配.这很慢并导致大量内存碎片.

所以,介于两者之间的是我想要的东西.

基本上,我想要类似std::list< boost::array<T, 100> >左右的东西.或者也许代替100,让它成为4096/sizeof(T).也许std::list< std::vector<T> >并且第一个矢量可以很小,然后可以进一步增长.实际上我想隐藏在使用中,所以我可以做一个mycontainer.push_back(x).

std::rope 有点类似,但标准中没有.

在Boost中有这样的东西吗?

c++ arrays boost stl vector

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

Java:为什么我不能在Comparator中抛出异常?

直接的答案是因为Comparator.compares接口被指定为不会抛出异常.但那是为什么呢?

或者说它不同:我Comparator必须依赖于可以抛出异常的函数.从理论上讲,这不应该发生.但如果它发生了,我希望它突破我使用它Comparator(in Collections.sort)的整个功能.即我希望它只是表现为发生了未处理的异常.

看起来这是不可能以一种明显的自然方式(因为如果接口说它不能抛出异常,它就不能).

我该如何解决这个问题?有一个丑陋的尝试/捕获并打印出异常并希望我认识到它?这似乎是一种非常丑陋的方式.

java exception-handling exception

6
推荐指数
2
解决办法
6391
查看次数

Java:未选中从X转换为Y /如何实现castOrNull

我已经实现了这个功能:

 static <X,Y> Y castOrNull(X obj) {
  try {
   return (Y)obj;
  }
  catch(ClassCastException e) {
   return null;
  }
 }
Run Code Online (Sandbox Code Playgroud)

这给了我编译器警告:

Type safety: Unchecked cast from X to Y
Run Code Online (Sandbox Code Playgroud)

我不太明白.这不是try/catch我在这里做的检查吗?我可以忽略这个警告吗?

我的功能是否会按预期工作?我该如何正确实现它?

我也试过obj instanceof Y检查,但由于Java处理泛型的方式,这不起作用.

顺便说一句,这个函数对我来说似乎非常有用(使其他代码更干净).我想知道Java中是否已存在这样的函数?


我想要使​​用它的一个例子:

    void removeEmptyRawStrings() {
        for(Iterator<Entity> e = entities.iterator(); e.hasNext();) {
            RawString s = castOrNull(e.next());
            if(s != null && s.content.isEmpty()) e.remove();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的代码中经常出现类似这样的情况.我认为这比其他任何东西都更具可读性和简单性.但是,如果你有任何关于如何使代码更简单的话,请给我一个更好的建议.

java casting instanceof classcastexception

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

java:组合instanceof和cast?

(请不要告诉我应该抽象X更多并添加另一种方法.)

在C++中,当我有一个x类型的变量,X*并且我想要做一些特定的事情,如果它也是类型Y*(Y作为其子类X),我写这个:

if(Y* y = dynamic_cast<Y*>(x)) {
    // now do sth with y
}
Run Code Online (Sandbox Code Playgroud)

在Java中似乎不可能做同样的事情(或者是吗?).

我已经阅读了这个Java代码:

if(x instanceof Y) {
    Y y = (Y) x;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

有时,当你没有变量x但是它是一个更复杂的表达式时,正是因为这个问题,你需要在Java中使用一个虚拟变量:

X x = something();
if(x instanceof Y) {
    Y y = (Y) x;
    // ...
}
// x not needed here anymore
Run Code Online (Sandbox Code Playgroud)

(常见的是,something()iterator.next().还有你看,你也不能真正称之为两次即可.你真的需要虚拟变量.)

x在这里你根本不需要- 你只是拥有它,因为你不能instanceof立即用演员表进行检查.再次将它与相当常见的C++代码进行比较:

if(Y* y = dynamic_cast<Y*>( something() …
Run Code Online (Sandbox Code Playgroud)

java dynamic-cast casting instanceof

6
推荐指数
3
解决办法
9737
查看次数

Python:使用编译/评估时出现分段错误

码:

import ast

globalsDict = {}

fAst = ast.FunctionDef(
    name="foo",
    args=ast.arguments(args=[], vararg=None, kwarg=None, defaults=[]),
    body=[], decorator_list=[])

exprAst = ast.Interactive(body=[fAst])
ast.fix_missing_locations(exprAst)
compiled = compile(exprAst, "<foo>", "single")
eval(compiled, globalsDict, globalsDict)

print globalsDict["foo"]
Run Code Online (Sandbox Code Playgroud)

使用CPython和PyPy,我遇到了分段错误.为什么?


python pypy cpython compilation segmentation-fault

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

Tensorboard,仅显示最新的tfevents

Tensboard显示了它在给定logdir中找到的所有事件。

如果我多次进行训练(或其他方式),则logdir中将有多个tfevents文件。Tensorboard将在一个看起来很奇怪的图中显示所有合并在一起的变量摘要。

图形

在stdout上,它写如下:

WARNING:tensorflow:Found more than one graph event per run. Overwriting the graph with the newest event.
WARNING:tensorflow:Found more than one "run metadata" event with tag step_0000. Overwriting it with the newest event.
Run Code Online (Sandbox Code Playgroud)

如何使它仅显示最新tfevents文件中的摘要/事件,以便它忽略所有较旧的tfevents文件?

tensorflow tensorboard

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