鱼C论坛

 找回密码
 立即注册
查看: 1004|回复: 8

关于变量是否需要定义的疑问

[复制链接]
发表于 2019-5-30 10:52:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写代码时,发现,部分变量如单独定义的话,会方便后面的使用。但是这个貌似也会延长代码运行时间。
而有时候,我也发现,一个表达式如果不定义为一个变量的话,写起来很长,不便于阅读。同时,有时候一样会增加代码的运行速度。。
因此,想请问下,到底什么时候设置变量好些呢?
记得小甲鱼的视频里提到过,炒菜放盐的比喻,最好是定义好变量,方便后面使用。。而实际上这个貌似又影响到了运行速度。。
求指点~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-30 11:21:24 | 显示全部楼层
刚感觉,如果在for循环下,定义变量的话,会拖慢速度。。
而如果不存在循环的话,则定义变量,貌似则会加快速度。。
不知道是否真的如此。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-30 14:48:00 | 显示全部楼层
老笨啊 发表于 2019-5-30 11:21
刚感觉,如果在for循环下,定义变量的话,会拖慢速度。。
而如果不存在循环的话,则定义变量,貌似则会加 ...

我认为这个和速度没啥关系 不论你2楼还是1楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-30 15:48:26 | 显示全部楼层
wp231957 发表于 2019-5-30 14:48
我认为这个和速度没啥关系 不论你2楼还是1楼

可是事实是,我跑10W行的数据,循环体中,减少变量的定义后,时间比原先定义变量时,快了不少(原来是40秒,后面是33秒多,提高了6秒多啊)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-31 08:30:12 | 显示全部楼层
iwanna 发表于 2019-5-30 20:36
这个情况很复杂,一般来说在循环里面定义肯定比在外面定义慢,但是具体慢多少要看你的"定义"是什么意思
在C ...

很多时候,我是需要在for循环内对变量进行定义(因为要用到for i in y中的i),这样的话,会存在两种情况:一,比如直接用x[i],代入一些公式进行计算好呢,还是先用b = x[i]把这个装入一个变量中,来方便使用?(实际使用中,可能不是x[i]这样简单,可能是(x[i]- x[i-1]) / 4 * x[i+1] 等诸如此类的计算公式,因为其比较通用,为方便代码的阅读,可能用一个新变量b来定义这个公式,比较便于阅读。可是,实际过程中发现,如果在for循环中,用这个变量定义的方法来处理,耗时会加长)。。
所以,我很纠结,应该在什么情况下进行这种所谓的变量定义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-31 08:42:50 | 显示全部楼层
本帖最后由 老笨啊 于 2019-5-31 10:43 编辑
iwanna 发表于 2019-5-30 20:36
这个情况很复杂,一般来说在循环里面定义肯定比在外面定义慢,但是具体慢多少要看你的"定义"是什么意思
在C ...


我目前遇到的一个比较普遍的问题是:(针对10W条数据,为时间记录数据)
1. 数据中有多个相似的字段,其实就是考核指标。
2. 需要对这些考核指标进行必要的计算,而且计算是层层递进的。---也就是说,需要利用原始数据,生成一级新数据,再利用一级新数据,生成二级数据,二级数据再计算,生成三级数据。还要对一级、三级数据进行必要的字符串拼接等操作。
3. 我的思路是定义一个函数,设置好计算公式。然后用pandas的apply命令,应用到每个字段中。而在这个生成新数据的过程中,有的速度还可以,才0.4秒左右。而对有些则耗时较长,要达到8秒,甚至12秒。。各级数据的计算公式,其实相差并不是很大,都只是基本的条件判断,然后进行必要是四则运算。。由于是涉及到多个字段,所以我的做法是在for循环对字段进行遍历,然后在该循环下,定义函数处理数据转换。。这样就变成了要定义出多个函数。。。
4. 公式计算的时候,相对麻烦的就是,存在每级数据之间,可能需要相互关联。这样就存在我所提到的变量定义的问题。。
5. 变量定义会影响时间。这个我是亲手试过的。但是,我不知道,到底还有没更好的办法,对运行时间有质的提升(如成十倍,乃至百倍的时间提升)。。。因为没有其他情况对比,所以我也无法得知目前的代码,是否哪里可以继续改进下---特别是逻辑方面。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-31 08:48:13 | 显示全部楼层
另外,论坛上看到的,用from numba import jit方法,我也试过。。
不知道为什么,照抄例子,可以完全执行。。而按照帖子的做法,搬到我的代码上,就会报语法错误。。

1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-3 16:52:29 | 显示全部楼层
来个大神,帮忙解答下吧。。。
至少说明下这个jit方法怎么用啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-16 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表