Questions tagged «python»

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


6
您可以在没有class关键字的情况下实现“面向对象”编程吗?
假设我们要提供银行“帐户”的抽象。这是function在Python中使用对象的一种方法: def account(): """Return a dispatch dictionary representing a bank account. >>> a = account() >>> a['deposit'](100) 100 >>> a['withdraw'](90) 10 >>> a['withdraw'](90) 'Insufficient funds' >>> a['balance'] 10 """ def withdraw(amount): if amount > dispatch['balance']: return 'Insufficient funds' dispatch['balance'] -= amount return dispatch['balance'] def deposit(amount): dispatch['balance'] += amount return dispatch['balance'] …


6
将个人Python项目变成可发布的库
我是一名学者,而不是程序员,并且我有多年编写供自己使用的Python程序以支持我的研究的经验。我的最新项目可能对我和其他许多人都有用,并且我正在考虑将其作为开源Python库发布。 但是,从运行中的个人项目到可以被其他人轻松安装和使用的库,似乎有许多障碍需要克服。这个问题是关于我应该开始着手公开发布的第一步。 目前,我只有一个git存储库,其中包含使用该库以及该库本身的代码,并且我将git用作紧急撤消按钮,以防万一发生任何问题。所有这些对于单个用户都可以正常工作,但是如果我要释放它,显然不合适。我要结束的地方是我的库位于单独的存储库中,并且可以由其他人使用来安装pip,并且具有稳定的API。 一旦我想发布它,学习使用setuptools等可能就不那么困难了-我的问题是知道如何工作才能达到这一点。 所以我的问题是,为了开始准备供公众使用的Python库项目,应该采取的第一步步骤是什么?我应该如何重组我的目录结构,git仓库等,以便开始努力公开发布该库? 更一般而言,如果首次尝试使用已知有帮助的资源,那将非常有帮助。指向最佳实践和避免错误的指针等也将非常有帮助。 需要澄清的是:当前的答案是按照“如何使我的Python库成为其他人可以使用的好库?”的方式来解决一个问题。这很有用,但是与我要提出的问题不同。 我目前正处于发布项目的漫长旅程的开始。我的实现的核心工作正常(并且工作得很好),但是我对即将进行的大量工作感到不知所措,并且我正在寻找有关如何进行流程导航的指导。例如: 我的库代码当前已耦合到我自己的使用它的特定于域的代码。它位于子文件夹中,并且共享相同的git存储库。最终,需要将其制作成一个独立的库并放入其自己的存储库中,但是由于我不知道如何做,所以我一直在拖延。(既不是如何在“开发模式”下安装库以使我仍然可以对其进行编辑,也没有如何使两个git仓库保持同步。) 我的文档字符串很简洁,因为我知道最终我将不得不使用Sphinx或其他工具。但是这些工具似乎并不容易学习,因此这成为一个主要的子项目,我一直推迟进行。 在某些时候,我需要学习使用setuptools或其他工具来打包它并跟踪依赖项,这非常复杂。我不确定现在是否需要这样做,并且该文档对于新用户来说绝对是个迷宫,因此我决定以后再做。 我从来不需要进行系统的测试,但是我肯定会对此项目进行测试,因此,我必须(i)了解足够的测试知识,以了解哪种方法适合我的项目;(ii)了解哪些工具可用于我选择的方法;(iii)学习使用我选择的工具;(iv)为我的项目实施测试套件等。这本身就是一个项目。 我可能还有其他事情要做。例如,jonrsharpe发布了一个有用的链接,其中提到了git-flow,tox,TravisCI,virtualenv和CookieCutter,我以前从未听说过。(该帖子来自2013年,所以我还必须做一些工作来找出仍有多少钱。) 当您将所有这些放在一起时,这是一项巨大的工作,但是我敢肯定,如果我坚持不懈地完成工作,那么我就可以完成所有工作,而且我不着急。我的问题是知道如何将其分解为可管理的步骤,一次可以完成。 换句话说,我要问的是我现在可以采取哪些最重要的具体步骤,以便最终获得可发布的产品。如果我有空闲的周末,我应该关注哪些事情?哪一个(如果有的话)可以与其他人孤立地完成,这样我至少可以完成一个步骤而无需做整个事情?学习这些东西最有效的方法是什么,这样我仍然有时间专注于项目本身?(请记住,所有这些本质上都是一项业余项目,而不是我的工作。)我是否真的不需要做任何事情,从而为自己节省了大量时间和精力? 非常感谢所有答案,但是我特别欢迎关注这些项目管理方面的答案,尤其是对现代Python开发的引用。

