Questions tagged «python»

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

9
算法比编程语言重要吗?
在当前(2013年)的Google Code Jam竞赛中,与仅使用40行代码即可解决同一问题的Python人员相比,C ++和Java人员花费了200多行代码。 Python不能直接与C ++和Java相提并论,但是我认为冗长程度的差异可能会对算法的效率产生影响。 与选择语言相比,知道正确的算法有多重要?能否以更好的方式(使用相同的算法)以C ++或Java来实现出色实现的Python程序,这是否与某些编程语言的自然冗长性有关?
35 java  c++  algorithms  python 

4
Python“唯一的方法”的具体示例maxim [关闭]
我正在学习Python,并对PEP 20 The Zen of Python中的以下几点感兴趣: 应该有一种-最好只有一种-显而易见的方法。尽管除非您是荷兰人,否则一开始这种方式可能并不明显。 谁能提供这个格言的具体例子?我对与其他语言(例如Ruby)的对比特别感兴趣。Ruby设计哲学的一部分(我认为起源于Perl?)是实现它的多种方法。任何人都可以提供一些示例来说明每种方法的利弊。请注意,我不是在寻找哪个更好的答案(这可能是主观的,无法回答),而是两种风格的公正对比。

4
我是否应该对常数全部使用大写?
我是一名Python程序员,主要使用pylint整理源代码。我可以消除除以下警告以外的所有警告:常量名称无效。将名称更改为全部大写可以解决此问题,但是我真的应该这样做吗?如果这样做,我发现我的代码看起来很丑陋,因为大多数变量都是常量(根据pylint)。

5
Python mixins是反模式吗?
我完全意识到,pylint其他静态分析工具并非一无所知,有时必须不听从他们的建议。(这适用于各种类型的消息,而不仅仅是conventions。) 如果我有像 class related_methods(): def a_method(self): self.stack.function(self.my_var) class more_methods(): def b_method(self): self.otherfunc() class implement_methods(related_methods, more_methods): def __init__(self): self.stack = some() self.my_var = other() def otherfunc(self): self.a_method() 显然,这是人为的。如果您愿意,这是一个更好的示例。 我相信使用“ mixins”来称呼这种风格。 像其他工具,pylint利率这个代码的-21.67 / 10,主要是因为它认为more_methods并related_methods没有self或属性otherfunc,stack,annd my_var因为没有运行的代码,它显然不能看到related_methods和more_methods在混合中implement_methods。 编译器和静态分析工具不能总是解决Halting问题,但是我认为这确实是一种情况,其中查看继承者的内容implement_methods将证明这是完全有效的,并且这很容易做到。 为什么静态分析工具会拒绝这种有效的(我认为)OOP模式? 要么: 他们甚至不尝试检查继承或 不鼓励在惯用且易读的Python中使用mixins #1显然是不正确,因为如果我问pylint告诉我的一类矿井的继承unittest.TestCase使用 self.assertEqual,(仅定义的东西unittest.TestCase),它并没有抱怨。 mixins是unpythonic还是不鼓励使用?

3
为实现未决但未计划抽象的方法引发NotImplementedError是常规的吗?
我喜欢为NotImplementedError我想实现的任何方法提出一个,但是我还没有去做。我可能已经有了部分实现,但是raise NotImplementedError()由于我还不喜欢它而在它前面加上了它。另一方面,我也喜欢遵守约定,因为这将使其他人更容易维护我的代码,并且约定可能存在是有充分理由的。 但是,NotImplementedError的Python文档指出: 此异常派生自RuntimeError。在用户定义的基类中,抽象方法要求派生类重写该方法时,应引发此异常。 这是比我描述的更为具体的正式用例。提出一个NotImplementedError简单的方法来简单地指出API的这一部分是否还在进行中,这是一种很好的传统样式吗?如果不是,是否有另一种标准化的方式表明这一点?

7
函数编程与带类的OOP相比
最近,我对函数式编程的某些概念感兴趣。我已经使用OOP一段时间了。我可以看到如何在OOP中构建一个相当复杂的应用程序。每个对象都会知道该对象执行的操作。还是父母班上的任何事情都可以。因此,我可以简单地告诉Person().speak()别人说话。 但是如何在函数式编程中做类似的事情?我看到函数是头等舱物品。但是该功能只做一件事。我是否可以简单地使用一个say()浮动的方法,并使用等效的Person()参数来调用它,以便使我知道在说些什么呢? 因此,我可以看到简单的事情,在函数式编程中,我将如何做OOP和对象的比较,从而可以模块化和组织代码库? 作为参考,我对OOP的主要经验是Python,PHP和一些C#。我正在查看的具有功能特性的语言是Scala和Haskell。虽然我倾向于Scala。 基本示例(Python): Animal(object): def say(self, what): print(what) Dog(Animal): def say(self, what): super().say('dog barks: {0}'.format(what)) Cat(Animal): def say(self, what): super().say('cat meows: {0}'.format(what)) dog = Dog() cat = Cat() dog.say('ruff') cat.say('purr')

