Questions tagged «python»

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

9
为什么人们会犹豫使用Python 3?
Python 3于2008年12月发布。从那时起已经过去了很多时间,但是直到今天,许多开发人员仍在犹豫使用Python3。甚至流行的框架(如Django)仍不兼容Python 3,但仍依赖于Python 2。 当然,Python 3与Python 2有一些不兼容,有些人需要依靠向后兼容。但是,对于大多数项目来说,Python 3的存在时间是否已经足够长,以至于大多数项目都无法切换或开始使用Python 3? 有两个竞争版本有很多缺点。需要保持两个分支,学习者的困惑等等。那么,为什么在整个Python社区中对于切换到Python 3如此犹豫?

23
编写科学代码时干净编程
我不是真的写大型项目。我不是在维护庞大的数据库,也不是在处理数百万行代码。 我的代码主要是“脚本”类型的东西-测试数学功能或模拟某些东西的东西-“科学编程”。到目前为止,我从事的最长程序是几百行代码,而我从事的大多数程序都在150左右。 我的代码也很烂。前几天,当我试图找到我之前写的一个文件时,我意识到了这一点,但是我可能改写了,并且我没有使用版本控制,这可能使大量的您对我的愚蠢感到痛苦。 我的代码风格令人费解,并填充了过时的注释,这些注释指出了执行某项操作的替代方法或复制了几行代码。尽管变量名总是以非常好的描述性开始,但是当我按照某人想要测试的新内容进行添加或更改时,代码却被覆盖在顶部并被覆盖,因为我觉得这件事应该立即进行测试。有一个框架,我开始使用糟糕的变量名,并且文件进入了pot。 在我现在正在从事的项目中,我正处在所有这些阶段都重新吸引我的阶段。但是问题是(除了使用版本控制,以及为每个新迭代创建一个新文件并将其全部记录在某个地方的文本文件中,这可能会极大地改善这种情况)我真的不知道如何进行改进我实际的编码风格。 编写较小的代码是否需要单元测试?OOP怎么样?相对于处理较大的项目,什么样的方法适合在进行“科学编程”时快速编写优质,清晰的代码? 我之所以问这些问题,是因为编程本身通常并不复杂。它更多地是关于我正在通过编程测试或研究的数学或科学。例如,当两个变量和一个函数可能需要处理时,是否需要一个类?(考虑到一般情况下,程序的速度也应优先考虑更快的情况-当您运行25,000,000+个仿真时间步长时,您一定会希望它是这样。) 也许范围太广了,如果是的话,我对此表示歉意,但是从编程书籍的角度来看,它们似乎经常在大型项目中得到解决。我的代码不需要 OOP,而且已经很短了,所以它不像“哦,但是如果这样做的话,文件将减少一千行!” 我想知道如何在这些较小,更快的项目上“重新开始”并进行干净的编程。 我很乐意提供更多具体细节,但是我认为建议越笼统,就越有用。我正在用Python 3编程。 有人建议重复。让我明确地说,我并不是在谈论完全忽略标准编程标准。显然,存在这些标准是有原因的。但是,另一方面,如果可以完成一些标准的工作,写出说OOP的代码真的有意义吗?程序? 有例外。此外,除了简单的标准外,可能还有科学编程的标准。我也在问那些。这与编写科学代码时是否应忽略常规编码标准无关,而与编写干净的科学代码有关! 更新资料 只是以为我会添加“不超过一个星期以后”的更新。您的所有建议都非常有帮助。我现在使用版本控制-git,其中git kraken用于图形界面。它非常易于使用,并且彻底清理了我的文件-不再需要保留旧文件,也不再需要旧版本的代码“以防万一”。 我还安装了pylint并在所有代码上运行了它。最初,一个文件的分数为负。我什至不知道那怎么可能。我的主文件开始于〜1.83 / 10,现在为〜9.1 / 10。现在,所有代码都非常符合标准。我还用自己的眼睛跑过去,更新了已经消失的变量名,嗯,很糟糕,正在寻找要重构的部分。 特别是,我在这个网站上最近问了一个有关重构我的主要功能的问题,它现在更加整洁和短了很多:它不再是一个冗长,肿的if / else填充功能,现在不到一半的大小,更容易弄清楚发生了什么。 我的下一步是实施各种“单元测试”。我的意思是一个可以在主文件上运行的文件,该文件使用assert语句和try / excepts来查看其中的所有功能,这可能不是最好的方法,并且会导致重复的代码很多,但我会继续阅读并尝试找出如何做得更好。 我还对我已经编写的文档进行了重大更新,并向github存储库添加了补充文件,例如excel电子表格,文档和相关论文。现在看起来有点像一个真正的编程项目。 所以...我想这就是要说的:谢谢。

