导航:首页 > 编程语言 > python性能

python性能

发布时间:2022-01-26 22:54:18

1. 学python电脑性能要求怎样

python对电脑性能的要求和你的方向与目的有关,大多数情况下,普通的电脑都是可以的。除非需要编写大规模运算的程序,或吃内存的程序,或使用显卡运算的程序,需要对应的设备好一点,否则只是学习的话,不需要考虑电脑性能的问题。

2. 如何看待 python 的性能

在这个行业,相信大家不止一个人也不止一次的说过类似的话:"一个成熟的系统不会是由一门语言去包打天下的”。

还有就是python 在企业中可以作为主要使用语言,比如做web开发的公司,为什么不呢,真正涉及到密集运算的部分很少,我们可以用很多替代方案解决,例如用c重写那部分,用python粘合,或者是用其他语言重写,再提供service接口等等,那个不是要命的问题,业务复杂度和需求变更才是要命的,这个小时讨论,只有两个小时编码,1个小时测试,快速发布到线上所有环境让用户使用才是要命的问题,这个时候你跟我扯性能,那不是搞笑吗?

还有一点是大部分国内的企业用非python是因为能用python真正解决问题的程序员相比之下少一些,这个来自于我们内部的数据统计,我们是做智能招聘的,通过大把(千万级)的简历分析得到的结果。(不是那种学了一段时间python就妄下定义的人),市场的选择而已,并不能说明问题。

是的,我自己所在的公司就是用python做为主要开发语言,也包括科学计算,海量分析相关的东西,没见到他们工作时说python性能差,性能差的地方只占他们工作的百分之几,换个语言就绕过去了,当然你要说用python去写游戏客户端图像处理那部分那就真的蛋疼了。每种语言都有他合适的应用场景。

3. python:性能差,还会有人用吗

有的,多数情况性能差点无所谓。
多数PYTHON小程序几分钟就写好了(例如网络爬虫),哪怕电脑跑半天也没关系。而性能好的C语言等花几天写个同样功能的程序,性能高到几秒钟就运行完成了,但是工作效率更高了吗,很显然不是的。

4. Python怎样做性能测试

利用profile分析相关的独立模块,python内置了丰富的性能分析工具,profile,cProfile与hotshot等。其中Profiler是python自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈。Python标准模块提供三profilers:cProfile,profile以及hotshot。profile是python的标准库。可以统计程序里每一个函数的运行时间,并且提供了多样化的报表。使用profile来分析一个程序很简单,profile可以直接用python解释器调用profile模块来剖分py程序,如在命令行界面输入如下命令:

5. 如何进行 Python性能分析,你才能如鱼得水

importtimedeftimefunc(f):
deff_timer(*args,**kwargs):
start=time.time()
result=f(*args,**kwargs)
end=time.time()
printf.__name__,'took',end-start,'time'
returnresult
returnf_timer
defget_number():
forxinxrange(5000000):
yieldx@timefuncdefexpensive_function():
forxinget_number():
i=x^x^x
return'someresult!'#prints"expensive_functiontook0.72583088875seconds"result=expensive_function()

6. 如何进行python性能分析

在分析python代码性能瓶颈,但又不想修改源代码的时候,ipython shell以及第三方库提供了很多扩展工具,可以不用在代码里面加上统计性能的装饰器,也能很方便直观的分析代码性能。

7. Python3有性能上的提升么

#xiaodeng
#python3


#1、编码方式和性能
'''
1、py3运行效率更快
2、默认源文件编码ASCII变为UTF-8,以前文件前加入的coding=utf-8不再需要
3、针对unicode的处理有了明显的改善,效率明显提升
'''


#2、数据类型和基本运算
'''
1、int和long进行了统一,统一为int
2、True、False、None都是关键词
3、必须以b'...'表示二进制数据,可以使用u'..'表示字符串,不加u也表示字符串
4、移除<>不等号,使用“!=”表示不等号关系
1)2!=3
2)2<>3#出现语法错误
5、调整除法符号‘/’的用法,只返回浮点数,要返回整数要使用“//”
6、py3运算对数据的类型要求更加的严格
'''

