小编Woj*_*ilo的帖子

快速python前端列表扩展

在python中扩展数组前端的最快方法是什么?假设我有2个数组:a和b.我想以a = b + a(b不应该改变)的最快方式.

我的小标记:

测试1:

a,b = [],[]
for i in range(0,100000):
    a.append(i)
    b.append(i)

def f(a,b):
    for i in range(0,100):
        a=a+b

import cProfile
cProfile.run('f(a,b)')
Run Code Online (Sandbox Code Playgroud)

时间:~12秒

测试2:

a,b = [],[]
for i in range(0,100000):
    a.append(i)
    b.append(i)

def f(a,b):
    for i in range(0,100):
        a[0:0] = b

import cProfile
cProfile.run('f(a,b)')
Run Code Online (Sandbox Code Playgroud)

时间:~1.5秒

TEST3:

a,b = [],[]
for i in range(0,100000):
    a.append(i)
    b.append(i)

lenb = len(b)
def f(a,b):
    for i in range(0,100):
        b.extend(a)
        # do something with b
        b = b[:lenb]

import cProfile …
Run Code Online (Sandbox Code Playgroud)

python performance profiling list concatenation

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

使用Makefile在Eclipse CDT中进行错误检查

我正在使用eclipse开发我的项目,它基于我的自定义makefile系统.我必须使用自定义Makefile项目,因为我想在LLVM makefile系统上开发LLVM项目,请参阅:http://llvm.org/docs/Projects.html .

我在eclipse中创建了一个"空makefile"项目,我选择了构建位置(Project-> Properties-> C/C++ Build-> Build Location)并添加了所有需要的库源(Project-> Properties-> C/C++)一般 - >路径和来源).

项目的构建和执行就像它应该的那样.问题是很多行都用红色作为错误加以强调.这是显而易见的,因为eclipse会让错误执行gcc并且它不会执行它,除非我使用Makefile(或者我错了......).

无论如何 - 有没有办法在使用eclipse和makefile时检查语法(和其他类型的)错误?

c++ eclipse makefile eclipse-cdt llvm

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

基于用户定义的类创建动态 ABC 类

我正在编写一个插件框架,我希望能够编写一个装饰器interface,它将用户类转换为 ABC 类并用抽象方法替换所有方法。我无法让它工作,我想问题与错误的 mro 有关,但我可能是错的。

我基本上需要写:

@interface
class X:
    def test(self):
        pass

x = X() # should fail, because test will be abstract method.
Run Code Online (Sandbox Code Playgroud)

用它们的抽象版本替换方法很简单(你必须迭代 func 并将它们替换为abc.abstractmethod(func)),但是我在创建动态类型时遇到了问题,这将是一个ABCmeta元类。

现在我有类似的东西:

from abc import ABCMeta

class Interface(metaclass=ABCMeta):
    pass

def interface(cls):
    newcls = type(cls.__name__, (Interface, cls), {})
    # substitute all methods with abstract ones
    for name, func in inspect.getmembers(newcls, predicate=inspect.isfunction):
        setattr(newcls, name, abstractmethod(func))
    return newcls
Run Code Online (Sandbox Code Playgroud)

但它不起作用 - 我可以毫无错误地初始化类 X。

使用 Python 中 ABC 的标准用法,我们可以这样写:

class X(metaclass=ABCMeta):
    @abstractmethod
    def …
Run Code Online (Sandbox Code Playgroud)

python abstract-class introspection python-3.x

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

QtQuick 2.0 与 QGraphicsView (QPainter)

我现在正在用 Python (PyQt / PySide) 编写一个应用程序,它应该可视化并且应该可以编辑复杂的数据流图(如搅拌机中的节点)。另外,我希望这些节点显示 opengl 3D 对象(小型 opengl 场景,如节点上的按钮)、图像、控件等。 GUI 也会很复杂 - 它允许细分面板并允许在每个面板中打开一个上下文(就像在 Eclipse 或 Visual Studio 中一样)。

我现在正在学习QtQuick 2.0,我已经阅读了 Qt 5 中的绘画概述。我想知道使用QtQuickover的真正好处是什么QPainterQtQucik 2.0不再QGraphicsView用作其后端(它直接使用OpenGL上下文)

在您可以使用的每项技术中OpenGL。在每个中,您都可以绘制自定义外观的按钮和小部件(如节点、它们的连接等)(您甚至可以QPainter使用鼠标绘制它们并自己处理鼠标)。

当然qml是声明性的并且可以优化OpenGL调用,但这真的很重要吗?我一直在寻找QPainter( QGraphicsView)之间的任何基准点,QtQuick 2.0但没有发现任何有趣的东西。

所以问题是:

  1. 真的QtQuick是“未来”技术吗?如果可能,我应该使用它吗?我将来会从中受益吗?或者是简单的做同样的事情像的“其他”的方式QPainterQGraphicsViewQWidgets
  2. 的可能性QtQuick 2.0真的高于PySide/PyQt吗?
  3. QtQuick更适合开发这种应用程序还是我应该坚持PySide/ …

