Questions tagged «python»

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

3
全局请求上下文-反模式?
今天我在和我的一位同事谈论Python Web框架以及我们对它们的印象。我告诉他,我认为Flask具有全局请求的气味很难闻,并且是一种反模式。 该文档说关于请求上下文: 相反,在请求处理期间,存在其他一些规则: 当请求处于活动状态时,上下文本地对象(flask.request和其他对象)指向当前请求。 任何代码都可以随时获取这些对象。 我认为我了解此设计决策背后的想法-使应用程序更简单。这只是一个折衷,就像在Thread Locals的情况下: 是的,使用线程本地化通常不是一个好主意。它们给不基于线程概念的服务器造成麻烦,并使大型应用程序难以维护。但是Flask并不是专门为大型应用程序或异步服务器设计的。Flask希望使其能够轻松快捷地编写传统的Web应用程序。 使用当前请求信息修补全局对象是否是反模式? 我相信是这样,因为从静态代码分析器的角度来看,它是一个全局状态,尽管事实并非如此。作为程序员,如果不仔细阅读文档,我将无法理解其工作原理。这对测试有影响。 将请求作为参数传递给视图不是一个好习惯吗?我认为它更具可读性,明确性且易于调试。并避免全局状态。

5
JVM和Java的WORA与其他高级语言有何不同?
在Java世界中,我们经常谈论JVM,而Java刚发布时,它具有所谓的杀手级功能:“一次编写,在任何地方运行”。 从人们的交谈和书写方式来看,这似乎与Python的工作方式不同。但是我还没有发现我编写的Python代码在另一台机器上可以有不同的工作方式。(尽管我没有写太多的Python。) 那我想念什么呢?JVM与Python解释器有何不同?有没有办法使Python缺乏Java的平台独立性?还是仅仅是文化差异?

3
如何正确处理用于python中的单元测试的全局参数?
我们正在实现许多算法,这些算法通常具有许多共享的,众所周知的和与安全性相关的参数。 当前,我们仅使用一个包含所有参数和两个预定义全局对象的类: class PublicParams(object): p = q = 0 def __init__(self, p, q): self.p = p self.q = q # used for tests publicParams_test = PublicParams(15,7) # Some 2048 bit numbers for example publicParams_secure = PublicParams(128378947298374928374,128378947298374928374) 然后,算法将一个PublicParams对象作为默认为生产性的参数publicParams_secure def AlgoOne(n, publicParams = publicParams_secure): # do stuff with publicParams.p # ... AlgoTwo(x, …

2
仅具有一个实例的Python类:何时创建(单个)类实例以及何时使用该类?
给定一个仅实例化一次的Python类,即该类中只有一个对象。我想知道在什么情况下创建单个类实例而不是直接与该类一起工作才有意义。 有一个类似的问题,但重点不同: 它是关于将全局变量和函数分组为一个类, 它不是特定于Python的。后者意味着它不考虑(在Python中)类也是对象的事实。 更新: 在Python中,我可以对类和对象执行以下操作: class A(object): pass A.some_state_var = True # Then later A.some_state_var = False my_a = A() my_a.some_state_var = True # Then later my_a.some_state_var = False 因此,我看不到在类和该类的实例之间进行选择如何与状态有关(在Python中)。我可以通过两者之一来保持状态。 此外,创建我的类/类实例的动机与执行Singleton要求无关。 另外,创建新的Type并不需要太多。 这样做的动机是将相关的代码和数据进行分组,并为其提供接口。这就是为什么我最初在类图中将其建模为类的原因。仅当涉及到实现时,我才开始怀疑是否要实例化此类。

4
如何在Python中为部分日期建模?像是未知的年份或月的未知日期?
我希望能够捕获诸如Bob was born in 2000和的事实Bill's birthday is May 7th。 在这两个示例中,我们仅知道该人的生日的一部分。在一种情况下,我们只知道年份;在其他情况下,我们知道月份和日期,但不知道年份。 如何捕获此信息? 有关如何工作的一些示例: 想象一下像datetime这样的库,它允许字段中的None代表未知数。我可能有如下代码: date_a = date(2000, 5, None) date_b = date(2000, 6, None) difference = date_b - date_a assert difference.min.days == 1 assert difference.max.days == 60 # Or something close to 60. assert equal(date_a, date_b) == False date_c = date(2000, …
11 python 


3
我需要了解编程语言的内在知识吗?
我是Python的初学者,到目前为止我真的很喜欢。我经常想到的一个问题是,我是否需要了解并学习编程语言的内在知识(例如Python)。您可能知道,Python本身是用C编写的。 所以我的问题是:必须精通一种语言才能熟练或熟练使用该语言。我将此问题与“自然”语言进行比较。我不知道我的母语语法的每一个细节,但我能够用该语言毫无问题地表达自己。这是我说我的语言很流利的时候。那也适用于编程语言吗?

