Questions tagged «python»

Python是一种动态类型化的高级解释型编程语言。它的设计侧重于清晰的语法,一种面向对象编程的直观方法,以及使正确的做事方式变得显而易见的方法。Python支持模块和异常,并具有广泛的标准模块库。Python是通用的,因此从Web到嵌入式系统都得到了广泛的使用。

1
如何知道我是否过度使用了多线程?
目前,我感觉我过度使用了多线程。 我有3种数据,A,B和C。 每个A都可以转换为多个B,每个B都可以转换为多个C。 我只对Cs有兴趣。 我可以使用几个转换函数轻松地编写此代码。但我回过神来与线程执行它,三个队列(queue_a,queue_b和queue_c)。有两个线程进行不同的转换,一个工作线程: ConverterA读取queue_a和写入queue_b ConverterB读取queue_b和写入queue_c Worker 处理来自 queue_c 转换相当平凡,我不知道这个模型是否太复杂了。但这对我来说似乎非常强大。每个“转换器”甚至可以在数据到达队列之前就开始工作,并且在代码中的任何时候我都可以“提交”新的As或Bs,它将触发转换管道,这反过来又将触发工作人员的工作。线。 甚至生成的代码看起来也更简单。但是我仍然不确定我是否在为简单的事情滥用线程。

2
Python中流控制的例外是最佳实践吗?
我正在阅读“学习Python”,发现了以下内容: 用户定义的异常也可以表示非错误情况。例如,当找到匹配项时,可以对搜索例程进行编码以引发异常,而不是返回状态标志以供调用方解释。在下面,try / except / else异常处理程序执行if / else返回值测试器的工作: class Found(Exception): pass def searcher(): if ...success...: raise Found() # Raise exceptions instead of returning flags else: return 因为Python是动态类型化的,并且是内核的多态形式,所以通常使用异常而不是哨兵返回值来表示这种情况。 我已经在各种论坛上多次讨论过这种问题,并且使用StopIteration结束循环对Python进行了引用,但是在官方样式指南中找不到很多(PEP 8附带提供了一个流程控制异常引用)或开发人员的声明。有没有官方声明这是Python的最佳做法? 这(作为控制流的异常是否被认为是严重的反模式?如果是,为什么?)也有几个注释者指出此样式是Pythonic。这是基于什么? TIA


2
设计决策-为什么不生成</ p>的<p>?
tl; dr 假设浏览器将正确关闭段落,则一些生成html的广泛使用的程序将仅生成开始段落标签,而不会生成关闭段落标签。 从表面上看,在我看来,浏览器将正确关闭段落的假设是不正确的。我的解释正确吗?更笼统地说,这种决策涉及哪些权衡? 浏览moinmoin源代码时,以下代码行引起了我的注意: # We only open those tags and let the browser auto-close them: _auto_closing_tags = set(['p']) (来源) 在阅读完其余的实现后,我已经使自己确信,是的,的确,当moinmoin为其中一个页面生成html代码时,它将在适当的情况下正确生成段落打开标签,同时有目的地避免任何段落关闭标签(尽管能够做到这一点)。 对于我特定的,相当不寻常的用例,这种行为是不正确的。我很想提交错误报告和/或更改行为。但是,看起来这个设计决定是经过深思熟虑的。我不太熟悉html标准或各种浏览器实现的复杂性,因此无法总体上判断这是否是正确的行为,而且我感觉我本能的纠正/更改此行为的本能可能是被误导了。 这段代码是否对浏览器的实现做出了正确的假设?生成的html有效吗?更一般而言,我可能会在这里失去哪些权衡?

5
编写良好的文档是否足以作为学习编程语言的充分理由?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我目前正在学习Python,这不是我的大学课程的一部分。在一次采访中有人问我为什么选择Python,我回答说它很容易学习并且文档写得很好。面试官没有回答这是否足够充分的理由。他看上去很有说服力,但我不确定。 编写良好的文档以及易于学习是否是选择脚本语言的足够充分的理由?还是我应该详细说明Python库的可用性和更大的Python用户群? 请注意。不需要Python。该公司致力于Ruby-on-rails。我的简历中有Python,我认为面试官只是想知道我在选择编程语言时重新考虑的考虑事项。