qt pyqt qpainter pyside qt-quick

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

Python3 自定义视图对象

是否可以在 Python 3 中实现自定义视图对象?

根据文档:

dict.keys()、dict.values() 和 dict.items() 返回的对象是视图对象。它们提供了字典条目的动态视图,这意味着当字典发生变化时,视图会反映这些变化。

那么是否有可能以某种方式创建自定义视图对象?

我搜索了很长时间关于它的任何信息,但我发现的唯一解释是视图是什么,而不是如何创建自定义如何实现它们(它们的内部机制)。

python python-3.x

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

Haskell懒惰打开和关闭文件

我想在Haskell中从硬盘中读取一个大的图形结构.图结构如下所示:

每个节点都有一个定义 - 一个描述子节点以及它们如何连接的文件(这些图是使用序列化的Data.Serialize.

每个节点都可以有孩子.因此,如果我有文件,A.node我可以拥有A包含A节点子节点的目录(以<X>.node文件和目录的形式).

我希望能够使用Haskell遍历此图并加载到内存并仅反序列化所需的文件.因此,如果我以例如A->B->C(其中B是子A等)的方式遍历图形,那么Haskell应该读取文件A.node,A/B.node并且A/B/C.node.下次我遍历图表时,应该再次读取文件,因为我们已经完成了.

我怎么能以最好的方式做到这一点?

io haskell file lazy-evaluation

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

从Template Haskell代码生成最终代码

问题

是否有可能从包含Template Haskell函数的代码生成"纯"Haskell代码?

我想得到所有Haskell模板的qutations和拼接扩展的代码?(将其提供给另一个Haskell编译器(Haste),它还不支持Template Haskell.)

module TupleReplicate:

tupleReplicate n = do 
    id <- newName "x"
    return $ LamE ([VarP id]) (TupE $ replicate n $ VarE id)
Run Code Online (Sandbox Code Playgroud)

主要:

main :: IO ()
main = do
    print $(tupleReplicate 3) "x"
    return ()
Run Code Online (Sandbox Code Playgroud)

可以扩展到:

main :: IO ()
main = do
    print (\x->(x,x,x)) "x"
    return ()
Run Code Online (Sandbox Code Playgroud)

templates haskell compilation compile-time template-haskell

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

在Haskell的Type Classes中记录选择器

我想Type Class用几个默认方法实现一个,但我收到一个错误,我不能使用record selectors内部type classes定义.

下面的代码基本上创建type class了定义add函数的函数,它应该将元素添加到repr某些函数的记录中data type.这是代码:

import qualified Data.Graph.Inductive     as DG

class Graph gr a b where
    empty :: DG.Gr a b
    empty = DG.empty

    repr :: gr -> DG.Gr a b

    -- following function declaration does NOT work:
    add :: a -> gr -> gr
    add el g = g{repr = DG.insNode el $ repr g}
Run Code Online (Sandbox Code Playgroud)

编译器抛出错误:

repr is not a record selector
In …
Run Code Online (Sandbox Code Playgroud)

haskell types record typeclass

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

无法计算解析器的最小长度 - 在Haskell中使用uu-parsinglib

让我们看看代码片段:

pSegmentBegin p i   = pIndentExact i *> ((:) <$> p i <*> ((pEOL *> pSegment p i) <|> pure []))
Run Code Online (Sandbox Code Playgroud)

如果我在我的解析器中将此代码更改为:

pSegmentBegin p i   = do
    pIndentExact i
    ((:) <$> p i <*> ((pEOL *> pSegment p i) <|> pure []))
Run Code Online (Sandbox Code Playgroud)

我有一个错误:

canot compute minmal length of a parser due to occurrence of a moadic bind, use addLength to override
Run Code Online (Sandbox Code Playgroud)

我认为上面的解析器应该以相同的方式运行.为什么会出现此错误?

编辑

上面的例子很简单(为了简化问题),如下所述,这里没有必要使用do notation,但我希望它使用的实际情况如下:

pSegmentBegin p i   = do
    j <- pIndentAtLast i
    (:) <$> p j <*> ((pEOL …
Run Code Online (Sandbox Code Playgroud)

parsing haskell parsec parser-combinators uu-parsinglib

5
推荐指数
2
解决办法
344
查看次数

使用 O(1) 元素访问在 Haskell 中实现高效的类似拉链的数据结构

问题

我想创建一个数据类型,它允许快速访问和修改其元素。是否可以在 Haskell 中创建一个结构和函数,其执行速度与简单的 C++ 实现一样快?

问题详情

我正在用 Haskell 编写一个编译器。我有一个由数据类型表示的AST,让我们考虑以下一个:

import Prelude hiding (id)

-- this is a sample data type, the real one has got a lot of constructors
data AST = A { id :: Int, x :: AST, y :: AST, z :: AST }
         | B { id :: Int }
         | C { id :: Int, x :: AST, y :: AST }
         | D { id :: Int, u :: AST, v …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm performance haskell zipper

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