小编Tur*_*ion的帖子

Python:如何将参数传递给函数的__code__?

以下作品:

def spam():
    print "spam"
exec(spam.__code__)
Run Code Online (Sandbox Code Playgroud)

垃圾邮件

但如果spam需要参数呢?

def spam(eggs):
    print "spam and", eggs
exec(spam.__code__)
Run Code Online (Sandbox Code Playgroud)

TypeError:spam()只需1个参数(给定0)

鉴于,我无法访问函数本身,只能访问代码对象,如何在执行代码对象时将参数传递给代码对象?是否可以使用eval?

编辑:由于大多数读者往往不相信这有用,请参阅以下用例:

我想将小Python函数保存到文件中,以便可以从另一台计算机中调用它们.(这里不用说这个用例严格限制了可能的功能.)pickle函数对象本身不起作用,因为这只保存了定义函数的名称和模块.相反,我可以腌制__code__功能.当我再次取消它时,当然对函数的引用消失了,这就是我无法调用该函数的原因.我只是在运行时没有它.

另一个用例:

我在一个文件中处理几个函数,计算一些数据并将其存储在硬盘上.计算会耗费大量时间,所以我不想每次都执行这些函数,但只有在函数的实现发生变化时才会执行.

我有一个版本的运行整个模块而不是一个功能.它通过查看实现模块的文件的修改时间来工作.但是如果我有许多我不想在单个文件中分离的函数,那么这不是一个选项.

python eval function exec parameter-passing

24
推荐指数
4
解决办法
9193
查看次数

应用变压器真的是多余的吗?

有很多关于Applicative 不需要自己的变压器类的讨论,如下所示:

class AppTrans t where
    liftA :: Applicative f => f a -> t f a
Run Code Online (Sandbox Code Playgroud)

但我可以定义似乎不是应用程序组合的应用变换器!例如,有效的:

data MStream f a = MStream (f (a, MStream f a))
Run Code Online (Sandbox Code Playgroud)

提升只是在每一步都执行副作用:

instance AppTrans MStream where
    liftA action = MStream $ (,) <$> action <*> pure (liftA action)
Run Code Online (Sandbox Code Playgroud)

如果f是一个应用程序,那么MStream f也是如此:

instance Functor f => Functor (MStream f) where
    fmap fun (MStream stream) = MStream $ (\(a, as) -> (fun a, fmap fun as)) <$> …
Run Code Online (Sandbox Code Playgroud)

haskell stream typeclass

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

内置对象的属性分配

这有效:

class MyClass(object):
    pass

someinstance = MyClass()
someinstance.myattribute = 42
print someinstance.myattribute
>>> 42
Run Code Online (Sandbox Code Playgroud)

但这不是:

someinstance = object()
someinstance.myattribute = 42
>>> AttributeError: 'object' object has no attribute 'myattribute'
Run Code Online (Sandbox Code Playgroud)

为什么?我有一种感觉,这与对象是一个内置类有关,但我发现这不令人满意,因为我在MyClass的声明中没有改变.

python attributes initialization self

9
推荐指数
2
解决办法
2506
查看次数

是否有整数线性编程软件也会返回非最佳解决方案?

我有一个整数线性优化问题,我对可行的,好的解决方案感兴趣.据我所知,例如Gnu线性编程工具包只返回最优解(假设存在).这需要无休止的时间,并不是我正在寻找的东西:我会对任何好的解决方案感到满意,而不仅仅是最优的解决方案.

因此,一个LP解算器,例如在一段时间后停止并返回他到目前为止找到的最佳解决方案,将完成这项工作.

有没有这样的软件?如果该软件是开源的,或者至少像啤酒一样免费,那将是很棒的.

或者:有没有其他方法通常可以加速整数LP问题?这是正确的地方吗?

linear-programming

9
推荐指数
2
解决办法
2051
查看次数

运算符绑定如何在这个Python示例中工作?

我最近偶然发现了这个表达:

True == False in (False,)
Run Code Online (Sandbox Code Playgroud)

它评估False,但我不明白为什么. True == FalseFalseFalse in (False,)True,所以(对我来说)两者都是合理的可能性

True == (False in (False,))
Run Code Online (Sandbox Code Playgroud)

(True == False) in (False,)
Run Code Online (Sandbox Code Playgroud)

True按照我的预期评估.这里出了什么问题?

python operator-precedence operator-keyword

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