deffoo(test=None):
iftestisNone:
print(test)
foo()


print(5/2)#浮点数
print(5//2)#整数
print(1/3)

#4、print和exec用法
'''
1、print是一个函数,不再是一个语句,其中不需要用空格,后面打印的内容需要有括号括起来
2、exec函数用法发生变化
'''

deffoo():
_local=locals()
exec('a=4',globals(),_local)
a=_local['a']
print(a)
foo()

#5、input、bin、oct和for循环
'''
1、raw_input统一为input
在py2中用法为:
1)a=raw_input('请输入:')
printa
2)a=input('请输入:')#接收一个有效的表达式,如:2+3,而不能单独接收3
printa
2、for循环的变量不再泄露在全局变量中,此bug已修复
1)Python2.7.10(default,May232015,09:40:32)[MSCv.150032bit(Intel)]onwin32
Type"right","credits"or"license()"formoreinformation.
>>>i=8
>>>print[iforiinrange(5)]
[0,1,2,3,4]
>>>printi
#按照道理来讲for循环中的i与最外面的i=8的i是不同的,但是这里。。。。。
>>>

2)
i=6
print([iforiinrange(5)])#结果为[0,1,2,3,4]
print(i)#结果i=6
'''
#6、a=input('请输入:')#这里不再需要一个有效的表达式,他的用法和raw_input相同
#print(a)


#7、range和dict的变化
'''
1、在python2中,range火xrange会创建一个列表。常出现在for循环、字典、列表中,但是py3中xrange改名为range,在python3中使用
使用xrange会触发错误。同时range返回的是可迭代对象而不再是列表形式,要想使range的结果得到一个list数据必须要使用list(range(5))
2、字典内的dict.iterkeys(),dict.itervalues(),dict.iteritems()被keys()andvalues()anditems()所替代
他们的返回结果类似于集的可迭代对象,而不是键值对的列表。从而在不进行键和值条目复制的情况下就能对其执行set操作

'''

a=range(6)
print(a)#result:range(0,6)对象,不是列表
print(list(a))#result:[0,1,2,3,4,5]
foriinrange(6):
print(i)

#print(xrange(5))#报错:提示为name"xrange"is'notdefined

#dict案例
d={'name':"iaodeng",'sex':28}
print(d.items())
print(type(d.items()))#<class'dict_items'>
#返回结果dict_items([('name','iaodeng'),('sex',28)])
#这里不再是列表形式
'''
Python2.7.10(default,May232015,09:40:32)[MSCv.150032bit(Intel)]onwin32
Type"right","credits"or"license()"formoreinformation.
>>>d={'name':"iaodeng",'sex':28}
>>>printd
{'name':'iaodeng','sex':28}
>>>printd.items()
[('name','iaodeng'),('sex',28)]
>>>printd.iteritems()#返回一个可迭代对象
<dictionary->
>>>foriind.iteritems():printi
('name','iaodeng')
('sex',28)
>>>
'''
print('xiaodeng:d.keys():',d.keys())#xiaodeng:d.keys():dict_keys(['name','sex'])
print(type(d.keys()))#<class'dict_items'>

#values()同理


print("既然是可迭代对象,那么还可以进行下面操作")
foriind.items():
print(i)
forkeyind.keys():
print(key)
print("values用法同理")
print('用list将可迭代对象转化为list数据')
print(list(d.values()))


#7、python3具有单一的str类型,其类型相当于python2的unicode,python3所有的字符串都是unicode
#新增bytes类型
a=b"china"
print(type(a))#<class'bytes'>
#str和tytes对象都可以使用encode和decode来进行转化
s=a.decode()
print(s)#china字符串类型
s=s.encode()
print(s)#b"china",tytes字节类型
#8、输入和输出
a=open('test.txt','w')
a.write("writeinsomething")
a.close()
b=open("test.txt","r")
print(b.read())#note:注意加括号
"""
1、如果要对文本执行任何I/O操作,python3会强制用户使用文本模式,打开文件,如果不想使用默认编码utf-8
通常需要指明所需的编码
2、如果对二进制数据进行I/O操作,必须使用二进制模式打开文件或进行读写操作
eg:
f=open("test1.txt","wb+")#二进制追加模式
f.write(b"wlovefengmei")#必须加b,以bytes对象的形式进行写入
f.close()
file=open(filename,mode)
mode:
r:只读模式
w:只写,如果文件已存在则会进行覆盖操作,所以格外小心,如果文件不存在则创建新的文件
a:打开文件用于追加,只写如果文件不存在则创建
b:二进制,不能单独使用
经过演变会有很多形式
"""


#9、迭代器
"""
1、range在python3中返回颗迭代对象二不是列表,最大限度节约内存
2、zip(),map(),filter(),key(),value()返回的均是可迭代对象
"""

#10、异常错误处理
"""
1、必须使用关键词as,try和exceptNameErrorase语句
2、案例:
python2
try:
something
exceptNameError,err:
printerr

python3
try:
something
exceptNameErroraserr:
print(err)
3、raise触发语法用法的变化,python3只接受带括号的
1)raiseIOError,"fileerror"#出现语法错误
2)raiseIOError("fileerror")
"""

#11、面向对象
"""
1、需要单独深入学习
"""

#12、模块的变动

8. 为什么python性能差

建议,可以学习一下django这样的网络框架。

9. Python的优势有哪些

1. 简单:Python奉行简洁主义,易于读写,它使你能够专注于解决问题而不是去搞明白语言本身。
2. 免费:Python是开源软件。这意味着你不用花一分钱便能复制、阅读、改动它,这也是Python越来越优秀的原因——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。
3. 兼容性:Python兼容众多平台,所以开发者不会遇到使用其他语言时常会遇到的困扰。
4. 面向对象:Python既支持面向过程,也支持面向对象编程。在面向过程编程中,程序员复用代码,在面向对象编程中,使用基于数据和函数的对象。
5. 丰富的库:Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
6. 规范的代码:Python采用强制缩进的方式使得代码具有极佳的可读性。
7. 可扩展性和可嵌入性。如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

10. 谁说Python性能差的

[转载]
最近看到网上有人对比Python,Shell脚本, C++,主要是拿Python性能说事,个人觉得意义不大。
一个语言有什么性能问题呢,是背后的实现(标准库,编译器)决定着一切,就像总有人想对比c++和c的效率一样。
还有就是,Python总被人叫做是脚本语言,其实脚本更多指的是批处理命令文件,是shell命令的集合,和python完全
不是一个层次。不同的工具所在层次不同,适用的问题也不同。把不同层次上的东西拉到一起做比较,什么问题也说明不了。
另外,shell就知道fork,你说他还能干嘛?:-)。
下面先乱侃一通,再以实例探讨下Python的性能问题。
首先,Python是一门动态编程语言,主要亮点是可以提高开发应用的效率。 他是和Java,perl,Ruby等语言同类的。
是做系统集成,Web应用等系统的利器,最近在科学计算领域也是大方光彩(numpy, scipy, sci-kit learn)。
和C/Cplusplus基本不是一个层次的开发工具,他们是做底层系统(基础库,os,ecos就是c++写的,还是用在嵌入式系统中)的,
很多库提供的功能也很基础。但,你可以为Python写c或cpp的模块,提高你的Python系统的整体性能。
其次,Python的主要解释器CPython是用C语言实现的,不同类型(dict,list)和函数实现的算法很不同。如果你的系统对性能很敏感,
那必须了解一些内幕,一个函数输入不同的参数,性能可能相差很大。另外,Python解释器执行Python代码时候,大概经历如下几个阶段:
1) 加载代码文件 2)翻译成AST 3)生成bytecode 4)在PVM(python virtual machine)上执行bytecode,PVM实际是一个基于栈的虚拟机。
其中,前3个阶段看文件代码量,一般就ms级别的消耗,如果你不想浪费,可以使用python -O -m py_compile xx.py命令,
将xx.py先编译为xx.pyo的字节码,然后在调用python xx.pyo执行. PVM你可以简单的想象为一个C语言写的函数,裏面有一个非常大的switch,
根据不同的bytecode内容,执行不同的动作。比如遇到一个打开文件指令,这个函数就会调用libc的库函数,执行c语言的打开文件操作。
其实很多操作python bytecode和c语言之间的性能差异很小的,因为Python的很多功能模块就是直接执行C库的。
再次,随着Python的广泛应用,CPython解释器的性能问题确实越来越严重,特别是数据挖掘,机器学习领域的日趋火热,其中很多优秀工具的实现
都是用Python来做的。为了解决这个问题,Python社区提出了多种不同的解释器,比如针对数值计算的numba,用python实现的python解释器pypy等。
他们的主要目的就是给Python加速,用到的技术有JIT,LLVM。比如numba为python提供了新的decorator,让python函数能在运行时
通过llvm库被翻译成machine code。而CPython的现在主要的目的就变为一个Python解释器的范本,就是提供一个稳定可靠的功能最全的解释器实现参考。
另外,如果某个用Python实现的功能模块的性能很关键,你可以把这个模块先用Cython翻译成C语言代码,然后在编译为可执行程序。当然用Cython,
你也可以在python中更加方便的调用外部C库,保证整个系统的性能。所以,很多Python系统的执行会越来越快,但并不是Python快了,而是后面的支持
越来越强大了。
最后,Python就是和Java类似的一门语言,不要把他理解为是一种脚本。刚开始把他理解为脚本,可能是因为python提供了一个命令行工具,让人可以输入
python代码,并立刻见到结果。其实,这只不过python给你提供的一个优秀的工具之一而已。Python在各个领域的使用越来越广泛,开源资源也越来越多:
1. 大规模分布式计算disco,提供和hadoop类似的maprece模型 htt p:/ /discoprojec t.o rg/
2. 科学计算/可视化 numpy,scipy, matplotlib
3. 数据挖掘orange, sci-kit learn scikit-learn.sourceforg e.n et
4. Web开发 django project
所有IT领域,基本都能找到Python的痕迹。
说了这麼多,举一个文本处理的例子,就是计算文本中第3列数据的和,来看看Python的功力,特别是性能方面的问题,
对比参考就是awk神器,其实拿awk做对比不是很公平,毕竟awk是优化再优化的工具(没动力看他的实现,我猜的:)),
应该自己写个c语言版本的。
样本文件有1000万行,格式如下:
data.txt:
d0 sp 0
d1 sp 1
d2 sp 2
d3 sp 3
d4 sp 4
d5 sp 5
d6 sp 6
d7 sp 7
d8 sp 8
d9 sp 9
先看awk的结果:
$ time cat data.txt |awk '{ sum+=$3} END {print sum}'
49976634308700
real 0m3.662s
user 0m3.576s
sys 0m0.240s
1000万行3秒,效率果真高。
再看Python的,我做了四个版本。
Python代码版本(1):
import sys
def data_sum():
datasum = 0
for line in sys.stdin:
raw = line.split()
datasum += int(raw[2],10)
print datasum
if __name__ == "__main__":
data_sum()
Python代码版本(2):
import sys
def data_sum():
datasum = 0
for line in sys.stdin:
raw = line.split()
datasum += int(raw[2])
print datasum
if __name__ == "__main__":
data_sum()
Python代码版本(3):
def data_sum():
datasum = 0
for line in sys.stdin:
datasum += int(‘2’,10)
print datasum
if __name__ == "__main__":
data_sum()
Python代码版本(4):
import sys
def data_sum():
datasum = 0
for line in sys.stdin:
raw = line.split()
print datasum
if __name__ == "__main__":
data_sum()
版本(1)执行结果:
首先将python代码编译成字节码,运行看看
$python -O -m py_compile datasum.py
$ time cat data.txt |python datasum.pyo
49976634308700
real 0m7.151s
user 0m7.088s
sys 0m0.192s