1
如何在生产代码中处理函数名称错误?
我最近在GitHub上遇到了一个Python库。该库很棒,但是在函数名称中包含一个明显的错字。让我们称它为dummy_fuction()应该dummy_function()。此功能肯定是“狂野的”,最有可能在嵌入式系统中使用。 我想到的第一件事是添加具有正确名称的函数的第二个版本,并为下一版本的第一个版本添加弃用警告。 三个问题: 上面的方法会产生意想不到的后果吗? 是否有解决此类问题的标准方法? 弃用警告应保留多长时间?

3
为什么在Python中没有显式的访问修饰符:
如果“显式优于隐式”,为什么Python中没有显式访问修饰符:Public,Protected,Private等? 我知道想法是程序员应该通过提示知道该怎么做-无需使用“蛮力”。但是,IMO的“封装”或“信息隐藏”不仅是要使人们远离,而且还是组织和结构的问题:您的开发层应该具有自定义的,明确界定的范围和边界,就像物理系统一样。 有人可以在这里为我提供可靠的解释,为什么在Python中这种隐含的访问限制不是隐式的,而是隐式的? 编辑:到目前为止,我已经看到了3个建议的答案,并且我意识到我的问题有两个部分: 例如,为什么没有关键字 private def myFunc(): dostuff.... 而不是国际海事组织的丑陋和难以键入的下划线。但这不是重点。 更重要的是: 为什么这些访问修饰符仅是“建议”或提示而没有执行。以后很难改变吗?将“受保护”更改为“公共”非常简单-如果您的继承链复杂,设计困难,则设计很糟糕-应该完善设计,而不要依赖于易于编写的语言功能结构不良的代码。 强制使用访问修饰符后,您的代码将自动划分开-您知道某些段不在范围内,因此除非有必要,否则不必处理它们。而且,如果您的设计不好,并且发现自己不断将事物移入和移出不同的范围,那么该语言可以帮助您清理行为。 尽管我很喜欢Python,但我发现第二点是一个严重的缺陷。我还没有看到一个很好的答案。

3
为什么C ++模板错误消息如此恐怖?
C ++模板臭名昭著,因为它会生成冗长且无法读取的错误消息。我对C ++中的模板错误消息为何如此糟糕有一个大致的了解。本质上,问题在于直到编译器遇到模板中某种类型不支持的语法时才触发错误。例如: template <class T> void dosomething(T& x) { x += 5; } 如果T不支持该+=运算符,则编译器将生成一条错误消息。而且,如果这种情况发生在某处库的深处,则错误消息可能长达数千行。 但是C ++模板本质上只是一种编译时鸭子类型的机制。C ++模板错误从概念上讲非常类似于动态语言(例如Python)中可能发生的运行时类型错误。例如,考虑以下Python代码: def dosomething(x): x.foo() 在这里,如果x没有foo()方法,Python解释器将引发异常,并显示堆栈跟踪以及非常清楚的错误消息,指出问题所在。即使直到解释器深入某个库函数内部才触发错误,运行时错误消息也仍然不像典型的C ++编译器所发出的不可读呕吐那样糟糕。那么,为什么C ++编译器无法更清楚地指出出了什么问题?为什么某些C ++模板错误消息从字面上导致我的控制台窗口滚动5秒钟以上?

