小编Alo*_*nbs的帖子

Python:使用PyCharm和IDLE/python时的结果不同

我刚刚读到了关于'运算符'的意外结果,因为Python缓存数介于-5到256之间.

这里讨论了这个问题: "是"运算符在整数上出乎意料地行为

这里: Python 3.5中的"是"和"id"

当我运行其中一个示例时,我在Python Idle和Python IDE之间得到了不同的结果(我正在使用Jetbrains Pycharm专业版 - 5.0.4).

使用Python IDLE时,结果如下:

a = 1000
b = 1000
print (a is b) # prints False
Run Code Online (Sandbox Code Playgroud)

当使用Pycharm 5.0.4时,这是结果:

a = 1000
b = 1000
print (a is b) # prints True
Run Code Online (Sandbox Code Playgroud)

怎么会这样?我已经重新检查了,我的项目的Python-Interpreter在两种情况下完全相同(都是Python 3.5.1).不确定这是否是我做错了,我希望有人能解释一下.

编辑:

我知道'a'是'b'== true if if id(a)== id(b),并且您可以像评论中提到的那样检查它.也许我应该更清楚,我不明白的是IDE怎么会有不同的行为?我想(并请,请纠正我,因为我似乎错了)IDE只是一个使用外部编译器/解释器的用户友好环境,这就是为什么这些独立于那些IDE(例如,pycharm支持)不仅是Python,而且我可以使用C编译器或Java等运行Eclipse(所有这些都不是IDE的一部分).

谢谢,Alon.

python integer pycharm python-idle python-3.x

9
推荐指数
1
解决办法
1068
查看次数

使用setjmp和longjmp时Valgrind失败了

我已经获得了一个赋值,因此使用signal,setjmp和longjmp c函数模拟用户级线程库.基本上,程序包括每个"线程"的内存分配,并使用长跳转和信号来模拟非直接代码流和抢占.

当我运行valgrind工具时,我收到以下形式的消息:"""

Invalid write of size 8
==19100== at 0x560020F: __sigsetjmp (setjmp.S:36)
==19100== by 0x403EC3: switchThreads(bool, bool, bool) (uthreads.cpp:673)
==19100== by 0x403DE6: signalHandler(int) (uthreads.cpp:652)
==19100== by 0x56004EF: ??? (in /lib/x86_64-linux-gnu/libc-2.13.so)
==19100== by 0x404D93: t1() (tal3.cpp:23)
==19100== Address 0x5959c90 is 48 bytes inside a block of size 4,312 alloc'd

==19100== at 0x4C2851B: operator new(unsigned long, std::nothrow_t const&) (vg_replace_malloc.c:316)

==19100== by 0x402E67: uthread_spawn(void (*)()) (uthreads.cpp:358)
==19100== by 0x404DD6: main (a3.cpp:41)
Run Code Online (Sandbox Code Playgroud)

"""

我已经阅读了这个工具的一些论坛和文档,根据我的理解,似乎在valgrind中不支持跳远和'setjmp'(只要信号处理跳转),从而导致看起来像内存问题 - 但我无法得出明确的答案.

非常感谢你的帮助.谢谢.

c c++ valgrind memory-leaks memory-management

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

Android:使用Parse时使用服务器端

我和我的朋友正在开发一个应用程序,我们希望使用Parse.com作为我们的数据库,我们可以从中检索信息.我们无法确定在Parse上访问数据的最佳方法是什么.为了这个例子,我们的应用程序.(即客户端)需要存储在Parse数据库中的东西(比如一些数字) - 如果它使用Parse API直接运行查询,或者它应该向服务器端发出请求,让它从Parse中检索该数字,并且把它发回给客户?

我们知道没有确切的答案,但我们无法找到有关这一具体情况的答案.我们读了这篇文章:何时使用客户端或服务器端?,但这不完全相同的情况.

我声称我们应该尝试尽可能地从客户端和数据库中分离,并让这些查询由负责人(服务器)运行,我的朋友声称这会增加不必要的复杂性,因为使用这些工具非常自然由Parse提供,从客户端访问数据库,无需协议等.

我们会批评任何建议,

谢谢.

database android server-side client-side parse-platform

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

c++ static_assert 在“if constexpr 语句”的两个分支上都失败

我试图在编译时确定特定类型是否为std::pair类型。当我编译下面的代码时,我在两个分支(即“HERE1”和“HERE2”)上的断言都失败了。如果我删除static_asserts并取消打印,我得到了我期待:那就是“HERE1”为is_pair_type <T :: VALUE_TYPE>和“HERE2”为is_pair_type <T>

我想这意味着编译器无法在编译时评估表达式,但我不明白为什么。

使用:MS VS2019,MSVC 版本 14.29.30037

谢谢。


template< class T >             struct is_pair : std::false_type {};
template< class T1, class T2 >  struct is_pair< std::pair< T1, T2 > > : std::true_type {};
template< class T >             struct is_pair_d : is_pair<typename std::decay<T>::type> {};
// a helper function for value
template<class T> struct is_pair_type {
    static constexpr bool const value = is_pair_d<T>::value;
};

int main()
{
    using T = std::map<int, float>;
    T …
Run Code Online (Sandbox Code Playgroud)

c++ static-assert type-traits c++17 compile-time-type-checking

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