python函数调用慢 python运行慢怎么办

python 运行一个自定义的函数后,感觉系统变慢了

因为程序陷入死循环了,while x 0: 而你输入的x始终是大于0的,就会一直持续不断的运行下去,进而占用系统资源了。原因在于,你没有终止while循环的条件,修改如下

成都创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为海北州企业提供专业的网站设计制作、成都做网站海北州网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

def my_abs(a, x= 2):

s= 1;

while x  0:

s= s*a;

x = x-1  # 每循环一次x就减1,这样一旦x=0就终止循环了

return s

print(my_abs(4,3))

优化Python编程的4个妙招

1. Pandas.apply() – 特征工程瑰宝

Pandas 库已经非常优化了,但是大部分人都没有发挥它的最大作用。想想它一般会用于数据科学项目中的哪些地方。一般首先能想到的就是特征工程,即用已有特征创造新特征。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函数。

在Pandas.apply()中,可以传递用户定义功能并将其应用到Pandas Series的所有数据点中。这个函数是Pandas库最好的扩展功能之一,它能根据所需条件分隔数据。之后便能将其有效应用到数据处理任务中。

2. Pandas.DataFrame.loc – Python数据操作绝妙技巧

所有和数据处理打交道的数据科学家(差不多所有人了!)都应该学会这个方法。

很多时候,数据科学家需要根据一些条件更新数据集中某列的某些值。Pandas.DataFrame.loc就是此类问题最优的解决方法。

3. Python函数向量化

另一种解决缓慢循环的方法就是将函数向量化。这意味着新建函数会应用于输入列表,并返回结果数组。在Python中使用向量化能至少迭代两次,从而加速计算。

事实上,这样不仅能加速代码运算,还能让代码更加简洁清晰。

4. Python多重处理

多重处理能使系统同时支持一个以上的处理器。

此处将数据处理分成多个任务,让它们各自独立运行。处理庞大的数据集时,即使是apply函数也显得有些迟缓。

关于优化Python编程的4个妙招,青藤小编就和您分享到这里了。如果您对python编程有浓厚的兴趣,希望这篇文章可以为您提供帮助。如果您还想了解更多关于python编程的技巧及素材等内容,可以点击本站的其他文章进行学习。

python 函数调用问题

Ball是一个类,类定义 在代码 最前面

myBall=Ball() Ball() 生成 一个Ball类的实例,myBall是一个Ball类实例

myBall.bounce()调用 类方法bounce

请教python函数调用问题

进入python shell,执行下 import matplotlib 看看,如果提示错误,就是没有正确安装,安装应该也简单pip install matplotlib应该就行了。我用的是python2.7,3.5没试过

pythonopencvread慢

登录

首页

学习

实践

活动

专区

工具

TVP

返回腾讯云官网

Python()和read()函数太慢( OpenCV )

原文

dwiandhika提问于2021-01-22

python

opencv

optimization

我想循环某个范围内的帧,并将其附加到一个数组中。问题是,它太慢了。我已经检查了函数需要多长时间,我认为这相当慢。下面是我当前的代码:

imgs = []

for j in range(range1, range2):

video.set(cv.CAP_PROP_POS_FRAMES, j)

ret, frame = video.read()

imgs.append(frame)

复制

我也尝试过用video.retrieve(video.grab())替换imgs.append(frame),但性能并没有太大差别。有没有更好的解决方案/替代方案来完成这段代码的工作?

浏览 72关注 0得票数 1

原文

2 个回答

操作

Ian Chu已采纳

回答于2021-01-22

得票数 2

哦,哇,nvm。正是这个设置让这个过程变得很慢:

内部时间: 15.308052062988281

课外时间: 0.4459998607635498

import cv2

import time

def setInside(cap, start, end):

imgs = [];

for a in range(start, end):

cap.set(cv2.CAP_PROP_POS_FRAMES, a);

_, frame = cap.read();

imgs.append(frame);

def setOutside(cap, start, end):

imgs = [];

cap.set(cv2.CAP_PROP_POS_FRAMES, start);

for a in range(start, end):

_, frame = cap.read();

imgs.append(frame);

# open vidcap

cap = cv2.VideoCapture("202534.avi");

# bounds

start = 0;

end = 2000;

# time it

start_time = time.time();

setInside(cap, start, end);

print("Inside Time: " + str(time.time() - start_time));

start_time = time.time();

setOutside(cap, start, end);

print("Outside Time: " + str(time.time() - start_time));

复制

如果你把set移到循环之前,速度会快很多。

Python 函数的调用方式

好像没有特别的叫法吧,也没注意手册上有什么特别的叫法,至于区别,举个例子你就清楚了,如下:

假如有个列表aa=[1,4,3,5],对这个列表用sort()进行排序,如果第一种方式aa.sort()后aa=[1,3,4,5];

而第二种方式sort(aa)排序后虽然得到了新列表[1,3,4,5],但是aa还是=[1,4,3,5]。

也就是说第一种方式会改变原列表,而第二种不会改变,只是得到了一个新的副本。

GOT IT?!^^

补充一下,如果非要说叫法上的区别的话,第一种叫做方法调用,第二种叫做函数调用。至于方法和函数的些微区别,方法是基于对象的,函数是基于本身的。如果再详细……方法一般不可以单独使用,因为大部分方法是基于对象的,调用也必须基于对象,像上面第一种;而函数则可以单独使用,你可以理解成它是数据系统本身的,而不是对象专有的。

PS:至于为什么我换了用sort()而没有用LZ给的例子函数,是因为..…^o^……LZ第一种方式和第二种方式写的都不是一个函数……


本文标题:python函数调用慢 python运行慢怎么办
URL链接:http://ybzwz.com/article/dodeddc.html