再试试直接运行python代码
$ time cat data.txt |python datasum.py
49976634308700
real 0m7.323s
user 0m7.228s
sys 0m0.212s
两种方法大概有个毫秒级别的差异,主要消耗在cpython把python代码翻译成ast阶段,感兴趣可以自己编译一个cpython验证下。
还有pypy,看看他的JIT和stackless效果如何。
$ time cat data.txt | pypy-c datasum.py
49976634308700
real 0m4.649s
user 0m4.556s
sys 0m0.224s
怎样?比awk版本就慢了1秒钟。我已经非常满意了。下面再试试其他版本,顺便看看到底Python慢在了哪裏。
版本(2):
$ time cat data.txt |python datasum.py
49976634308700
real 0m9.111s
user 0m9.025s
sys 0m0.220s
$ time cat data.txt | pypy-c datasum.py
49976634308700
real 0m4.694s
user 0m4.588s
sys 0m0.248s
版本(2)直接就比版本(1)慢了2秒。就差了一个base参数而已,原因看下Cpython的代码就清楚了(Python/bltinmole.c)。
加了base的,直接调用: x = PyOS_strtol(s, &end, base);
不加base的,要通过PyNumber_Int等一列内部类型处理函数,最后到达PyOS_strtol。
版本(3):
$ time cat data.txt |python datasum.py
20000000
real 0m3.127s
user 0m3.044s
sys 0m0.188s