6
为什么Python在迭代列表时仅复制单个元素?
我只是意识到在Python中,如果有人写 for i in a: i += 1 a实际上,原始列表的元素根本不会受到影响,因为该变量i原来只是中原始元素的一个副本a。 为了修改原始元素, for index, i in enumerate(a): a[index] += 1 将需要。 我真的为这种行为感到惊讶。这似乎很违反直觉,似乎与其他语言不同,并且导致了我的代码错误,而今天我不得不调试了很长时间。 我之前阅读过Python教程。可以肯定的是,我刚才再次检查了这本书,它甚至根本没有提到这种行为。 这种设计背后的原因是什么?难道它会成为许多语言的标准做法,以便本教程相信读者应该自然地获得它吗?以后我应该注意哪些其他语言的迭代行为?
31 python  list  iterator 

5
执行不受信任的代码的最佳实践
我有一个项目,需要允许用户对我的服务器运行任意的,不受信任的python代码(有点像这样)。我是python的新手,我想避免犯任何会给系统带来安全漏洞或其他漏洞的错误。您是否可以提供最佳实践,推荐阅读或其他建议,以使我的服务可用但不可滥用? 到目前为止,这是我考虑过的内容: __builtins__从exec上下文中删除以禁止使用潜在危险的软件包,例如os。用户将只能使用我提供给他们的软件包。 使用线程强制合理的超时。 我想限制可以在exec上下文中分配的内存总量,但是我不确定是否可能。 有一些替代Straight的方法exec,但是我不确定其中哪些方法会有所帮助: 使用ast.NodeVisitor捕获任何尝试访问不安全对象的尝试。但是我应该禁止哪些物品? 搜索输入中的任何双下划线。(比上面的选项不太优雅)。 使用PyPy或类似于沙箱的代码。 注意:我知道至少有一个基于JavaScript的解释器。在我的情况下,这行不通。

4
我应该坚持还是放弃Python来处理并发性?
我有一个10K LOC写在项目的Django用相当便宜的芹菜(RabbitMQ的用于在需要异步和后台作业),并已得出结论,该系统的部分将来自于被改写受益的东西比Django的其它更好的并发。原因包括: 信号处理和可变对象。特别是当一个信号触发另一个信号时,当实例更改或消失时,使用ORM在Django中处理它们可能会令人惊讶。我想使用某种消息传递方法,其中传递的数据在处理程序中不会更改(如果我正确的话,Clojure的写时复制方法看起来不错)。 系统的某些部分不是基于Web的,因此需要更好的支持来同时执行任务。例如,系统读取NFC标签,当读取一个NFC标签时,LED点亮几秒钟(Celery任务),播放声音(其他Celery任务),并查询数据库(其他任务)。这是作为Django管理命令实现的,但是Django及其ORM本质上是同步的并且共享内存是有限的(我们正在考虑增加更多的NFC读取器,我认为Django + Celery方法不再可行,我希望看到更好的消息传递功能)。 与使用诸如Erlang或Clojure这样的语言相比,使用Twisted或Tornado之类的利弊是什么?我对实际的利益和损害感兴趣。 您如何得出结论,系统的某些部分使用另一种语言会更好?您是否遇到性能问题?这些问题有多严重?如果可以更快,那么是否必须更快? 示例1: Django在HTTP请求之外工作: 读取NFC标签。 已查询数据库(可能还有LDAP),并且我们希望在数据可用时执行某些操作(红灯或绿灯,播放声音)。这会使用Django ORM进行阻止,但是只要有Celery工作人员可用,就没有关系。更多工作站可能是个问题。 示例2:使用Django信号进行“消息传递”: 一个post_delete事件被处理,其他的对象可能是因为这个被修改或删除。 最后,应将通知发送给用户。在这里,如果传递给通知处理程序的参数是已删除或将要删除的对象的副本并保证在处理程序中不发生更改,那将是很好的。(当然,可以简单地通过不将ORM管理的对象传递给处理程序来手动完成。)

