小编msk*_*kel的帖子

取决于cabal中的本地包装

我写了一些包含一些额外函数的包,用于处理反映我喜欢使用它们的方式的常见类型(例如,我更喜欢将Bson文档视为地图而不是字段列表).我将这些包保存在本地源目录中,而不是Hackage上.

我想.cabal使用cabal的build-depends系统在它们的文件中引入这些包之间的依赖关系.但这会导致以下错误(bson-docmap作为本地模块):

cabal: At least the following dependencies are missing:
bson-docmap >=0.0
Run Code Online (Sandbox Code Playgroud)

是否可以将cabal指向本地目录作为备用存储库?

我目前的解决方法是将所有模块保存在一个本地包中,但如果可能的话,我宁愿将它们分开.

haskell cabal

21
推荐指数
2
解决办法
3129
查看次数

Python 2:集合和列表的'in'关键字的不同含义

请考虑以下代码段:

class SomeClass(object):

    def __init__(self, someattribute="somevalue"):
        self.someattribute = someattribute

    def __eq__(self, other):
        return self.someattribute == other.someattribute

    def __ne__(self, other):
        return not self.__eq__(other)

list_of_objects = [SomeClass()]
print(SomeClass() in list_of_objects)

set_of_objects = set([SomeClass()])
print(SomeClass() in set_of_objects)
Run Code Online (Sandbox Code Playgroud)

其评估结果为:

True
False
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么'in'关键字对集合和列表有不同的含义?我本来希望两者都返回True,特别是当被测试的类型定义了相等的方法时.

python equality list set

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

仅在monad变换器中更新外部monad

我有一个可能失败的计算monad并进行一些日志记录:

f1 :: WriterT [String] (Either String) a
Run Code Online (Sandbox Code Playgroud)

我有一个功能,不会失败,但做一些日志记录:

f2 :: Writer [String] b
Run Code Online (Sandbox Code Playgroud)

使用f2中的日志更新f1中的writer monad的最佳方法是什么,并捕获f2计算的输出?目前我正在这样做:

f2result <- (\(r,l) -> do {tell l; return r}) (runWriter f2)
Run Code Online (Sandbox Code Playgroud)

我使用lift来更新内部monad的计算方法不同,因此切换Writer和Either monad都无法解决问题.

monads haskell monad-transformers

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

使用lxml xpath获取正好一个元素或引发异常

lxml中的xpath()函数通常返回元素列表.

如果我有一个XPath,我希望它只返回一个元素,那么最好的方法是:

  • 检查是否返回了一个元素,否则引发异常,并且:
  • 获取该元素(而不是单元素列表)?

我真的在寻找SQLAlchemy的one()函数的模拟.

python xpath lxml

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

通过conda安装仅pip包的依赖项

有时我需要在conda环境中安装纯pip软件包。如果我使用安装软件包pip install,那么即使panda可以使用它们,该软件包的所有依赖项也会使用pip安装。

我想通过conda安装尽可能多的软件包,所以目前我使用黑客工具通过pip获取软件包依赖项列表,在conda上搜索所有conda install已找到的依赖项,然后通过找到pip install

我更喜欢通过conda而不是pip安装依赖项吗?如果是这样,谁能想到一种更优雅的方式来解决此问题?

pip conda

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

自定义元类以在SQLAlchemy中创建混合属性

我想在SQLAlchemy之上创建一个自定义接口,以便透明地支持一些预定义的混合属性.

具体来说,我想创建一个类SpecialColumn和一个元类,以便当用户添加SpecialColumn为类的属性时,我的自定义元类用两个SQLAlchemy替换该属性,Column并添加一个混合属性,获取并将这两列设置为元组.到目前为止,这是我的方法:

首先,我定义了我的特殊列类型:

class SpecialColumn(object):
     pass
Run Code Online (Sandbox Code Playgroud)

然后,我定义了一个继承自DeclarativeMeta的元类,它会扫描类的实例,SpecialColumn并用两个Columns和一个混合属性(定义为闭包)替换它们:

class MyDeclarativeMeta(DeclarativeMeta):

     def __new__(cls, name, bases, attrs):
          for name, col in attrs.items():
              if isinstance(col, SpecialColumn):
                  # Replacing the column
                  del attrs[name]
                  col1_name = '_{0}_1'.format(name)
                  col2_name = '_{0}_2'.format(name)
                  attrs[col1_name] = Column(...)
                  attrs[col2_name] = Column(...)
                  # Adding the hybrid property
                  def getter(self):
                      return (getattr(self, col1_name), getattr(self, col2_name))
                  attrs[name] = hybrid_property(getter)
Run Code Online (Sandbox Code Playgroud)

最后我declarative_base用它构造了一个实例,让用户使用新的基类定义类:

MyBase = declarative_base(metaclass=MyDeclarativeMeta)

class MyClass(MyBase):
    col1 = SpecialColumn()
    col2 = Column(...)
Run Code Online (Sandbox Code Playgroud)

现在我的问题:首先,我的方法是否正确?其次,我如何使用元类添加setter?这样做是否正确: …

python sqlalchemy metaclass

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

主键或唯一列上的 SQL 外键

假设我有两个表,表 A 和表 B,并且表 A 具有以下列:

COLUMNS (id INT PRIMARY KEY, name VARCHAR(200) UNIQUE)
Run Code Online (Sandbox Code Playgroud)

我想在表 B 中创建一列,它使用外键引用表 A 的一行。大多数情况下,当我在表 BI 中查找一行时,还希望检索它引用的表 A 行中的名称字段。查找(但不是插入)的速度是一个问题。

是用A表的主键做外键,然后用JOIN把name字段的值带进来,还是用name字段做外键,这样数据就更好了?在表 B 中查找行时已经存在?

sql join foreign-keys unique primary-key

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