我正在看John Hughes的采访,当他从Haskell转到Erlang时,他被问到是否错过了懒惰.作为答案,他说是,他用工具"模仿"它.我的问题是:如何用严格的语言模仿懒惰?很高兴在主流语言中看到冷却的例子.
language-agnostic erlang haskell programming-languages lazy-evaluation
是否有可能以编程方式找出两个实例是否属于同一类(使用api,如JENA)
我不想在我的unittest中创建真实文件.所以我发现自己经常修补无意义的样板并为伪文件创建模拟工厂.我想知道这些毫无意义的努力是否会更好(在这种情况下)并尝试类似于本地unittest方法的范围:
open = lambda x: StringIO()
Run Code Online (Sandbox Code Playgroud)
这样可以吗?或者是否存在重大警告/不采用这种方法并且更好地使用模拟工厂?
在Haskell函数->中给出了type(),它不是代数数据类型构造函数,并且不能将它重新实现为与(->)相同.
所以我想知道,哪些语言可以让我写出我的版本(->)?这个属性如何调用?
UPD通过讨论重新制定了问题:
哪种语言没有->原始类型?
为什么->有必要的原始?
language-agnostic haskell programming-languages functional-programming function
从不太酷的问题类别......
"队列式的东西"我的意思是支持以下操作:
可选操作类似于:
如果可以以分布式方式对队列执行以下操作(多个客户端与队列交互),那将是理想的:
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库来完成上述任务的加分点.
解决方案应该非常好地扩展
我在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) 我最近花了一些业余时间试图围绕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 调试器运行程序时,它可以工作。
我正在使用 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)
这不会导致任何错误。
是否有可能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) 鉴于重音的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 ×7
haskell ×2
java ×2
python-2.7 ×2
coding-style ×1
erlang ×1
function ×1
jena ×1
macos ×1
nosql ×1
pip ×1
python-exec ×1
rabbitmq ×1
rdf ×1
semantic-web ×1
unicode ×1
unit-testing ×1
virtualenv ×1