3
如何有效地存储大时间序列数据?
我需要存储并能够查询一些非常大的时间序列数据。 数据的属性如下: 系列数:约12.000(1.2万) 全球数据点数量:每月约5000亿(五亿) 混合值类型:大多数数据点为浮点值,其余为字符串 采样周期:系列之间以及系列内的变量 时间戳:毫秒精度 数据保留期:数年,无衰减或下采样 数据存档需要近乎实时地构建,但是可以接受合理的延迟(〜1小时) 如果需要,可以重建过去的数据,但是成本很高 有时(但很少),需要更新一些过去的数据 预想查询的属性: 针对数据的大多数查询将是基于时间戳的查询;从一天到几个月/年不等。90%以上将是对最新数据的查询 其他需求: 解决方案必须像免费啤酒一样免费,最好是开源的 我最初的想法是将带有HDF5文件的 PyTables / Pandas 用作存储后端,而不是SQL数据库。 问题: 假设PyTables / Pandas是“最佳”途径,将数据拆分成多个HDF文件,每个文件跨越一个给定的时间,还是将所有内容都放入一个单独的文件中,然后再变得庞大会更好吗? 我应该选择固定格式还是表格格式?对我来说,如果我每月保留一个HDF文件,则固定格式看起来还可以,因为这样一来,整个系列就可以放入RAM中,并且可以在内存中切片而不需要表格式索引。我对么 ? 如果那不是最好的方法,那么我应该如何构造该数据存储或应该考虑哪些技术?我不是第一个处理存储大量时间序列数据的人,解决此难题的一般方法是什么? 我考虑过的其他方法: 数组数据库:它们非常适合具有恒定采样周期的时间序列,因为您只需要存储数组的开始和结束时间以及采样周期,然后只需要数组本身中的值和索引即可。但是,由于序列本身具有可变的采样周期,因此我需要保持更紧密的timestamp-> value关系,我认为这不太适合数组DBMS。 标准SQL数据库,其中带有时间戳,paramID,值作为列,但根据其性质,它们为任何查询都请求大量磁盘I / O

5
使用Python进行编程是否比使用C,C ++或Java更快?[关闭]
程序员之间普遍认为,语言越动态和松散地键入,它将使程序员的工作效率越高。Guido van Rossum于1998年撰写了有关使用python进行编程提高生产力的文章,并在网上搜索时,我仍然看到人们引用了这个确切的说法: 从语法上讲,Python代码看起来像可执行的伪代码。使用Python进行程序开发比使用C / C ++快5-10倍,比使用Java快3-5倍。在许多情况下,可以使用Python编写应用程序的原型,而无需编写任何C / C ++ / Java代码。通常,原型具有足够的功能,并且性能足以作为最终产品交付,从而节省了可观的开发时间。在其他时候,原型可以部分或全部转换为C ++或Java-Python的面向对象特性使转换成为一个简单的过程。 这个问题是否经过科学评估?如果不适合python,那么也许适合同级脚本语言(如ruby,perl或php)? 我不是在寻找合理化,类比或解释的理由,否则可能很难回答,除非研究人员或专家的意见花了一些时间来研究这个问题。 我最初是在skeptics.SE上提出这个问题的,有人建议我也在这里提出这个问题。

2
为什么在Python中不推荐使用通用换行模式?
我只是注意到文件操作的通用换行符功能似乎即将退出。 为Python 3.5的文档open的mode参数表明它弃用: 'U' 通用换行模式(不建议使用) 在open记录mode参数用法时,至少追溯到Python 3.2 包含类似的“仅向后兼容”警告: 'U' 通用换行模式(为了向后兼容;不应在新代码中使用) 即使在Python 2.7中,的文档中也有类似的警告io.open。 这是什么原因?
26 python  io  deprecation 

4
如何为我的Django网站开发前端(UI)
我正在学习Django和Web开发的新手。如果您觉得这个问题太蠢了,请原谅。 因此,我正在使用Django创建一个Facebook应用程序,并将其托管在Google App Engine中。该项目将专注于阅读任何网站的RSS / Atom提要(这就是我现在能说的)。 我确定足以处理RSS / Atom文件,但是我担心前端(用户界面)部分-“设计部分”。我不知道HTML / CSS / JavaScript(我可以处理简单的HTML东西,但这不会导致任何设计问题)。 首先,我考虑过使用Dreamweaver之类的工具或任何等效软件来设计UI,但是当我真正开始学习django并开始使用它时,这似乎是“不可能”的事情。 所以, 我应该如何设计网站的UI部分?我不能使用Dreamweaver之类的工具吗? 如果否,那么像我这样不懂JavaScript / CSS的人的最佳方法是什么 如果是,那么Dreamweaver的最佳开源替代方案是什么? Google App Engine可以处理所有这些吗? 与Django打交道的人如何编辑这些模板页面。Django提到它将逻辑(视图)和设计(模板)部分分开,以便公司中的不同部门可以分别处理。但是,考虑到Django的HTML页面充满了与HTML(设计)无关的“标签”,UI用户如何处理它?

