Questions tagged «python»

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

1
Python随机混洗如何工作?
在Python中如何进行随机混洗? 我问,因为它工作非常快。当我尝试编写shuffle时,它对10 ^ 6元素的工作时间为1分钟,但是Python shuffle可以在8秒钟内完成吗?
11 python  random 

4
好的代码风格可在任何地方引入数据检查?
我有一个足够大的项目,我再也无法保持每个方面的头脑。我正在处理其中的许多类和函数,并且正在传递数据。 随着时间的流逝,我注意到我一直在出错,因为我忘记了将数据传递给不同的函数时数据必须具有的精确格式(例如,一个函数接受并输出一个字符串数组,另一个函数是我后来写的,接受保留在字典等中的字符串,因此我必须将正在使用的字符串从数组中的字符串转换为字典中的字符串)。 为了避免总是要弄清楚什么地方断了,我开始将每个函数和类都视为“孤立实体”,因为它不能依赖外部代码为其提供正确的输入,而必须自己执行输入检查(或,在某些情况下,如果数据格式错误,请重铸数据。 这大大减少了我花费在确保传递的数据“适合”每个函数上的时间,因为当某些输入不正确(有时甚至纠正)时,类和函数本身会警告我,而我不会必须与调试器一起遍历整个代码,以找出问题的根源。 另一方面,这也增加了整体代码。 我的问题是,此代码样式是否适合解决此问题? 当然,最好的解决方案是完全重构项目,并确保数据具有所有功能的统一结构-但是由于该项目不断增长,因此我最终将花费更多的时间并担心干净的代码,而不是实际添加新内容。 (仅供参考:我仍然是一个初学者,因此,如果这个问题太天真,请原谅;我的项目是使用Python。)

3
确保不意外使用不安全的代码
函数f()将eval()我创建并存储在local_file运行程序的计算机上的数据使用(或存在危险): import local_file def f(str_to_eval): # code.... # .... eval(str_to_eval) # .... # .... return None a = f(local_file.some_str) f() 安全运行,因为我提供的字符串是我自己的。 但是,如果我决定将其用于不安全的事物(例如用户输入),则可能会发生严重错误。另外,如果local_file停止在本地,则将创建漏洞,因为我需要信任也提供该文件的计算机。 如何确保我永远不会“忘记”该功能使用不安全(除非满足特定条件)? 注意:eval()很危险,通常可以用安全的东西代替。

2
Python的继承是“ is-a”继承样式还是组合样式?
考虑到Python允许多重继承,Python中的惯用继承是什么样的? 在具有单一继承的语言(例如Java)中,当您可以说一个对象是另一个对象的“是”并且想要在对象之间共享代码(从父对象到子对象)时,将使用继承。例如,您可以说这Dog是一个Animal: public class Animal {...} public class Dog extends Animal {...} 但是由于Python支持多重继承,我们可以通过将许多其他对象组合在一起来创建对象。考虑下面的示例: class UserService(object): def validate_credentials(self, username, password): # validate the user credentials are correct pass class LoggingService(object): def log_error(self, error): # log an error pass class User(UserService, LoggingService): def __init__(self, username, password): self.username = username self.password = password …

1
什么时候应该在Python中继承异常?
在我的代码中,大约有七个地方会引发异常。所有这些异常的处理方式相同:将错误输出到日志文件,将软件状态恢复为默认状态并退出。 在代码审查期间,我非常重视的高级工程师说,我应该将所有这些异常归为一类。他的论点是,将来我们可能希望以不同的方式处理异常,这将更加容易。 我的观点是当前它只会使我们的代码混乱,并且由于我们不知道我们是否会以不同的方式处理异常,因此我们应该将代码保持简洁,并且如果时间到了,那么我们应该将其子类型化。 我想听听每种情况的论点。

4
为什么python生成器和函数共享“ def”关键字?
考虑以下: def some_function(): return 1 def some_generator(): yield 1 在上面的代码中,some_function是一个函数,some_generator而是一个生成器。他们看起来很相似。 我在阅读代码时遇到的问题是,我需要在“函数”的每一行中进行扫描以寻找yield关键字,然后才能确定它实际上是函数还是生成器! 在我看来,为生成器使用其他关键字会更有意义,例如: gen some_generator(): yield 1 def对生成器和函数使用关键字有什么好处?为什么未将新关键字引入单独的函数和生成器?

3
如何在setup.py中处理私有依赖关系链接
在工作中,我们使用私有pypi服务器。将此pypi服务器指定为依赖项链接: ... from setuptools import setup config = ConfigParser.ConfigParser() rc = os.path.join(os.path.expanduser('~'), '.pypirc') config.read(rc) dependency_links = [ 'https://{}:{}@<private_url>'.format( config.get('dc', 'username'), config.get('dc', 'password'))] setup( dependency_links=dependency_links, ...) 在我们大多数情况下,这都可以正常工作。但是,前段时间我们不得不在客户端服务器上安装软件包。为此,我们必须先复制有效副本,.pypirc然后才能安装任何软件包。 上面的代码也感觉像是一个肮脏的hack。 在不使用硬编码凭据的情况下指定安全的依赖关系链接的正确方法是什么?
10 python 

5
是否存在技术限制或语言功能阻止我的Python脚本像等效的C ++程序一样快?
我是Python的长期用户。几年前,我开始学习C ++,以了解它在速度方面可以提供什么。在这段时间里,我将继续使用Python作为原型制作工具。看来,这是一个很好的系统:使用Python进行敏捷开发,在C ++中快速执行。 最近,我越来越多地使用Python,并学习如何避免早年使用该语言时很快使用的所有陷阱和反模式。据我了解,使用某些功能(列表理解,枚举等)可以提高性能。 但是,是否存在技术限制或语言功能使我的Python脚本无法与同等C ++程序一样快?

3
如何通过网络同步时钟以进行游戏开发?
我正在写一个具有很多基于时间的方面的游戏。当网络停滞且数据包未通过时(以及接收和不接收数据包之间的时间),我用时间来帮助估计玩家的位置。从某种意义上说,这是一种吃豆子型游戏,玩家可以选择一个方向并且不能停止移动,因此该系统才有意义(或者至少我认为可以)。 所以我有两个问题:1)由于网络存在延迟,我如何在开始时同步游戏的时钟。2)可以不同步它们,只是假设它们是相同的(我的代码与时区无关)吗?这不是一个超级竞赛的游戏,人们会改变时钟以作弊,但仍然如此。 该游戏正在使用Java和Python进行编程(作为项目进行并行开发)