解压缩的概括是什么?

我从列表中知道的大多数方法实际上是一些众所周知的类型类的特例.方法和相关类型类的一些示例:

  • map :: (a -> b) -> [a] -> [b]Functor
  • foldr :: (a -> b -> b) -> b -> [a] -> bFoldable
  • forM :: Monad m => [a] -> (a -> m b) -> m [b]Traversable
  • concat :: [[a]] -> [a]Monad

可能列表继续(原谅双关语).

我想知道背后的"深层含义" unzip :: [(a, b)] -> ([a], [b]).它可以使用一些着名的实例来实现吗?[]例如,functor实例(,a)?或者其他一些情况?理想情况下,我想要这种类型的更抽象的功能:SomeClass m => unzip :: m (a, b) -> (m a, m b).是否有一个课程可以使这项工作?

haskell list typeclass

7
推荐指数
2
解决办法
177
查看次数

在sqlalchemy中,如何通过使列条目相同来组合两个查询?

假设我有一个映射类User,映射到同名的表,以及一个年龄段的"年龄"列.我现在对以下问题感兴趣:

在我的申请过程中,出现了两个问题:

q1 = session.query(User).filter(lots of conditions)
q2 = session.query(User).filter(lots of other conditions)
Run Code Online (Sandbox Code Playgroud)

我现在想在q1上加入q2,条件是它们具有相同的年龄.但我不知道这可能如何运作.我尝试了以下但没有成功:

q1.join(q2.subquery(), q1.age==q2.age) # the query doesn't hold the columns of the queried class
q1.join(Age).join(q2.subquery()) # Works only if age is a relationship with mapped class Age
Run Code Online (Sandbox Code Playgroud)

我最近的电话是这样的:

a1 = aliased(User)
a2 = aliased(User)
q1 = session.query(a1)
q2 = session.query(a2)
s = q2.subquery()
q1.join(s, a1.age==a2.age).all()
>>> sqlalchemy.exc.OperationalError: (OperationalError) no such column: user_2.age 'SELECT user_1.id AS user_1_id, user_1.name AS user_1_name, user_1.age AS user_1_age \nFROM user AS …
Run Code Online (Sandbox Code Playgroud)

python join sqlalchemy

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

因为它已经存在,所以无法为`Char`定义自定义`Arbitrary`实例

我尝试按照Quickcheck简介进行操作,并想测试我的函数,该函数包含包含数字的字符串.为此,我定义了一个Arbitrary实例Char:

instance Arbitrary Char where
    arbitrary = choose ('0', '9')
Run Code Online (Sandbox Code Playgroud)

但是ghc抱怨说:

A.hs:16:10:
Duplicate instance declarations:
  instance Arbitrary Char -- Defined at A.hs:16:10
  instance [overlap ok] [safe] Arbitrary Char
    -- Defined in ‘Test.QuickCheck.Arbitrary’
Run Code Online (Sandbox Code Playgroud)

我怎么能告诉它忘记已定义的实例并使用我自己的实例?或者它根本不会那样工作(这会很奇怪,因为教程采用了这种方法)?

haskell quickcheck

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

如何将Haskell可执行文件编译或部署到Windows

  • 我有一个简单的,自包含的,开源的Haskell应用程序,可以在Windows系统上编译cabal build.我们假设它使用一个或两个非平凡的C库,例如OpenGL.
  • 我在Linux上开发,无法访问Windows机器.

问题:如何将我的应用程序编译为.exeWindows用户可以下载和运行的简单文件,而不会有进一步的麻烦?

限制:

  • 没有付费的构建服务(例如AppVeyor)
  • 我没有使用非自由软件(特别是我不会安装Windows)
  • 没有在客户端安装Haskell开发环境
  • 如果可能,不在客户端安装第三方软件(例如附加库等)

一些可能的解决方

  • 交叉编译
  • 免费构建服务(例如travis-ci,但适用于Windows)

windows deployment haskell compilation cross-compiling

6
推荐指数
0
解决办法
389
查看次数

将 Python 上下文管理器的迭代器嵌套在“with”中

我有一个返回上下文管理器的迭代器。

我想要一个 pythonicwith语句,它模拟多个嵌套语句的行为with,每个嵌套语句对应迭代器返回的每个上下文管理器。

有人可能会说,我想要(已弃用的)函数的泛化contextlib.nested

python iterator nested contextmanager

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