以下作品:
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__
功能.当我再次取消它时,当然对函数的引用消失了,这就是我无法调用该函数的原因.我只是在运行时没有它.
另一个用例:
我在一个文件中处理几个函数,计算一些数据并将其存储在硬盘上.计算会耗费大量时间,所以我不想每次都执行这些函数,但只有在函数的实现发生变化时才会执行.
我有一个版本的运行整个模块而不是一个功能.它通过查看实现模块的文件的修改时间来工作.但是如果我有许多我不想在单个文件中分离的函数,那么这不是一个选项.
有很多关于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) 这有效:
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的声明中没有改变.
我有一个整数线性优化问题,我对可行的,好的解决方案感兴趣.据我所知,例如Gnu线性编程工具包只返回最优解(假设存在).这需要无休止的时间,并不是我正在寻找的东西:我会对任何好的解决方案感到满意,而不仅仅是最优的解决方案.
因此,一个LP解算器,例如在一段时间后停止并返回他到目前为止找到的最佳解决方案,将完成这项工作.
有没有这样的软件?如果该软件是开源的,或者至少像啤酒一样免费,那将是很棒的.
或者:有没有其他方法通常可以加速整数LP问题?这是正确的地方吗?
我最近偶然发现了这个表达:
True == False in (False,)
Run Code Online (Sandbox Code Playgroud)
它评估False
,但我不明白为什么.
True == False
是False
和False in (False,)
是True
,所以(对我来说)两者都是合理的可能性
True == (False in (False,))
Run Code Online (Sandbox Code Playgroud)
和
(True == False) in (False,)
Run Code Online (Sandbox Code Playgroud)
True
按照我的预期评估.这里出了什么问题?
我从列表中知道的大多数方法实际上是一些众所周知的类型类的特例.方法和相关类型类的一些示例:
map :: (a -> b) -> [a] -> [b]
和 Functor
foldr :: (a -> b -> b) -> b -> [a] -> b
和 Foldable
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)
.是否有一个课程可以使这项工作?
假设我有一个映射类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) 我尝试按照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)
我怎么能告诉它忘记已定义的实例并使用我自己的实例?或者它根本不会那样工作(这会很奇怪,因为教程采用了这种方法)?
cabal build
.我们假设它使用一个或两个非平凡的C库,例如OpenGL.问题:如何将我的应用程序编译为.exe
Windows用户可以下载和运行的简单文件,而不会有进一步的麻烦?
限制:
一些可能的解决方
我有一个返回上下文管理器的迭代器。
我想要一个 pythonicwith
语句,它模拟多个嵌套语句的行为with
,每个嵌套语句对应迭代器返回的每个上下文管理器。
有人可能会说,我想要(已弃用的)函数的泛化contextlib.nested
。
python ×5
haskell ×4
typeclass ×2
attributes ×1
compilation ×1
deployment ×1
eval ×1
exec ×1
function ×1
iterator ×1
join ×1
list ×1
nested ×1
quickcheck ×1
self ×1
sqlalchemy ×1
stream ×1
windows ×1