5
如何使两种不同的程序与两种不同的语言交互?
我不知道这是否太广泛了,但是我还是一个年轻的程序员,还在上大学,那是我的大三。我觉得我对各种语言都有很好的掌握,并且有很好的基础。但是我绊脚想想如果例如,如果我尝试创建一个程序并说我用python编写了一个部件,只是因为它很容易并且可以完成工作,但是该程序需要从我编写的另一个程序中获取输出在C中,由于速度原因,我使用C。我不确定如何使两种不同的程序和语言相互交互以创建一个整体的程序。我在想肯定要写一个文件,但是如果python和C程序都访问一个文件,那我该怎么想锁了。 多数情况下,我是通过将文件导入程序来完成此操作的,但在那种情况下,它们是相同的语言,因此我只需要使用导入功能即可,但是在两种语言/程序交互以创建一个内聚输出时,我遇到了麻烦。 我当时在考虑这个问题,因为我想潜入创建一些基本的Web应用程序只是为了学习,但我不知道如何说javascript文件与我用python编写的内容交互,反之亦然。 我觉得我在这里缺少一些真正容易的事情,只是不了解。抱歉,如果这个问题太笼统,但是我在网上找不到一个明确的答案,我正试图浏览一个开放源Web应用程序,但无法真正抓住它的答案,如果这个问题看起来很愚蠢,请再次宽恕我这是一个问我喜欢在stackexchange上阅读的好地方。 感谢您的答复。
26 python  c 

2
Python(和其他动态语言)的哪些语义特征导致其缓慢?
我不太了解Python。我试图更精确地了解动态语言(如Python,Lua,Scheme,Perl,Ruby等)的确切功能正迫使他们的实现变慢。 作为一个例子,Lua 5.3的可继承机制会直观地使Lua变得很慢,但实际上有传言说Lua相当快(并且比Python快)。 另外,我有直觉(可能是错误的),由于目前的处理器内存大于原始计算慢得多(与高速缓存未命中的存储器访问需要的同时,数以百计的算术运算),动态类型检查(点菜if (value->type != INTEGER_TAG) return;的C语言)可以运行得很快。 当然,随着翻译程序的快速运行,整个程序分析(例如Stalin Scheme实现的工作)可以使动态语言实现成为可能,但是让我们假设我没有时间先设计整个程序分析器。 (我在MELT监视器中设计了一种动态语言,其中有些会翻译成C语言)

3
python业务逻辑应放在Django的确切位置
我刚刚开始学习Django / Python / Web开发。这个问题已经困扰我一段时间了。 我正在Django中创建带有多个模板的应用程序。我有一个views.py,它基本上只是呈现对相应模板的响应,并且我有一个我在其中构造数据库的model.py。在我的一个模板中,我需要上传一个图像(我能做到),并且我需要运行一个基于上传图像特性的逻辑(尚未完成)。这种逻辑涉及许多繁重的计算。执行计算后,逻辑应将一些已处理的信息(坐标)返回到模板。 我已经能够在一个独立的python桌面应用程序中成功地完成所有这些操作,一个又一个地调用python文件。但是,由于我现在想使它成为Web应用程序,所以我开始使用Django框架。 我已经做了很多搜索,但仍然无法弄清楚应将包含所有逻辑的Python文件放在哪里。我是否应该有另一个基于类的文件(logic.py),并从中调用它view.py?我在Google上搜索后发现,许多开发人员将其业务逻辑放在Django的models.py中。但是,我认为从直觉上来说是不正确的,因为模型应该专门与后端进行通信。任何帮助将不胜感激。

2
Python运行时实际上是如何工作的?
我在理解a的概念时遇到了一些问题runtime library,尤其是Python 的概念。所以我写了一些hello world python程序,打算执行它,所以我写了python ./hello_world.py。 在我按下Enter键和在CPU上执行python代码所生成的机器代码之间,要执行什么步骤?以及这与Python运行时系统和/或库有什么关系?
26 python  runtime 

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.