1
使用Python进行鸭子输入,数据验证和断言编程
关于鸭子打字: 通过惯用性地不测试方法和函数体中的自变量类型,依靠文档,清晰的代码和测试来确保正确使用,可以帮助进行鸭子键入。 关于论证验证(EAFP:比宽恕更容易获得宽恕)。来自这里的改编示例: ...被认为是更pythonic的: def my_method(self, key): try: value = self.a_dict[member] except TypeError: # do something else 这意味着使用您的代码的其他任何人都不必使用真正的字典或子类-他们可以使用实现映射接口的任何对象。 不幸的是,实际上并不是那么简单。如果上述示例中的member可能是整数怎么办?整数是不可变的-因此将它们用作字典键是完全合理的。但是,它们也用于索引序列类型对象。如果member恰好是整数,则示例二可以让列表,字符串以及字典通过。 关于断言编程: 断言是检查程序内部状态是否符合程序员期望的一种系统方法,目的是捕获错误。特别是,它们非常适合捕获编写代码时做出的错误假设,或捕获其他程序员滥用接口的情况。此外,通过使程序员的假设显而易见,它们可以在一定程度上充当内联文档。(“显式优于隐式。”) 提到的概念有时会发生冲突,因此在选择是否完全不进行任何数据验证,进行强力验证或使用断言时,我会依靠以下因素: 强力验证。通过强力验证,我的意思是引发自定义Exception(ApiError例如)。如果我的函数/方法是公共API的一部分,则最好验证参数以显示有关意外类型的良好错误消息。通过检查类型,我并不是指仅使用isinstance,而是通过的对象是否支持所需的接口(鸭子输入)。当我记录API并指定期望的类型并且用户可能想以意外方式使用我的函数时,在检查这些假设时,我会感到更加安全。我通常使用isinstance,如果以后要支持其他类型或鸭子,则可以更改验证逻辑。 断言编程。如果我的代码是新的,我会使用很多断言。您对此有何建议?以后是否从代码中删除断言? 如果我的函数/方法不是API的一部分,而是将其某些参数传递给我未编写,研究或测试的其他代码,则我会根据被调用的接口执行很多断言。我的逻辑背后-最好在我的代码中失败,然后在堆栈跟踪中加深10个级别,出现难以理解的错误,这迫使进行大量调试,然后无论如何都将断言添加到我的代码中。 断言,关于何时使用或不使用类型/值验证的评论和建议?很抱歉,问题不是最好的表述。 例如,考虑以下函数,其中Customer是SQLAlchemy声明性模型: def add_customer(self, customer): """Save new customer into the database. @param customer: Customer instance, whose id is None @return: merged into global session customer …