$ time cat data.txt | pypy-c datasum.py
20000000
real 0m2.393s
user 0m2.320s
sys 0m0.196s
版本(4):
$ time cat data.txt |python datasum.py
0
real 0m3.920s
user 0m3.852s
sys 0m0.180s
$ time cat data.txt | pypy-c datasum.py
0
real 0m3.324s
user 0m3.208s
sys 0m0.252s
通过对比版本(3)和版本(4)可以发现,Python主要慢在了split函数这裏,也就是提取第3列这个动作上。
初步想想,用C语言确实可以做到速度更快,但用Python没想到什么好办法,正则表达式会更慢。
上面都是用Python的解释器来执行代码的,下面把版本(1)用Cython编译成C语言,看看效果如何:
$ cython --embed -o datasum.c datasum.py
$ gcc -o datasum datasum.c -I/usr/include/python2.7 -lpython2.7
$ time cat data.txt |./datasum
49976634308700
real 0m6.332s
user 0m6.272s
sys 0m0.192s
比pypy还是慢了一些,pypy在代码生成上有些优化,cython基本就是translate。
总结下就是:
Python是快速原型开发的利器,如果你对性能有要求,那么就用他的各种优化他,Python不会辜负你的。
当你的领导/客户给你很大的deadline压力时候,Python就是你的救命草,呵呵。
当然,某些简单功能,比如本文的例子,用awk就可以了嘛,干嘛费力气优化python,:-)。

阅读全文

与python性能相关的资料

热点内容
apachephpjava 浏览:274
服务器旁为什么要有电脑 浏览:522
什么样的app上买机票最便宜 浏览:987
安卓如何查看异常重启 浏览:717
解压音乐排名 浏览:386
安卓手机浏览器怎么扫二维码 浏览:721
通达信成本均线源码 浏览:619
可以下载的解压音频 浏览:568
海贼王怎么换服务器 浏览:321
计算机上的共享文件夹映射 浏览:944
荣耀安装包在文件夹哪里 浏览:198
机票php源码 浏览:235
linux共享mac 浏览:926
中国没有国外的服务器地址 浏览:761
为什么退款服务器连接错误 浏览:559
android短信存储位置 浏览:977
unix网络编程卷4 浏览:808
找靓机app下单什么时候发货 浏览:413
android一个应用两个进程 浏览:804
linux硬盘复制 浏览:808