我越深入研究javascript,就越会考虑某些设计决策和鼓励实践的后果.在这种情况下,我正在观察匿名函数,这个函数不仅是JavaScript提供的,而且我看到强烈使用.
我想大家都同意以下事实:
虽然匿名函数似乎是一个非常好的功能,但它的使用导致深度嵌套的代码设计.代码编写速度快,但难以阅读.它不是被迫为一个功能发明一个命名的上下文,而是压缩你的可调用对象的层次结构,而是鼓励"深入一层",推动你的大脑堆叠,并迅速溢出7 +/- 2规则.艾伦·库珀(Alan Cooper)的" 关于面子 "(About Face)表达了类似的概念,引用了"人们不了解等级制度".作为程序员,我们确实理解了层次结构,但是我们的生物学仍然限制了我们对深层嵌套的掌握.
我想在这一点上听到你的意见.如果匿名功能被认为是有害的,我们后来发现的一种明显闪亮的语法糖是盐,甚至是鼠毒?
CW因为没有正确答案.
假设你有一个基类A,这个类由B和C重新实现.假设还有一个类方法A.derived()告诉你哪些类重新实现了A,因此返回[B,C],如果你以后有class D(A): pass或者class D(B): pass,现在A.derived()返回[B,C,D].
你会如何实现这个方法A.derived()?除非你使用元类,否则我觉得这是不可能的.您可以使用标准机制仅从子级到父级遍历继承树.要使链接处于另一个方向,您必须"手动"保留它,这意味着重写传统的类声明机制.
我需要根据特定的逻辑返回css文件和js文件.显然,静态服务并不能满足我的需求.我有一个视图,其render方法使用逻辑来查找正确的文件,但我必须返回它.从技术上讲,我可以只读取文件并将其填充到具有适当mime类型的HttpResponse对象中,但我想知道是否有更好的策略.(比如php中的fpassthru())
我为此感到困惑
def main():
for i in xrange(2560000):
a = [0.0, 0.0, 0.0]
main()
$ time python test.py
real 0m0.793s
Run Code Online (Sandbox Code Playgroud)
现在让我们看看numpy:
import numpy
def main():
for i in xrange(2560000):
a = numpy.array([0.0, 0.0, 0.0])
main()
$ time python test.py
real 0m39.338s
Run Code Online (Sandbox Code Playgroud)
神圣的CPU蝙蝠侠!
使用numpy.zeros(3)改进,但仍然不够恕我直言
$ time python test.py
real 0m5.610s
user 0m5.449s
sys 0m0.070s
Run Code Online (Sandbox Code Playgroud)
numpy.version.version ='1.5.1'
如果您想知道在第一个示例中是否跳过列表创建以进行优化,则不是:
5 19 LOAD_CONST 2 (0.0)
22 LOAD_CONST 2 (0.0)
25 LOAD_CONST 2 (0.0)
28 BUILD_LIST 3
31 STORE_FAST 1 (a)
Run Code Online (Sandbox Code Playgroud) 我们都知道重构是好的,我和下一个人一样喜欢它,但是你有真正的案例,最好不要重构吗?
像时间关键的东西或同步?技术或人为原因同样受到欢迎.真实案例场景和经验加分.
编辑:从目前为止的答案来看,看起来不重构的唯一理由就是金钱.我的问题主要与这样的事情有关:假设您想要执行"提取方法",但是如果添加额外的函数调用,则会使代码稍微快一点并阻碍非常严格的同步.只是为了让你知道我的意思.
我有时听到的另一个原因是"用于当前代码布局的其他人会因你的更改而烦恼".当然,我怀疑这是一个很好的理由.
我想运行python setup.py install(安装脚本使用setuptools),我只想将.pyc文件包含在生成的egg或目录中.所有.py文件不得出现.我怎样才能做到这一点 ?
如果我有一串Python代码,我如何判断它是否有效,即,如果在Python提示符下输入,它会引发一个SyntaxError?我认为使用compiler.parse可行,但显然该模块已在Python 3中删除.有没有办法可以在Python 3中运行.显然,我不想执行代码,只需检查它的语法.
在fortran 95中,如果您在声明中分配变量
integer :: var = 0
Run Code Online (Sandbox Code Playgroud)
它相当于
integer, save :: var = 0
Run Code Online (Sandbox Code Playgroud)
因此,变量在例行执行后保留(相当于staticC语言),并且在再次调用时不会重新初始化.这种(恕我直言,危险)行为背后的理由/技术问题是什么?
在提交之前,我意外地用bzr还原恢复了我的所有更改.我的所有更改都丢失了,还是可以以某种方式撤消恢复?
我没有失去很多变化,但我很高兴知道是否有针对此的安全网.谷歌没有帮助"撤消bzr还原".
我浏览一个简单的,完全REST API的好例子,但无济于事.检查stackoverflow也是如此.我见过的最好的就是这篇文章.尽管如此,我仍然没有明白这一点.让我们举一个我们都知道的应用程序的例子:维基百科.
假设我们要为维基百科创建REST API.我们期待以下动词:
GET /wiki/Article_name: obtains a specified page
DELETE /wiki/Article_name: deletes the page
POST /wiki/Article_name: creates a new page
PUT /wiki/Article_name: updates a page.
Run Code Online (Sandbox Code Playgroud)
事实是:当您在浏览器中使用维基百科时,您不使用REST界面进行导航.我很确定当你更新页面时,你永远不会使用PUT(虽然你在技术上创建了一个新版本的页面,所以POST很有意义).同样,当您删除页面时,浏览器不会发送DELETE.
我的问题是:
python ×4
bazaar ×1
django ×1
fortran ×1
javascript ×1
numpy ×1
performance ×1
python-3.x ×1
refactoring ×1
rest ×1
setuptools ×1
syntax ×1