3
带有Queue和ZeroMQ IPC的Python多处理
我正在忙着使用ZeroMQ编写Python应用程序,并实现ZGuide中描述的Majordomo模式的变体。 我有一个经纪人,作为一组工人和客户之间的中介。我想对传入的每个请求进行大量日志记录,但是我不希望经纪人浪费时间这样做。代理应将该日志记录请求传递给其他对象。 我想到了两种方法: 创建仅用于日志记录的工作程序并使用ZeroMQ IPC传输 与队列一起使用多处理 我不确定哪一个更好或更快速。第一个选项确实允许我使用我已经用于普通工作程序的当前工作程序基类,但是第二个选项似乎可以更快地实现。 我想就以上内容或其他解决方案提出建议或意见。

11
我必须学习html和javascript才能创建Web应用程序吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我是一位经验丰富的Java程序员,并且我想创建一个需要动态页面,图形等的复杂Web应用程序(以SO为例)。创建此类应用程序是否需要学习javascript / html? 并不是我不想学习另一种语言(我之前已经做过),但是javascript环境上的技术似乎变化如此之快,以致于当您完成学习一个框架时它已经过时了。我已经检查了许多用于Web开发的java框架(spring,play),但没有深入探讨。那么可以在不学习html / javascript的情况下使用这些框架(或我可能不知道的其他可能的Java框架)吗?我也有一些python经验。因此,如果我可以用python做该应用程序,那也是一种选择。


1
一个人可以编辑一个内置的Python模块吗?
我目前正在学习Python,并且在本书中谈到使用数学库。我浏览了Python网站,发现该库有点稀缺,正在编写一些更有用的函数。例如,我继续写了一个函数来获取系数并返回方程的根。本质上是二次公式函数。我想知道是否可以将其添加到python Math库中。如果不是,如何保存它,以便可以通过调用它在其他编写的Python程序中使用该函数?

1
如何重构一个Python“神类”?
问题 我正在一个Python项目中,该项目的主类有点“ God Object ”。有这么受诅咒的多属性和方法! 我想重构班级。 至今… 第一步,我想做一些相对简单的事情。但是当我尝试最直接的方法时,它破坏了一些测试和现有示例。 基本上,该类具有大量的属性列表,但是我可以清楚地查看它们,并认为:“这5个属性是相关的……这8个属性也都是相关的……剩下的就是这些。” getattr 我基本上只是想将相关属性分组为类似dict的帮助器类。我有种__getattr__理想的工作选择。因此,我将属性移到了一个单独的类,并且确实可以__getattr__很好地发挥其魔力…… 一开始。 但是后来我尝试运行其中一个示例。示例子类尝试直接设置这些属性之一(在类级别)。但是由于该属性不再在父类中“物理定位”,所以我收到一个错误消息,指出该属性不存在。 @属性 然后,我阅读了有关@property装饰器的信息。但是后来我也读到,self.x = blah当x父类的属性是子类时,它会给想要做的子类带来问题。 期望的 self.whatever即使父类的whatever属性不在类(或实例)本身的“实体位置” ,也要让所有客户端代码继续使用。 将相关属性分组到类似dict的容器中。 减少主类中代码的极端噪音。 例如,我不只是想更改此内容: larry = 2 curly = 'abcd' moe = self.doh() 变成这个: larry = something_else('larry') curly = something_else('curly') moe = yet_another_thing.moe() …因为那仍然很吵。尽管这成功地将简单的属性赋予可以管理数据的属性,但是原始属性具有3个变量,而经过调整的版本仍具有3个变量。 但是,我可以这样: stooges = Stooges() 如果查找self.larry失败,将检查stooges并查看是否larry存在。(但是,如果子类尝试larry = 'blah'在类级别执行此操作,那么它也必须起作用。) …

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.