5
在同一个文件中定义多个类是否被认为是Pythonic?
在第一次使用python时,我发现我最终在同一文件中编写了多个类,这与Java之类的其他语言(每个类使用一个文件)相反。 通常,这些类由1个抽象基类组成,其中1-2个具体实现的用法略有不同。我在下面发布了一个这样的文件: class Logger(object): def __init__(self, path, fileName): self.logFile = open(path + '/' + filename, 'w+') self.logFile.seek(0, 2) def log(self, stringtoLog): self.logFile.write(stringToLog) def __del__(self): self.logFile.close() class TestLogger(Logger): def __init__(self, serialNumber): Logger.__init__('/tests/ModuleName', serialNumber): def readStatusLine(self): self.logFile.seek(0,0) statusLine = self.logFile.readLine() self.logFile.seek(0,2) return StatusLine def modifyStatusLine(self, newStatusLine): self.logFile.seek(0,0) self.logFile.write(newStatusLine) self.logFile.seek(0,2) class GenericLogger(Logger): def …

5
何时在Python中使用字典和元组
想到的特定示例是文件名及其大小的列表。我不能决定列表中的每个项目是否应该是这样的形式{"filename": "blabla", "size": 123},或者只是("blabla", 123)。字典对我来说似乎更合乎逻辑,因为例如访问大小file["size"]比file[1]... 更具解释性,但是我不确定。有什么想法吗?

9
是否只有在动态类型化语言(如Python)中才有可能的设计模式?
我读过一个相关的问题,在动态语言(如Python)中是否有不需要的设计模式?并记得Wikiquote.org上的这句话 动态类型的妙处在于它使您可以表达任何可计算的内容。而类型系统则不是-类型系统通常是可决定的,它们将您限制为一个子集。支持静态类型系统的人说:“很好,足够好;您要编写的所有有趣程序都将作为类型使用。” 但这很荒谬—一旦有了类型系统,您甚至都不知道那里有什么有趣的程序。 ---软件工程电台第140集:Gilad Bracha的Newspeak和可插拔类型 我想知道,是否有有用的设计模式或策略使用引号的表述“不能作为类型工作”?

2
python工厂函数最佳实践
假设我有一个foo.py包含类的文件Foo: class Foo(object): def __init__(self, data): ... 现在,我想添加一个函数,该函数Foo以某种方式从原始源数据创建对象。我应该将其作为Foo中的静态方法还是另一个单独的函数? class Foo(object): def __init__(self, data): ... # option 1: @staticmethod def fromSourceData(sourceData): return Foo(processData(sourceData)) # option 2: def makeFoo(sourceData): return Foo(processData(sourceData)) 我不知道方便用户使用是否更重要: foo1 = foo.makeFoo(sourceData) 还是在方法和类之间保持清晰的耦合更重要: foo1 = foo.Foo.fromSourceData(sourceData)
30 design  python 

6
在Python函数调用中用于未使用的返回参数的样式
是否有任何推荐的/普遍接受的编码样式用于处理以下情况:函数返回一个值的元组,但之后仅使用这些值中的一个(请注意,这主要是我无法更改的库函数的意思–编写包装器这个电话可能有点矫kill过正...)?而不是做 a, b, c = foo() 然后不使用band c,则应首选以下哪个变体(或还有另一个变体?): 变体1(下划线) a, _, _ = foo() (这非常简单明了,但可能会_ = gettext.gettext在许多使用翻译的应用程序中使用) 变式2(虚拟名称) a, unused, unused = foo() (我认为这不是很吸引人,其他名称也是如此dummy) 变体3(索引) a = foo()[0] (对我来说,这些()[0]看起来很不可思议……)

1
我自己开发系统时,应该使用微服务吗?
我正在开始一个新的项目,尽管可能需要一个或两个其他开发人员将现有的应用程序或简单的脚本集成到主项目中,但我几乎将是该项目的唯一开发人员。该项目需要处理小规模的批量和流数据的摄取/处理,以及事件驱动和按需代码执行。框架的某些部分受CPU限制,而某些部分则受I / O限制。大多数数据必须存在于单个计算机上,但是我们能够创建集群并连接虚拟机以增加可用的计算能力。可能会有一个或多个小型Web应用程序依赖于此核心框架提供的服务。主要语言将是适用于几乎所有内容的Python。 我的问题是,考虑到我将自己完成大部分开发工作,我是否应该采用微服务方法来进行此类工作或坚持使用单一应用程序。我的想法是,微服务(使用Nameko)在具有不同执行模型(数据管道,事件启动,按需,Web应用程序等)的框架元素之间提供了自然的分隔,并提供了一种清晰的方式来分配工作负载和跨多个流程的沟通。我担心的是,我可能最终会使用一个Kubernetes集群来管理(我熟悉Docker,但对于Kubernetes来说还很陌生),为了促进系统运行,需要多个服务(rabbitmq,redis等),并可能有很多小的代码块来实际实现我们所需要的所有必要功能 对于只有一个开发人员的项目,微服务是否仍会简化这样的复杂系统的开发和维护?我是否应该考虑使用其他方法/系统/框架,或者减少以这种方式设计系统所涉及的开销?

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.