5
提出词法分析器标记
我正在为我创建的标记语言编写一个解析器(用python编写,但这与这个问题并不相关-实际上,如果这似乎是一个坏主意,我希望有一个更好的建议) 。 我在这里了解有关解析器的信息:http : //www.ferg.org/parsing/index.html,并且我正在编写词法分析器,如果我理解正确的话,应将内容拆分为标记。我无法理解的是我应该使用哪种令牌类型或如何创建它们。例如,我链接到的示例中的令牌类型为: 串 识别码 数 白空间 评论 紧急行动 许多符号,例如{和(算作自己的标记类型 我遇到的问题是,更通用的令牌类型对我来说似乎有些武断。例如,为什么要STRING自己使用单独的令牌类型,而不要使用IDENTIFIER。字符串可以表示为STRING_START +(IDENTIFIER | WHITESPACE)+ STRING_START。 这也可能与我的语言困难有关。例如,变量声明编写为,{var-name var value}并使用进行部署{var-name}。看起来'{'并且'}'应该是它们自己的令牌,但是VAR_NAME和VAR_VALUE是否符合令牌类型,或者这两者都属于IDENTIFIER吗?而且,VAR_VALUE实际上可以包含空格。after后面的空格var-name用于表示声明中值的开始。其他任何空格都是该值的一部分。这个空格会成为自己的令牌吗?在这种情况下,空白仅具有该含义。而且,{可能不是变量声明的开始..它取决于上下文(再次有该词!)。 {:开始一个名称声明,然后{ 甚至可以用作某些价值的一部分。 我的语言与Python类似,因为代码块是使用缩进创建的。我正在阅读有关Python如何使用词法分析器创建INDENT和DEDENT令牌的信息(它们或多或少的作用{以及}在许多其他语言中的作用)。Python声称是无上下文的,这对我来说意味着,至少词法分析器在创建令牌时不必关心它在流中的位置。Python的词法分析器如何在不知道先前字符的情况下就知道要构建特定长度的INDENT令牌(例如,上一行是换行符,因此开始为INDENT创建空间)?我问,因为我也需要知道这一点。 我的最后一个问题是最愚蠢的问题:为什么一个词法分析器甚至是必要的?在我看来,解析器可以逐个字符地找出它在哪里以及它期望什么。词法分析器是否增加了简单性的好处?
14 python  parsing  lexer 

1
Windows是Django社区中的“二等公民”吗?
我目前正在为Web应用程序进行研发,我们计划首先托管自己,然后让客户自行托管。 我的任务一直是评估Web框架,以期从一开始就可以为我们带来最大的生产力和维护的便利性,同时还使我们能够轻松地支持部署到客户控制的环境。 我们的团队具有ASP.NET(MVC和Webforms)和Ruby on Rails的经验。 我们在Rails上的经验是Windows部署是一个非常禁忌的话题,任何有关IRC或StackOverflow的问题都会引起“为什么不是Linux”的回应。但是,在这种情况下,我们的目标市场可能是运行Windows或Linux服务器。 在Django领域也是如此吗? 垃圾表现可能吗? 失去疼痛有可能吗? 是否因为不想运行Linux而被视为合理且没有被视为完全愚蠢的想法?

5
习惯FP思维的人应该如何阅读命令性代码?
我大约五个月前从大学毕业,并且已经在一家本地初创公司工作了四个月。在大学期间,我独自学习了Haskell,F#等。我们在大学里学过Java,但是我很快就接触了函数式编程,并且花了更多的时间在命令式编程上。结果,我的大脑开始思考功能性思维。我加入的公司使用Python,并且代码非常重要。我很难阅读命令式代码。我无法追踪突变。当“如果……否则……”嵌套的深度超过四个级别时,我将完全失去对代码中所发生情况的跟踪。另外,Python是一种动态语言,因此代码中没有类型。它' 自从我试图理解我们代码库的一部分(据称是“中等复杂”)以来已经有几个星期了,但是到目前为止,我在理解它方面还没有取得任何明显的进展。请向我提供一些实用的技巧,以帮助我理解该代码。提前致谢! 编辑: 也许我还应该提到代码中没有很多注释,而且名称也不是很直观。

