小编Mar*_*cin的帖子

如何模仿懒惰

我正在看John Hughes的采访,当他从Haskell转到Erlang时,他被问到是否错过了懒惰.作为答案,他说是,他用工具"模仿"它.我的问题是:如何用严格的语言模仿懒惰?很高兴在主流语言中看到冷却的例子.

language-agnostic erlang haskell programming-languages lazy-evaluation

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

是否有可能以编程方式找出两个实例是否属于同一个RDF类?

是否有可能以编程方式找出两个实例是否属于同一类(使用api,如JENA)

java rdf semantic-web jena

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

Monkey-patch内置函数用于单元测试?

我不想在我的unittest中创建真实文件.所以我发现自己经常修补无意义的样板并为伪文件创建模拟工厂.我想知道这些毫无意义的努力是否会更好(在这种情况下)并尝试类似于本地unittest方法的范围:

open = lambda x: StringIO()
Run Code Online (Sandbox Code Playgroud)

这样可以吗?或者是否存在重大警告/不采用这种方法并且更好地使用模拟工厂?

python unit-testing monkeypatching

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

在哪些语言中,函数抽象不是原始的

在Haskell函数->中给出了type(),它不是代数数据类型构造函数,并且不能将它重新实现为与(->)相同.

所以我想知道,哪些语言可以让我写出我的版本(->)?这个属性如何调用?

UPD通过讨论重新制定了问题:

哪种语言没有->原始类型?

为什么->有必要的原始?

language-agnostic haskell programming-languages functional-programming function

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

如何在RBDMS或NOSQL数据存储区或其他消息传递系统(例如,rabbitmq)之上实现分布式队列类似的东西?

从不太酷的问题类别......

"队列式的东西"我的意思是支持以下操作:

  • append(entry:Entry) - 在队列尾部添加条目
  • take():Entry - 从队列头部删除条目并返回它
  • promote(entry_id) - 将条目移动到靠近头部的位置; 当前占据该位置的条目将移动到旧位置
  • 降级(entry_id) - 与促销相反(entry_id)

可选操作类似于:

  • 提升(entry_id,amount) - 比如提升(entry_id),除非你指定了仓位数量
  • 降级(entry_id,金额) - 与促销相反(entry_id,金额)
  • 当然,如果我们允许数量为正数或负数,我们可以通过单一移动(entry_id,amount)方法合并推广/降级方法

如果可以以分布式方式对队列执行以下操作(多个客户端与队列交互),那将是理想的:

queue = ...

queue.append( a )
queue.append( b )
queue.append( c )

print queue
"a b c"

queue.promote( b.id )
print queue
"b a c"

queue.demote( a.id )
"b c a"

x = queue.take()
print x
"b"
print queue
"c a"
Run Code Online (Sandbox Code Playgroud)

是否有任何特别适合此用例的数据存储?即使多个用户同时修改队列,队列也应始终处于一致状态.

如果不是为了促进/降级/移动要求,那就不会有太大的问题.

编辑:如果有Java和/或Python库来完成上述任务的加分点.

解决方案应该非常好地扩展

python java message-queue rabbitmq nosql

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

virtualenv不会创建PYTHONPATH/pip安装包不起作用

我在win 7下在cygwin上使用virtualenv 1.9.1.每个virtualenv都是在没有任何选项的情况下创建的(显然不是目录名).没有花哨的定制.

所有virtualenvs都是新鲜的,因为我没有创建任何包装脚本,也没有编辑任何virtualenv脚本.我完全确定我没有做任何特别的事情(即除了滥用virtualenv,而不是采取阻碍其操作的行动),这导致PYTHONPATH在多个虚拟现实中缺席.

每个新virtualenv的virtualenv激活脚本不会创建PYTHONPATH.pip安装包$VIRTUAL_ENV/lib/python2.7/site-packages/<packagedir>(例如lib/python2.7/site-packages/html5lib)下的包.

pip的行为似乎很可取.但是,运行python(在激活virtualenv之后)导致没有pip安装的包可加载(即"没有名为...的模块").

更新:添加PYTHONPATH activate确实"解决"了问题.显然,我不想手动维护这个,也不必更新activate_this.py.我仍然想知道为什么virtualenvs现在不能直接开箱即用.

解决方案是什么?virtualenv从未习惯这样做.它现在有什么问题?

更新2:以下是使用-vv运行virtualenv的输出:

$ virtualenv -vv newvirtualenv
Creating newvirtualenv/lib/python2.7
Symlinking Python bootstrap modules
  Symlinking newvirtualenv/lib/python2.7/config
  Symlinking newvirtualenv/lib/python2.7/lib-dynload
  Symlinking newvirtualenv/lib/python2.7/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking newvirtualenv/lib/python2.7/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking newvirtualenv/lib/python2.7/ntpath.py
  Symlinking newvirtualenv/lib/python2.7/genericpath.py
  Symlinking newvirtualenv/lib/python2.7/fnmatch.py
  Symlinking newvirtualenv/lib/python2.7/locale.py
  Symlinking newvirtualenv/lib/python2.7/encodings
  Symlinking newvirtualenv/lib/python2.7/codecs.py
  Symlinking newvirtualenv/lib/python2.7/stat.py
  Symlinking newvirtualenv/lib/python2.7/UserDict.py
  File newvirtualenv/lib/python2.7/lib-dynload/readline.dll already exists
  Symlinking newvirtualenv/lib/python2.7/copy_reg.py
  Symlinking newvirtualenv/lib/python2.7/types.py
  Symlinking newvirtualenv/lib/python2.7/re.py
  Symlinking newvirtualenv/lib/python2.7/sre.py
  Symlinking newvirtualenv/lib/python2.7/sre_parse.py
  Symlinking newvirtualenv/lib/python2.7/sre_constants.py
  Symlinking newvirtualenv/lib/python2.7/sre_compile.py …