24
Python的缺点是什么?[关闭]
如今,Python似乎风行一时,而且并非不值得-因为它确实是一种语言,几乎有人喜欢用它来解决新问题。但是,正如一个智者曾经说过的(称他为智者,仅是因为我不知道是谁说的;不知道他是否真的是那个智者),真正懂一门语言的人不仅会知道它的语言,语法,设计等优点,但也有缺点。没有一种语言是完美的,有些只是比其他更好。 因此,您认为Python的客观缺点是什么。 注意:我不是在这里要求进行语言比较(即C#比Python更好,因为... yadda yadda yadda)-客观(某种程度上)认为哪些语言功能设计不当,是否,可能是什么?一些您在其中缺少的东西,依此类推。如果必须使用另一种语言作为比较,而仅仅是为了说明一个要点,否则很难对此进行详细说明(即,为了易于理解)

8
“导入模块”与“从模块导入功能”
我一直在使用这种方法: from sys import argv 并argv仅使用argv。但是使用此约定: import sys 并通过使用argv sys.argv 第二种方法使代码自成体系,并且我(确实)坚持执行。但是我之所以偏爱第一种方法,是因为它速度很快,因为我们仅导入所需的功能,而不是导入整个模块(该模块包含更多无用的功能,而python将浪费这些时间来导入它们)。请注意,我只需要argv,而sys中的所有其他功能对我来说都是无用的。 所以我的问题是。第一种方法真的可以使脚本快速运行吗?哪种方法最合适?为什么?
143 python 

1
模块还是包装?
每当我做什么时,from 'x' import 'y'我都想知道哪个模块被认为是“模块”,哪个模块被认为是“包装”,为什么它又不是?
140 python  packages  modules 

2
Python文件命名约定?
我已经看到了PEP-8的这一部分https://www.python.org/dev/peps/pep-0008/#package-and-module-names 我不清楚这是否指向模块/类/包的文件名。 如果我每个都有一个示例,文件名是否应该全部使用小写并带有下划线?或者是其他东西?

15
为需要重复两次的函数编写函数始终是最佳实践吗?
我自己,当我需要做两次以上的事情时,我迫不及待地想编写一个函数。但是,当涉及到仅出现两次的事情时,就会有些棘手。 对于需要两行以上的代码,我将编写一个函数。但是当面对这样的事情时: print "Hi, Tom" print "Hi, Mary" 我很犹豫地写: def greeting(name): print "Hi, " + name greeting('Tom') greeting('Mary') 第二个似乎太多了,不是吗? 但是,如果我们有: for name in vip_list: print name for name in guest_list: print name 这是替代方法: def print_name(name_list): for name in name_list: print name print_name(vip_list) print_name(guest_list) 事情变得棘手,不是吗?现在很难决定。 您对此有何看法?

3
为什么用GIL编写Python?
全局解释器锁(GIL)似乎经常被引用为Python中线程之类的操作比较棘手的主要原因-这就提出了一个问题:“为什么首先要这样做?” 不是程序员,我不知道为什么会这样-放入GIL的逻辑是什么?

10
为什么将Python用于高性能/科学计算(而不是Ruby)?
PyCon 2011演讲中有一段话说: 至少在我们的商店(阿贡国家实验室)中,我们有三种公认的科学计算语言。按照这种顺序,它们是C / C ++,所有方言的Fortran和Python。您会注意到绝对,完全缺少Ruby,Perl,Java。 它是在更通用的高性能计算环境中。报价仅来自一家商店,但另一个有关HPC语言的问题也将Python列为要学习的语言(而不是Ruby)。 现在,我可以理解在该问题空间中正在使用C / C ++和Fortran(而未使用Perl / Java )。但是令我惊讶的是,鉴于HPC在Python和Ruby中的使用非常相似,因此它们之间会有很大的不同。(注意-我是Python的粉丝,但对 Ruby 没有任何帮助)。 有没有一些具体的为什么一种语言起飞的原因吗?关于可用的库吗?一些特定的语言功能?社区?还是仅仅是历史上的偶然性,它本来可以反过来?


2
Python中的相对导入有什么问题?
我最近升级了流行的Python样式检查器pylint的版本。 它贯穿了我的所有代码,指出了在同一软件包中导入模块的位置,而没有指定完整的软件包路径。 新的错误消息是W0403。 W0403:相对导入%r,应为%r 当检测到相对于软件包目录的导入时使用。 例 例如,如果我的软件包的结构如下: /cake /__init__.py /icing.py /sponge.py /drink 然后在海绵包装中写下: import icing 代替 import cake.icing 我会收到此错误。 虽然我知道并非所有的Pylint消息都具有同等重要的地位,并且我不害怕忽略它们,但我不理解为什么这种做法被认为是一个糟糕的主意。 我希望有人可以解释这些陷阱,因此我可以改善自己的编码风格,而不是(按照我目前的计划)关闭此表面上虚假的警告。

5
为什么%s在连接方面比+好?
我知道我们应该使用%s连接字符串而不是+Python。 我可以执行以下任何一项操作: hello = "hello" world = "world" print hello + " " + world print "%s %s" % (hello, world) print "{} {}".format(hello, world) print ' '.join([hello, world]) 但是我为什么要使用除之外的其他东西+呢?用简单的编写连接更快+。然后,如果你看一下格式化字符串,您指定的类型如%s和%d和这样。据我了解,最好对类型进行明确说明。 但是后来我读到,+即使输入起来更容易,也应避免使用for串联。是否有明确的理由应该以其他方式之一将字符串连接起来?
88 python  strings 

9
检查优先与异常处理?
我正在阅读“ Head First Python”一书(这是我今年要学习的语言),然后进入一节,他们讨论了两种代码技术: 检查First与Exception处理。 这是Python代码的示例: # Checking First for eachLine in open("../../data/sketch.txt"): if eachLine.find(":") != -1: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) # Exception handling for eachLine in open("../../data/sketch.txt"): try: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) except: pass 第一个示例直接处理.split函数中的问题。第二个只是让异常处理程序处理它(并忽略该问题)。 他们在书中主张使用异常处理而不是先检查。该论点是异常代码将捕获所有错误,其中首先进行检查将仅捕获您所考虑的事情(并且您错过了极端情况)。我被教导首先要检查,所以我的本能是这样做,但是他们的想法很有趣。我从未想过使用异常处理来处理案例。 通常认为这两种方法中的哪一种更好?

6
为什么Python如此流行?[关闭]
Python于1991年首次出现,但直到TIOBE排名将有意义的事情量化之后,它才在2004年之前还不为人所知。 发生了什么?是什么引起了对这种13岁语言的兴趣的泛滥?是有原因的,在Python诞生的第一个十年里,Python就没有被认为是Perl的真正竞争对手吗?难道有一个原因是Python再过十年没有再变得相对默默无闻吗? 我个人认为Python是一种非常不错的语言,很高兴我不是唯一的一种。但是它没有企业支持或杀手级功能,无法解释相关性的突然上升。 有人知道这个故事吗?

3
我如何摆脱“循环”思想流派?
这是一个相当概念性的问题,但是我希望我能对此得到一些好的建议。我做的很多编程工作都是使用(NumPy)数组。我经常必须匹配大小不同的两个或多个数组中的项,而我要去的第一件事是一个for循环,甚至更糟的是嵌套的for循环。我想尽可能避免for循环,因为它们很慢(至少在Python中如此)。 我知道NumPy的很多功能都需要我研究一些预定义的命令,但是当您必须迭代某些内容时,您(作为经验丰富的程序员)是否会想到一个一般的思考过程? 所以我经常有这样的事情,这很糟糕,我想避免它: small_array = np.array(["one", "two"]) big_array = np.array(["one", "two", "three", "one"]) for i in range(len(small_array)): for p in range(len(big_array)): if small_array[i] == big_array[p]: print "This item is matched: ", small_array[i] 我知道有多种方法可以实现这一目标,但是我对通用的思维方法(如果存在)感兴趣。
79 python  array  loops 

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.