9
Python:未来会成为主要的编程语言吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在阅读了一些Python资料并看了几年前的一些Python代码之后,我决定尝试一下。我决定从Python开始解决Euler项目上的问题,并且对该语言印象深刻。从那时起,我继续学习Django,现在主要将其用于我的Web应用程序。我很想以这种语言进行职业编程,但是我担心该语言的未来目前处于不确定状态。在Google和其他主要公司的支持下,人们可能会抱有希望,您对Python有什么看法,您是否看到很多工作机会?
14 python 

2
面向对象与基于矢量的编程
我陷入了面向对象和基于矢量的设计之间。我喜欢对象赋予整个建筑的能力,结构和安全性。但是同时,速度对我来说非常重要,并且在数组中具有简单的float变量确实对基于矢量的语言/库(例如Matlab或Python中的numpy)有所帮助。 这是我写来说明我的观点的一段代码 问题:添加拖车波动率数字。如果x和y是两个波动率数字,则波动率的总和为(x ^ 2 + y ^ 2)^ 0.5(假设有一定的数学条件,但在这里并不重要)。 我想非常快地执行此操作,同时我需要确保人们不要以错误的方式(x + y)添加波动率。两者都很重要。 基于面向对象的设计将是这样的: from datetime import datetime from pandas import * class Volatility: def __init__(self,value): self.value = value def __str__(self): return "Volatility: "+ str(self.value) def __add__(self,other): return Volatility(pow(self.value*self.value + other.value*other.value, 0.5)) (此外:对于那些不熟悉Python的人来说,__add__它只是一个覆盖+运算符的函数) 假设我添加了两个波动率列表 n = 1000000 vs1 = Series(map(lambda …

2
尽早尝试删除Python GIL会导致性能下降:为什么?
Python创造者Guido Van Rossum的这篇文章提到了从Python中删除GIL的早期尝试: 以前曾尝试过这种方法,但结果令人失望,这就是为什么我自己不愿意为此付出很多努力的原因。在1999年,Greg Stein(与Mark Hammond合作)生产了Python的一个fork(我相信是1.5),它删除了GIL,并用所有可变数据结构上的细粒度锁代替了它。他还提交了补丁,删除了许多我对全局可变数据结构的依赖。但是,在进行基准测试后,结果表明,即使在具有最快锁定原语的平台(当时为Windows)上,单线程执行的速度也降低了近两倍,这意味着在两个CPU上,您可以多做一点工作在没有GIL的情况下比在具有GIL的单个CPU上完成。这还不够,格雷格的补丁消失了。(请参阅格雷格关于演出的文章。) 我很难与实际结果争论,但我真的很奇怪为什么会这样。大概,从CPython中删除GIL如此困难的主要原因是由于引用计数内存管理系统。一个典型的Python程序将调用Py_INCREF和Py_DECREF数千或数百万次,使其成为一个关键的竞争点,如果我们要环绕它锁。 但是,我不明白为什么添加原子基元会降低单个线程程序的速度。假设我们刚刚修改了CPython,以便每个Python对象中的refcount变量是一个原子基元。然后,当我们需要增加引用计数时,我们只是执行原子增加(获取和添加指令)。这将使Python参考计数线程安全,并且在单线程应用程序上不应有任何性能损失,因为不会发生锁争用。 但是,a,许多比我聪明的人都尝试过并且失败了,所以显然我在这里缺少任何东西。我看这个问题的方式有什么问题?
13 python 

5
什么时候应该比从文本文件解析数据优先使用数据库?
我正在制作一个Python程序来测量codereview.SE的增长。我的方法是获取首页上显示的“网站统计信息”,并将其存储在我的硬盘上。我计划每天执行一次。到目前为止,我已经做了足够的工作来获取统计数据并将它们附加到文本文件中。可以在github上查看python脚本。我使用的格式如下 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 我只运行了两次脚本,以获取文件中要使用的格式。最初,这对我来说似乎很好,因为我可以自己存储它,而且格式是相同的,因此很容易解析,但是不确定。似乎在这里使用数据库应该更好,因为那样检索数据应该更容易。请注意,我从未使用过任何数据库,也不了解SQL,MySQL或RDBMS的任何其他变体。 因此,这使我想到了这个问题。什么时候应该首选数据库来存储数据而不是将数据存储在文本文件中?在决定是否需要数据库还是简单的文本文件时,是否可以找到一些指针? PS:如果可以添加更好的标签,请这样做。我对可以添加的标签有些怀疑。

8
在CL和Python之间进行Web开发
我来自Java背景,在阅读了Paul Graham的这篇小文章之后,我开始想知道如何选择一种新的语言,即Common Lisp,以加快工作速度(我是一名Web开发人员)。 我目前正在编写宠物项目,但我有一些未来的业务计划。保罗在论文中谈到LISP是“秘密武器”。我不知道十年后这个说法是否正确,但是我将脚趾插入了一个不错的CL教程中,看起来LISP对于Web开发可能更胜一筹。 Paul还提到Python是我真正熟悉的不错的选择。我的问题是:我将来的Web项目应该选择哪个? 我在想什么: 我不会开发桌面应用程序,因此可以选择我喜欢的任何语言。 python似乎有一个很大的社区,因此与lisp相比,它拥有更多的库/框架 我发现Lisp具有某些功能(例如宏),在其他任何地方都找不到 我通常独自工作或与其他1-2位程序员一起工作,但要找到一个精通Lisp知识的人可能很难 所以你怎么看?

1
为什么建议在Flask.run上使用flask CLI?
在Flask 0.11中flask,引入了CLI。docs和changelog都建议这样做。 开发服务器文档: 从Flask 0.11开始,有多种内置方法来运行开发服务器。最好的一个是flask命令行实用程序,但是您也可以继续使用该Flask.run()方法。 命令行 强烈建议使用flask命令行脚本(命令行界面)进行开发,因为由于其加载应用程序的方式,它提供了卓越的重新加载体验。基本用法是这样的: $ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run 更新日志: 添加flask了flask.cli用于通过单击CLI系统启动本地调试服务器的模块。与旧flask.run()方法相比,建议使用此方法,因为它采用不同的设计,因此可以更快,更可靠地工作,并且可以替代Flask-Script。 到目前为止,我还没有注意到这种“高级重装体验”。我看不到在自定义脚本上使用CLI的意义。 如果使用Flask.run,我只需编写一个python文件: #!/usr/bin/env python3 from my_app import app if __name__ == '__main__': app.run(debug=True) 如果使用CLI,则必须指定环境变量。在CLI文档中声明可以将其集成到activatevirtualenvwrapper脚本中。我个人认为这是应用程序的一部分,并认为它应该在版本控制下。las,需要一个shell脚本: #!/usr/bin/env bash export FLASK_APP=my_app:app export FLASK_DEBUG=1 flask run 当然,任何Windows用户开始协作后,都将附带一个附加的bat脚本。 同样,第一个选项允许在启动实际应用之前使用Python编写的设置。 例如,这允许 在Python中解析命令行参数 在运行应用程序之前设置日志记录 他们似乎在提倡添加自定义命令。我看不出为什么这比编写简单的Python脚本更好,为什么可以通过入口点公开这些脚本。 通过Python运行脚本使用已配置的记录器时的示例记录输出: $ ./run.py DEBUG …
13 python  flask 

2
在python中,定义具有函数的模块或具有包含函数的类的模块是否更好?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 在我的代码中,以上两个选项中的任何一个都可以很好地工作,但是我有兴趣了解这两种方法的优缺点。
13 python 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.