3
跨平台桌面编程:C ++与Python
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 好了,首先,我有作为业余Obj-C / Cocoa和Ruby w / Rails程序员的经验。这些功能很棒,但是它们对于编写跨平台应用程序并没有真正的帮助(希望GNUStep有一天可以足够完整,对于第一个成为多平台的应用程序,但是今天不是今天)。 据我所知,C ++非常强大,但它却是一个庞大,丑陋的庞然大物,需要花费半年甚至更长的时间才能掌握。我还读到,由于内存管理完全是手动的,因此您不仅可以轻松地用脚开枪,还可以用它把整个腿炸掉。显然,这一切都令人生畏。这是正确的吗? Python似乎提供了C ++的大部分功能,并且以速度为代价更容易上手。这个牺牲有多大?它有意义还是可以忽略? 在合理的时间内,哪一个让我编写快速,稳定,高度可靠的应用程序? 另外,将Qt用于您的UI还是为每个平台维护单独的本机前端会更好吗? 编辑:为了更加清晰,我想编写两种类型的应用程序:一种是极其友好和方便的数据库前端,另一种无疑是稍后会出现的3D世界编辑器。

3
是更好的做法是在类中预初始化属性,还是在过程中添加它们?
很抱歉,这是一个绝对如此愚蠢的问题,但是我很好奇目前存在的最佳做法,而且我似乎在Google上找不到很好的答案。 在Python中,我通常使用一个空类作为超级类数据结构容器(有点像JSON文件),并在此过程中添加属性: class DataObj: "Catch-all data object" def __init__(self): pass def processData(inputs): data = DataObj() data.a = 1 data.b = "sym" data.c = [2,5,2,1] 这给了我极大的灵活性,因为容器对象实际上可以存储任何东西。因此,如果出现了新的需求,我将其添加为DataObj对象的另一个属性(我在代码中传递了该属性)。 但是,最近(FP程序员)给我留下了深刻的印象,那就是这是一种糟糕的做法,因为这使得很难阅读代码。必须仔细阅读所有代码,以找出DataObj实际具有的属性。 问题:如何在不牺牲灵活性的情况下重写此代码,以实现更大的可维护性? 我可以采纳函数式编程中的任何想法吗? 我正在寻找最佳实践。 注意:一种想法是使用一个期望遇到的所有属性来预先初始化该类,例如 class DataObj: "Catch-all data object" def __init__(self): data.a = 0 data.b = "" data.c = [] def processData(inputs): data = …



10
Python程序员是否发现空白问题不便?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 许多程序员在初次接触Python时立即被空白的重要性所困扰。我听到过种种不方便的原因,但我从未听过Python程序员的抱怨。 当然,由于我在Java世界中度过了自己的职业生涯,因此我并没有遇到很多Python程序员。 因此,我的问题是那些参与大型Python项目(超过3个月,使用Python作为主要语言)的人:您是否发现空白问题不便且持续令人讨厌?还是一旦进入流程便不是问题? 我不是在问这个问题,因为我赞成或反对Python,或赞成或反对使用空格。我碰巧喜欢Python,但是我从未将它用于任何大型应用。 如果您没有Python经验,请不要猜测。

7
是否有人长期使用Python / Ruby和PHP并仍然偏爱PHP?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 我通常会对捍卫PHP的文章以及所使用的论点着迷。这些类型的文章的作者经常没有提及他们对其他语言的经验。我个人很难想象有人会同时了解Python或Ruby,以及PHP,并且仍然更喜欢PHP。 因此,如果有人适合这个描述,我将很想听听为什么您更喜欢PHP而不是这两种语言。

3
在Python 3.4+中,为什么不使用dict时,为什么我应该在SimpleNamespace上使用namedtuple,它们看起来非常相似
在某一点上,您可能会遇到带有很多参数的函数。有时将一些参数组合成超级参数是有意义的。我经常用字典来做,但是现在我正在寻找更好的做事方法。 我想转身... def do_something(ax, ay, az, bu, bv, c): # Do something ...进入... def do_something(a, b, c): # Do something ... a并b包含其子变量。 一种方法是执行以下操作: A = namedtuple('A', 'x, y, z') a = A(ax, ay, az) B = namedtuple('B', 'u, v') b = B(bu, bv) 但是,这似乎更简单: a = SimpleNamespace(x=ax, y=ay, z=az) b …

1
使用Python的方法解析顺序进行依赖注入-这样不好吗?
我观看了Raymond Hettinger在Pycon上发表的“超级被认为是超级”的演讲,并了解了一些Python的MRO(方法解析顺序),该方法以确定性方式线性化了“父”类。像下面的代码一样,我们可以利用它来发挥优势,进行依赖注入。因此,自然而然地,我现在想使用super所有功能! 在下面的示例中,User该类通过从LoggingService和继承来声明其依赖项UserService。这不是特别特殊。有趣的是,我们可以使用“方法解析顺序”来模拟单元测试期间的依赖关系。下面的代码创建一个MockUserService从继承UserService并提供我们要模拟的方法的实现。在下面的示例中,我们提供的实现validate_credentials。为了MockUserService处理任何呼叫,validate_credentials我们需要先将其UserService放置在MRO中。这通过创建一个包装类各地进行User所谓的MockUser和有它继承User和MockUserService。 现在,当我们执行MockUser.authenticate该操作时,它依次调用方法解析顺序中的super().validate_credentials() MockUserServicebefore UserService,因为它提供了validate_credentials该实现的具体实现。是的-我们已经UserService在单元测试中成功模拟了。考虑到这样UserService做可能会导致一些昂贵的网络或数据库调用-我们刚刚删除了此延迟因素。也没有UserService接触实时/生产数据的风险。 class LoggingService(object): """ Just a contrived logging class for demonstration purposes """ def log_error(self, error): pass class UserService(object): """ Provide a method to authenticate the user by performing some expensive DB or network operation. """ def validate_credentials(self, username, password): print('> UserService::validate_credentials') return username == …

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.