当我运行setup.py中python setup.py test
列出的依赖项时tests_require
,会将其下载到当前目录.我想在site-packages中安装这些依赖项,就像python setup.py install
我运行时列出的依赖项一样requires
.
在这个reST示例意味着由Sphinx呈现,| yaco_url | 不会被替换,因为它在代码块中:
.. |yaco_url| replace:: http://yaco.es/
You can use wget to download it:
.. code-block:: console
$ wget |yaco_url|package.tar.gz
Run Code Online (Sandbox Code Playgroud)
我想知道是否有某种方法可以强制更换| yaco_url | 在渲染代码块之前.
在真实世界 中,引入了Haskell monad作为一种避免代码通过使用Maybe
monad 从屏幕右侧移动的方法.然而,当case语句包括其他单子像发生了什么Either
或者IO
,例如?
我知道使用monad变换器可以避免使用梯子,但是它们不仅仅是因为风格问题而过度杀伤吗?是否有其他惯用和轻量级的方法来处理这个?
更新:这是一个例子:
stair s = do
s <- getLine
case stepMaybe s of
Nothing -> return ()
Just s1 -> case stepEither s1 of
Left _ -> return ()
Right s2 -> case stepList s2 of
[s3:_] -> case stepMaybe s3 of
Nothing -> return ()
Just s4 -> print s4
_ -> return ()
Run Code Online (Sandbox Code Playgroud) 我需要一个执行此操作的函数:
>>> func (+1) [1,2,3]
[[2,2,3],[2,3,3],[2,3,4]]
Run Code Online (Sandbox Code Playgroud)
我的实际案例更复杂,但这个例子显示了问题的要点.主要的区别在于,实际上使用索引是不可行的.本List
应该是一个Traversable
或Foldable
.
编辑:这应该是功能的签名:
func :: Traversable t => (a -> a) -> t a -> [t a]
Run Code Online (Sandbox Code Playgroud)
更接近我真正想要的是相同的签名,traverse
但无法弄清楚我必须使用的功能,以获得所需的结果.
func :: (Traversable t, Applicative f) :: (a -> f a) -> t a -> f (t a)
Run Code Online (Sandbox Code Playgroud) 我有这个初始字符串.
'bananaappleorangestrawberryapplepear'
Run Code Online (Sandbox Code Playgroud)
并且还有一个带字符串的元组:
('apple', 'plepe', 'leoran', 'lemon')
Run Code Online (Sandbox Code Playgroud)
我想要一个函数,以便从最初的字符串和带有字符串的元组我得到这个:
'bananaxxxxxxxxxgestrawberryxxxxxxxar'
Run Code Online (Sandbox Code Playgroud)
我知道如何通过在每个单词的初始字符串中找到单词然后在所有带有替换单词的初始字符串中逐字符循环来强制执行.
但它不是非常有效和丑陋.我怀疑应该有一些方法可以通过itertools或其他东西以功能的方式更优雅地完成这项工作.如果您知道可以高效执行此操作的Python库,请告诉我们.
更新:贾斯汀皮尔指出我在最初的问题中没有描述的案例.如果一个单词是'aaa'并且'aaaaaa'在初始字符串中,则输出应该看起来像'xxxxxx'.
python string optimization functional-programming python-itertools
例如,有......
consumer :: Proxy p => () -> Consumer p a (EitherT String IO) ()
producer :: Proxy p => () -> Producer p a (EitherT ByteString IO) r
Run Code Online (Sandbox Code Playgroud)
......我该如何工作?
session :: EitherT ByteString (EitherT String IO) ()
session = runProxy $ producer >-> consumer
Run Code Online (Sandbox Code Playgroud)
注:我读过混合基地单子在Control.Proxy.Tutorial
.我得到了第一个例子,但无法理解人为的例子.更多的例子,不是那么明显但不那么做作,可能会澄清如何使用hoist
和lift
匹配任何基础monad的组合.
在阅读network
包的源代码时,我注意到ioError (userError ("Error description"))
在IO操作期间引发错误的广泛使用.
由于这不是我第一次看到这个,我想知道使用这个模式而不是函数的实践有什么不同.error
Prelude
我知道,ioError . userError
引发IOException
的IO
单子,同时error
提出了一个ErrorCall
在任何地方,但最终双方似乎注定中止显示一个简单的错误消息的程序.
哪种情况ioError . userError
会有利error
?
我想知道是否有任何方法(可能使用Type Families)Buildable
使用build
方法定义类型类,以便这样的东西可以工作:
>>> import qualified Data.ByteString.Builder as B (Builder)
>>> import qualified Data.Text.Lazy.Builder as T (Builder)
>>> -- This should internally use `int8` from `Data.ByteString.Builder`:
>>> build (8::Int8) :: B.Builder
>>> -- This should internally use `decimal` from `Data.Text.Lazy.Builder`:
>>> build (8::Int8) :: T.Builder
>>> -- If no concrete type is specified, I'd expect something like this:
>>> :t build (8::Int8)
GBuilder Int8
Run Code Online (Sandbox Code Playgroud)
我知道如何使它与MPTC一起工作,但我必须明确定义要构建的值的类型和构建器的类型.有没有办法让类型系统自动选择预期的类型而不显式传递它?
我经常发现自己编写这样的代码:
tupla = (1, 2, 3, 4)
if (1 in tupla) and (4 in tupla):
...
Run Code Online (Sandbox Code Playgroud)
是否有任何Pythonic方式可以更紧凑地编写这个,而无需输入tupla
两次?
haskell ×5
python ×4
coding-style ×2
distribute ×1
optimization ×1
proxies ×1
setuptools ×1
string ×1
testing ×1
traversable ×1