假设p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char)).
因此,我们有p.contents.value == "f".
如何直接访问和操作(例如递增)指针?比如(p + 1).contents.value == "o".
在使用Git的MacOSX上,文件名编码的不同UTF8表示存在问题.(SVN中也存在类似的问题.)
有这个补丁在这里.
我想知道是否有任何错误报告(在他们的bug追踪器中,我还没有找到)和任何关于为什么还没有被拉动或者是否有人正在研究它等的讨论.
我想迭代所有加载的共享库并获取它们的基地址以及文件名。这基本上是dl_iterate_phdr在Linux上。
但我想对 Mac 做同样的事情。
假设我有一个模块的字典(通过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,可以使方法,函数等腌制。其中一些引用了模块或模块字典。在腌制过程中,无论我有一个属于模块的字典,我都不想腌制该字典,而要引用该模块。
当存储一堆物品而我不需要随机访问容器时,我使用的std::list是一个很好的.但是,有时候(特别是当我只是将条目推回到后面并且从不删除中间的某个地方时),我希望我有一些具有更好性能的结构来添加条目.
std::vector 是坏事,因为:
std::list 是坏事,因为:
所以,介于两者之间的是我想要的东西.
基本上,我想要类似std::list< boost::array<T, 100> >左右的东西.或者也许代替100,让它成为4096/sizeof(T).也许std::list< std::vector<T> >并且第一个矢量可以很小,然后可以进一步增长.实际上我想隐藏在使用中,所以我可以做一个mycontainer.push_back(x).
std::rope 有点类似,但标准中没有.
在Boost中有这样的东西吗?
直接的答案是因为Comparator.compares接口被指定为不会抛出异常.但那是为什么呢?
或者说它不同:我Comparator必须依赖于可以抛出异常的函数.从理论上讲,这不应该发生.但如果它发生了,我希望它突破我使用它Comparator(in Collections.sort)的整个功能.即我希望它只是表现为发生了未处理的异常.
看起来这是不可能以一种明显的自然方式(因为如果接口说它不能抛出异常,它就不能).
我该如何解决这个问题?有一个丑陋的尝试/捕获并打印出异常并希望我认识到它?这似乎是一种非常丑陋的方式.
我已经实现了这个功能:
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)
我的代码中经常出现类似这样的情况.我认为这比其他任何东西都更具可读性和简单性.但是,如果你有任何关于如何使代码更简单的话,请给我一个更好的建议.
(请不要告诉我应该抽象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) 码:
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,我遇到了分段错误.为什么?
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文件?
java ×3
python ×3
casting ×2
instanceof ×2
macos ×2
arrays ×1
boost ×1
c ×1
c++ ×1
compilation ×1
cpython ×1
ctypes ×1
dynamic-cast ×1
exception ×1
git ×1
pointers ×1
pypy ×1
stl ×1
tensorboard ×1
tensorflow ×1
utf-8 ×1
vector ×1