本文目录一览:
- 1、如何提高python的运行效率
- 2、python 计算程序运行了多长时间?
- 3、测试Swift,Ruby, Python, Java等编程语言的代码运行速度和占用内存时有没有能直观显示出来的工具
- 4、使用Cython让python代码的速度提高30倍以上
- 5、python语言运行速度如此差?
如何提高python的运行效率
窍门一:关键代码使用外部功能包
Python简化了许多编程任务,但是对于一些时间敏感的任务,它的表现经常不尽人意。使用C/C++或机器语言的外部功能包处理时间敏感任务,可以有效提高应用的运行效率。这些功能包往往依附于特定的平台,因此你要根据自己所用的平台选择合适的功能包。简而言之,这个窍门要你牺牲应用的可移植性以换取只有通过对底层主机的直接编程才能获得的运行效率。以下是一些你可以选择用来提升效率的功能包:
Cython
Pylnlne
PyPy
Pyrex
这些功能包的用处各有不同。比如说,使用C语言的数据类型,可以使涉及内存操作的任务更高效或者更直观。Pyrex就能帮助Python延展出这样的功能。Pylnline能使你在Python应用中直接使用C代码。内联代码是独立编译的,但是它把所有编译文件都保存在某处,并能充分利用C语言提供的高效率。
窍门二:在排序时使用键
Python含有许多古老的排序规则,这些规则在你创建定制的排序方法时会占用很多时间,而这些排序方法运行时也会拖延程序实际的运行速度。最佳的排序方法其实是尽可能多地使用键和内置的sort()方法。譬如,拿下面的代码来说:
import operator
somelist = [(1, 5, , (6, 2, 4), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(0))
somelist
#Output = [(1, 5, , (6, 2, 4), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(1))
somelist
#Output = [(6, 2, 4), (1, 5, , (9, 7, 5)]
somelist.sort(key=operator.itemgetter(2))
somelist
#Output = [(6, 2, 4), (9, 7, 5), (1, 5, ]
在每段例子里,list都是根据你选择的用作关键参数的索引进行排序的。这个方法不仅对数值类型有效,还同样适用于字符串类型。
窍门三:针对循环的优化
每一种编程语言都强调最优化的循环方案。当使用Python时,你可以借助丰富的技巧让循环程序跑得更快。然而,开发者们经常遗忘的一个技巧是:尽量避免在循环中访问变量的属性。譬如,拿下面的代码来说:
lowerlist = ['this', 'is', 'lowercase']
upper = str.upper
upperlist = []
append = upperlist.append
for word in lowerlist:
append(upper(word))
print(upperlist)
#Output = ['THIS', 'IS', 'LOWERCASE']
每次你调用str.upper, Python都会计算这个式子的值。然而,如果你把这个求值赋值给一个变量,那么求值的结果就能提前知道,Python程序就能运行得更快。因此,关键就是尽可能减小Python在循环中的工作量。因为Python解释执行的特性,在上面的例子中会大大减慢它的速度。
(注意:优化循环的方法还有很多,这只是其中之一。比如,很多程序员会认为,列表推导式是提高循环速度的最佳方法。关键在于,优化循环方案是提高应用程序运行速度的上佳选择。)
窍门四:使用较新的Python版本
如果你在网上搜索Python,你会发现数不尽的信息都是关于如何升级Python版本。通常,每个版本的Python都会包含优化内容,使其运行速度优于之前的版本。但是,限制因素在于,你最喜欢的函数库有没有同步更新支持新的Python版本。与其争论函数库是否应该更新,关键在于新的Python版本是否足够高效来支持这一更新。
你要保证自己的代码在新版本里还能运行。你需要使用新的函数库才能体验新的Python版本,然后你需要在做出关键性的改动时检查自己的应用。只有当你完成必要的修正之后,你才能体会新版本的不同。
然而,如果你只是确保自己的应用在新版本中可以运行,你很可能会错过新版本提供的新特性。一旦你决定更新,请分析你的应用在新版本下的表现,并检查可能出问题的部分,然后优先针对这些部分应用新版本的特性。只有这样,用户才能在更新之初就觉察到应用性能的改观。
窍门五:尝试多种编码方法
每次创建应用时都使用同一种编码方法几乎无一例外会导致应用的运行效率不尽人意。可以在程序分析时尝试一些试验性的办法。譬如说,在处理字典中的数据项时,你既可以使用安全的方法,先确保数据项已经存在再进行更新,也可以直接对数据项进行更新,把不存在的数据项作为特例分开处理。请看下面第一段代码:
n = 16
myDict = {}
for i in range(0, n):
char = 'abcd'[i%4]
if char not in myDict:
myDict[char] = 0
myDict[char] += 1
print(myDict)
当一开始myDict为空时,这段代码会跑得比较快。然而,通常情况下,myDict填满了数据,至少填有大部分数据,这时换另一种方法会更有效率。
n = 16
myDict = {}
for i in range(0, n):
char = 'abcd'[i%4]
try:
myDict[char] += 1
except KeyError:
myDict[char] = 1
print(myDict)
在两种方法中输出结果都是一样的。区别在于输出是如何获得的。跳出常规的思维模式,创建新的编程技巧能使你的应用更有效率。
窍门六:交叉编译你的应用
开发者有时会忘记计算机其实并不理解用来创建现代应用程序的编程语言。计算机理解的是机器语言。为了运行你的应用,你借助一个应用将你所编的人类可读的代码转换成机器可读的代码。有时,你用一种诸如Python这样的语言编写应用,再以C++这样的语言运行你的应用,这在运行的角度来说,是可行的。关键在于,你想你的应用完成什么事情,而你的主机系统能提供什么样的资源。
Nuitka是一款有趣的交叉编译器,能将你的Python代码转化成C++代码。这样,你就可以在native模式下执行自己的应用,而无需依赖于解释器程序。你会发现自己的应用运行效率有了较大的提高,但是这会因平台和任务的差异而有所不同。
(注意:Nuitka现在还处在测试阶段,所以在实际应用中请多加注意。实际上,当下最好还是把它用于实验。此外,关于交叉编译是否为提高运行效率的最佳方法还存在讨论的空间。开发者已经使用交叉编译多年,用来提高应用的速度。记住,每一种解决办法都有利有弊,在把它用于生产环境之前请仔细权衡。)
在使用交叉编译器时,记得确保它支持你所用的Python版本。Nuitka支持Python2.6, 2.7, 3.2和3.3。为了让解决方案生效,你需要一个Python解释器和一个C++编译器。Nuitka支持许多C++编译器,其中包括Microsoft Visual Studio,MinGW 和 Clang/LLVM。
交叉编译可能造成一些严重问题。比如,在使用Nuitka时,你会发现即便是一个小程序也会消耗巨大的驱动空间。因为Nuitka借助一系列的动态链接库(DDLs)来执行Python的功能。因此,如果你用的是一个资源很有限的系统,这种方法或许不太可行。
python 计算程序运行了多长时间?
python 计算程序运行时间:
6.760052s
一、import time
二、start =time.clock()
三、#执行程序,比如计算1到100的和。
sum=0
for i in range(1,101):
sum=sum+i
print(sum )
四、end = time.clock()
print('Running time: %s Seconds'%(end-start))#其中end-start就是程序运行的时间,单位是秒。
五、
#全部程序如下
import time
start =time.clock()
sum=0
for i in range(1,101):
sum=sum+i
print(sum )
end = time.clock()
print('Running time: %s Seconds'%(end-start))
#输出结果
1、问题:
用python计算昨天,今天,明天的日期是这个格式么?Python2.7(r27:82525,Jul42010,09:01:59)[MSCv.150032bit(Intel)]onwin32Type防抓取,突袭网提供内容,请查看原文。
给定你两个日期,如何计算这两个日期之间间隔几天,几个星期,几个月,几年?
为什么Python适合科学计算?毫不夸张的说,你用python开发程序只要fortran的1/10时间。4.其他。它丰富而且统一,不像C++的库那么杂(好比linux的各种发行版),python学好n防抓取,突袭网提供内容,请查看原文。
2、解决方法:
我有个问题想请教下,如何用python计算出某目录中所有文件存...1234567891011import osimport datetime path =n防抓取,突袭网提供内容,请查看原文。
标准模块datetime和第三方包dateutil(特别是dateutil的rrule.count方法)能非常简单迅速的帮你解决这个问题。
Python构造日期对象和计算日期间天数差的问题python时间模块time,日期模块datetime,格式化用strftime()importdatetime防抓取,突袭网提供内容,请查看原文。
from dateutil import rrule import datetime def weeks_between(start_date, end_date): weeks = rrule.rrule(rrule.WEEKLY, dtstart=start_date, until=end_date) return weeks.count( )
Python构造日期对象和计算日期间天数差的问题python时间模块time,日期模块datetime,格式化用strftime()gt;gt;gt;importdatetimegt;gt;gt;help(datetime)查看2009年5月31日和2009...防抓取,突袭网提供内容,请查看原文。
rrule方法允许你根据日期(DAILY),星期(WEEKLY),年(YEARLY)来设置尺度计算。下面用一段代码来测试一下:
pytho将txt文件转换为列表问:想把这些带空格的文字转化为python中列表,就是['大数据','和’,......]...答:importrecontent="大数据和社会"datas=re.s防抓取,突袭网提供内容,请查看原文。
if _ _name_ _=='_ _main_ _': starts = [datetime.date(2005, 01, 04), datetime.date(2005, 01, 03)] end = datetime.date(2005, 01, 10) for s in starts: days = rrule.rrule(rrule.DAILY, dtstart=s, until=end).count( ) print "%d days shows as %d weeks "% (days, weeks_between(s, end))
pytho怎么安装tensor答:easy_install或者pip都可以,要看你这个tensor是啥时候的东西了,应该pip能解决!你在python的安装目录下找pip,之后放到path里面去,之后运行pip--help去看详细的命令介绍,很简单的PS:如果在windows下,python包安装会很费劲,不是少了...防抓取,突袭网提供内容,请查看原文。
将输出这样的结果:
初学Pytho2.7关于整数相加的问题!问:#-*-coding:utf-8-*-sum=0forxin【1,2,3,4,5,6,7,8,9,10】:...答:所说所有的变量都是对象。对象在pytho防抓取,突袭网提供内容,请查看原文。
7 days shows as 1 weeks
如何用pytho写rhino文件答:1、首先下载MAC版的64位Eclipse,然后解压缩。2、下载Python。MAC自带的是的python版本比较老,所以去下个新版本,下载后安装,dmg的pyth防抓取,突袭网提供内容,请查看原文。
8 days shows as 2 weeks
为什么python中print可以运行,而print"ilo...答:为什么python中print可以运行,而防抓取,突袭网提供内容,请查看原文。
Rrule计算是以整数计算的,它不会返回0.5星期之类的结果,所以8天会被算为两个星期。
pytho安装路径错误怎么卸载问:python安装时路径写错,忘记这个电脑没没E盘,安装失败,卸载时总报错,...答:可以重启一下你的电脑然后安装电脑管家在电脑上通过工具箱的软件管理,自动卸载该软件即防抓取,突袭网提供内容,请查看原文。
当然你可以不必定义一个尺寸,直接一句return rrule.rrule(rrule.WEEKLY, dtstart=start_date, until=end_date).count( )就可以得到结果。
pytho编写脚本用于什么测试答:PY可以实现很多东西的自动化啊主要可以写一些脚本帮助解决一些重复性劳作以及解决程序的一些自动化防抓取,突袭网提供内容,请查看原文。
希望本文所述对大家的Python程序设计有所帮助。
测试Swift,Ruby, Python, Java等编程语言的代码运行速度和占用内存时有没有能直观显示出来的工具
Java:面向对象,开源,不说跨平台了哈,恶心;不直接支持硬件级别的处理等。C/CPP:C面向过程,CPP面向对象(部分比较怪异),分裂比较严重,支持硬件级别的处理。ptyhon:动态解释型,开发效率高,开源,灵活,入门低。上面只是简单的说了下一些比较明显的特点。你问哪门语言更强大,我不知道,都很强大吧,嵌入式C/CPP用的比较多,虽说java也掺和过,但貌似J2ME半死不活的。J2SE(现在改名javaSE)也没多大前景,无论UI还是性能比不上C#,CPP,论开发效率,也就那么回事吧。但j2ee在B/S领域比较强大(不是说网站哈),百万级别的大部分java写的。python也很有优势,在快速建模和web方面。大项目我还真没见过几个,ruby到见的不少。学哪个更有前途,这么说吧,你就是把所有语言都学了,也就那么回事。重要的是是否善于思考,爱好学习,将学会的东西应用到实际的业务场景中去。实际工作中编程可不是声明几个变量,排排序,冒冒泡,打印打印字符。学习语言只是个开始,祝你好用!附:java,C/C++随便挑吧,python相对入门比较简单。
使用Cython让python代码的速度提高30倍以上
毫无疑问,Python是社区最喜爱的编程语言!到目前为止,它是最容易使用的语言之一,因为python代码是用一种直观的、人类可读的方式编写的。
然而,你经常会反复听到一些对Python的抱怨,尤其是来自C语言爱好者的抱怨,这些抱怨无非就是Python很慢。
是的,他们并没有说错。
与许多其他编程语言相比,Python确实很慢。Benchmark game有一些比较不同编程语言在不同任务上的速度的可靠基准。
对于Python,我们有几种不同的方法可以加快速度:
如果你所做的实际上可以并行化,比如数据预处理或矩阵运算,这些都是很好的方法。
但是如果你的代码是纯Python的呢?如果你不得不使用一个很大的for循环,且不能将数据放入矩阵中,因为数据必须按顺序处理,那会怎样?有没有办法加快Python本身的速度呢?
答案是肯定的,这就是Cython来加速原生Python代码的地方。
什么是Cython?
Cython是Python和C/C++之间的一个中间步骤。它允许你编写纯Python代码,并且只需要做一些小修改,然后将其直接翻译成C代码。
使用Cython,我们将向该变量添加一个类型:
安装Cython只需要一行简单的pip命令:
Cython中的类型
使用Cython时,变量和函数分别有不同的类型。
对于变量我们有以下类型:
注意所有这些类型都来自C/C++ ! 而对于方法我们有以下类型:
了解了Cython类型之后,我们就可以直接实现加速了!
如何使用Cython加速你的代码
我们要做的第一件事是设置Python代码基准:用于计算数值阶乘的for循环。原生Python代码如下:
注意到该函数具有cpdef,以确保我们可以从Python中调用它。并且注意到到循环变量i是具有类型的。你需要为函数中的所有变量设置类型,以便C编译器知道使用哪种类型!
接下来,创建setup.py文件,该文件将Cython代码编译为C代码:
并执行编译:
Boom ! 可以看到我们的C代码已经编译好了,可以使用了!
你将看到,在Cython代码所在的文件夹中,你拥有运行C代码所需的所有文件,包括run_cython.c文件。如果你感兴趣,可以查看一下Cython生成的C代码!
现在我们准备测试我们新的并且超级快的C代码!查看下面的代码,它实现了一个速度测试,将原生Python代码与Cython代码进行比较。
代码非常直观,我们以与普通Python相同的方式导入文件,并以与普通Python相同的方式运行函数!
Cython几乎可以让你在所有原生Python代码上获得良好的加速,而不需要太多额外的工作。需要注意的关键是,循环次数越多,处理的数据越多,Cython可以提供的帮助就越多。
下表显示了Cython为不同的数值阶乘带来的加速性能。当数值为10000000的时候,可以看到,我们的Cython加速超过了36倍。
python语言运行速度如此差?
这就要说到 Python 类语言和 C 类语言的主要区别了,Python 属于解释型语言,通俗来说就是你可以一句一句地输入,而 Python 解释器(Interpreter)可以一句一句地执行,而 C 语言属于编译型语言,无法做到这一点,只能一次性输入完成,编译成一个完整的程序再执行,而这个编译的过程由于现代编译器做了非常多的优化,并且你的程序没有输入只有输出,每次运行都出固定的结果,所以极有可能被编译器优化成为了只有一条输出语句(实际情况可能要复杂一些),总的来说就是由于二者之间原理的差异导致了性能的差异,你可以搜一搜相关的资料,关掉 C 语言编译时的优化,再看一下性能,或者将固定的那些值改为运行时需要输入再看一下效果。
Python 相较于 C 的优势有很多,性能这一方面你不需要关心,做出一个足够复杂的程序,它们之间运行效率差不了多少的。