我写了一些包含一些额外函数的包,用于处理反映我喜欢使用它们的方式的常见类型(例如,我更喜欢将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指向本地目录作为备用存储库?
我目前的解决方法是将所有模块保存在一个本地包中,但如果可能的话,我宁愿将它们分开.
请考虑以下代码段:
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,特别是当被测试的类型定义了相等的方法时.
我有一个可能失败的计算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都无法解决问题.
lxml中的xpath()函数通常返回元素列表.
如果我有一个XPath,我希望它只返回一个元素,那么最好的方法是:
我真的在寻找SQLAlchemy的one()函数的模拟.
有时我需要在conda环境中安装纯pip软件包。如果我使用安装软件包pip install,那么即使panda可以使用它们,该软件包的所有依赖项也会使用pip安装。
我想通过conda安装尽可能多的软件包,所以目前我使用黑客工具通过pip获取软件包依赖项列表,在conda上搜索所有conda install已找到的依赖项,然后通过找到pip install。
我更喜欢通过conda而不是pip安装依赖项吗?如果是这样,谁能想到一种更优雅的方式来解决此问题?
我想在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?这样做是否正确: …
假设我有两个表,表 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 中查找行时已经存在?