Run Code Online (Sandbox Code Playgroud)

python pip virtualenv

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

Python中的功能与命令式风格

我最近花了一些业余时间试图围绕Haskell和函数式编程.我的一个主要疑虑是(并且仍然是)我认为是简洁的,功能性的表达式(无论是在Haskell还是任何其他语言中)的不可读性.

这是一个例子.我刚刚在一些代码中进行了以下转换:

def scrabble_score(word, scoretable):    
    score = 0
    for letter in word:
        if letter in scoretable:
            score += scoretable[letter]
    return score
Run Code Online (Sandbox Code Playgroud)

def scrabble_score(word, scoretable):
    return sum([scoretable.get(x, 0) for x in word])
Run Code Online (Sandbox Code Playgroud)

后者写作更令人满意(并且,请记住,我自己也是写作的人,也是读者).如果我在输入代码时犯了任何错误,它会更短更甜,并且不会声明任何令人头疼的变量.(顺便说一下,我意识到我可以get()在命令式风格的函数中使用dict的方法,但我意识到它正在执行这个转换,所以我在示例中就这样离开了.)

我的问题是:尽管如此,代码的后一版本是否比前者更具可读性?与前一版本相比,它似乎是一个更加单一的表达方式,与之前的版本相比,你有机会从更小,更原子的部分构建块的意义.这个问题来自于我试图解码所谓的易于理解的Haskell函数,以及我作为一年级CS学生的TA的坚持,我们编写代码的主要原因之一(经常被忽视)是沟通与其他程序员/计算机科学家的想法.我很紧张,terser风格是只写代码,因此违背了沟通和理解代码的目的.

python functional-programming coding-style python-2.7

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

如何将python程序作为守护进程运行?

我编写了以下程序来将我的程序作为守护程序运行,但它没有运行;当我从 python 调试器运行程序时,它可以工作。

我正在使用 Mac os x。

/User/Library/LaunchDaemons/com.bobbob.osx.test.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.bobbob.osx.test</string>
<key>Program</key>
<string>/Users/vivekbhintade/Desktop/test.py</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

/Users/vivekbhintade/Desktop/test.py

import urllib2
from datetime import datetime
import smtplib
from smtplib import SMTPException
import threading

def checkerror():

    #my code which works fine individually, which sends mail after 5 seconds to recipients.

checkerror()
Run Code Online (Sandbox Code Playgroud)

而且我还使用以下命令从终端运行程序。

launchctl load /Library/LaunchDaemons/com.bobbob.osx.test.plist 
Run Code Online (Sandbox Code Playgroud)

这不会导致任何错误。

python macos python-2.7

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

通过Internet /多个协议导入python模块或动态创建模块

是否有可能import一个Python模块从过使用互联网http(s), ftp,smb或任何其它协议?如果是这样,怎么样?如果没有,为什么?

我想这是为了让Python使用更多的协议(读取文件系统)并使其能够使用其他协议.是的我同意它会慢很多倍,但是一些优化和更大的未来带宽肯定会平衡它.

例如:

import site

site.addsitedir("https://bitbucket.org/zzzeek/sqlalchemy/src/e8167548429b9d4937caaa09740ffe9bdab1ef61/lib")

import sqlalchemy
import sqlalchemy.engine
Run Code Online (Sandbox Code Playgroud)

python network-protocols python-import python-exec

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

如何迭代unicode符号,而不是python中的字节?

鉴于重音的unicode字样u'??????',我需要剥离acute(u'?????'),并将重音格式更改为u'???+??',其中'+'代表前一个字母的锐角.

我现在所做的是使用一个有效且无法完成符号的字典:

accented_list = [u'??', u'??', u'??', u'??', u'??', u'??', u'??', u'??', u'??']
regular_list = [u'?', u'?', u'?', u'?', u'?', u'?', u'?',  u'?', u'?']
accent_dict = dict(zip(accented_list, regular_list))
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

def changeAccentFormat(word):
  for letter in accent_dict:
    if letter in word:
      its_index = word.index(letter)
      word = word[:its_index + 1] + u'+' + word[its_index + 1:]
  return word
Run Code Online (Sandbox Code Playgroud)

但是,它当然不能按预期工作.我注意到这段代码:

>>> word = u'??????'
>>> for letter in word:
...     print letter
Run Code Online (Sandbox Code Playgroud)

?
?
? …
Run Code Online (Sandbox Code Playgroud)

python unicode python-unicode

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