关于python的代码中,变量是否需要定义的疑问

编写代码时,发现,部分变量如单独定义的话,会方便后面的使用。但是这个貌似也会延长代码运行时间。
而有时候,我也发现,一个表达式如果不定义为一个变量的话,写起来很长,不便于阅读。同时,有时候一样会增加代码的运行速度。。
因此,想请问下,到底什么时候设置变量好些呢?

我个人感觉,如果在for循环下,定义变量的话,会拖慢速度。。
而如果不存在循环的话,则定义变量,貌似则会加快速度。。
不知道是否真的如此。。

3个回答

  1. python慢的是循环,不是变量定义
  2. python属性,方法获取比call慢。比如 list.append(a) 比 apd=list.append 后的 apd(a) 慢【不包含apd=list.append】。 所以循环如果足够多的话,考虑这类设置个变量
  3. for x in y: 如果用不到x,可考虑用while,或者 用 _ 代替x
  4. python中,一般情形是,有函数的比没函数的快,写的短的比写的长的快,内建方法比循环快。所以多用列表推导式,少用循环。
  5. 先写程序后优化,如果碰到程序总需要优化,再去关注优化结果,再反过头来优化自己的使用习惯。


根据你提供的的内容:
data.txt

7.79,8.66,2.76,7.06,3.47
5.52,1.61,9.55,9.19,9.95
8.74,5.93,4.81,0.47,0.60
9.64,9.47,6.49,4.44,8.64
0.96,9.14,6.23,4.32,7.72
0.82,6.41,5.25,2.214,3.87
....

args.txt内容如下:

1,3,5,7
2,4,6,8
1,2,3,5
。。。s

输出:

0.113,0.083,0.760,0.009,1.000
0.260,1.000,0.910,0.313,0.244
0.249,0.965,0.905,1.000,1.000
0.377,0.184,0.298,0.720,0.080
1.000,0.143,0.246,0.660,0.720
1.000,0.205,0.050,0.214,1.000
0.585,1.000,0.550,1.000,0.410
0.211,0.930,0.735,1.000,1.000
1.000,0.218,0.360,0.100,0.110
0.515,1.000,0.560,0.585,0.420
0.306,0.220,0.900,0.316,0.209
0.180,1.000,1.000,0.285,1.000
0.110,1.000,0.922,1.000,1.000

代码如下:

argTable = []

def getNew(num,colidx):
    level = argTable[colidx]
    if num< level[0]:
        return 1.0
    if num > level[3]:
        return (num-level[3])/level[3]
    levelR = zip(level, level[1:len(level)])

    for lR in levelR:
        if lR[0] < num <= lR[1]:
            return (lR[0] - num) / (lR[0] - lR[1])

if __name__ == '__main__':
    with open("args.txt","rb")as f:
        for line in f:
            l= line.split(b",")
            l = [float(i) for i in l]
            argTable.append(l)
    with open("data.txt","rb")as f:
        with open("newdata.txt", "wb") as fw:
            for line in f:
                l = line.split(b",")
                l = [float(i) for i in l]
                newl = [getNew(i,idx) for idx,i in enumerate(l)]
                newlS = [f"{i:2.3f}" for i in newl]
                fw.write(",".join(newlS).encode("utf-8")+b"\r\n")
lmw0320
lmw0320 回复notback: 我说的时而时而,是因为计算其实有几个步骤,fc上的帖子,只是其中的一个步骤。。所以会存在一会需要对行进行计算(需要统计行之间的数据),一会需要对列进行计算。你提到的验证列名什么的,倒是不存在,因为我已经将相关的列名放在一起,可以切片处理的。不管怎样,很感谢你提供的解决方案,我自己去试下。
3 个月之前 回复
NotBack
notback 具体问题具体分析,代码还是要靠自己写的。我只能在大方向给予个方向。另外,别说你验证行名列名什么的。txt或者csv数据本身就是包含数据位置逻辑。你所谓的验证其实都是可以先验的,也就是说你构建argTable的时候就可以调整顺序。我代码中直接用了索引数而没用列名行名,主要不想代码写的太多。无非再args.txt加一列标准名,在data.txt中加一行列名.getNew中多些判断而已。代码复杂度不变。
3 个月之前 回复
NotBack
notback 你fc上的pandas,我猜测你的逻辑是,对每个指标的每个标准值进行遍历,然后再对每列数据中符合标准值的数据进行处理。事实上你的逻辑就是,数值小于最小标准值如何如何,数值大于最大标准值如何如何,数值在最小最大间如何如何,这3条逻辑。跟每个标准有多少个标准值无关。
3 个月之前 回复
NotBack
notback 就你贴出的fc论坛上的例子,没有什么时而时而的。我上面的代码,按照你的判断逻辑写的,核心也就getNew中的9行。
3 个月之前 回复
NotBack
notback 不同语言的调用,有什么比文件input,output更好的?先把处理逻辑搞清楚,再写代码,别时而时而的,搞的吓死人不偿命。你就100个指标,只要data.txt是100列的数据,照样跑的欢。
3 个月之前 回复
NotBack
notback 上面这个,不管多少等级指标,写在argTable中即可。argTable对应data.txt中的列。就是说你有几行argTable,就要有几列data.txt。上面代码唯一没判定null,在l转换前判断null,并设定个0,在getNew中再判断个0就可以了。任何语言的标准库和内建函数,肯定能覆盖所有问题的基本解决逻辑,其他的扩展库,只是在速度、性能、便捷性上扩展。
3 个月之前 回复
lmw0320
lmw0320 回复NotBack: 可以加你的QQ或微信吗?好具体请教。我也可以提供完整的代码,好优化
3 个月之前 回复
lmw0320
lmw0320 回复NotBack: 我目前暂时只能考虑用pandas。因为我得和别人配合,我这个只是脚本,主程序是JAVA。我是被调用的部分。我的std_level中有12个指标,每个指标都有各自的5个等级和2个极限值(极大极小值)。我需要时而对每行数据进行横向处理,时而对每列数据进行单独处理。所以目前可能需要考虑的是,一部分一部分代码修改。
3 个月之前 回复
lmw0320
lmw0320 回复NotBack: 你说你的代码?是getNew这个吗? 100W行跑22.3秒?能达到这个速度,肯定很好了。。看来的确就像你说的,我的代码逻辑不合理,没有尽量使用内建方法。
3 个月之前 回复
NotBack
notback apply当然耗时,对同一列的每个数据进行函数操作,当然耗时。但是在大量数据时候,比python自循环对同列每个数据进行操作,理论上速度更快而已。假设数据行数为n,等级数为m。利用python的循环遍历每个数进行操作,则在python中循环n*m次。而用pandas,则只在python中循环m次,其他的在pandas内部函数中循环,鉴于python可怜的循环效率,自然更快。但是你别搞错,就算我口中的可怜的循环效率,对绝大多数应用来说,都是光速。
3 个月之前 回复
NotBack
notback 实在想用pandas,把我的getNew拿去改改,应该没问题。
3 个月之前 回复
NotBack
notback 理论上5次apply。前面说错。
3 个月之前 回复
NotBack
notback 我的程序你跑了吗?100w行,垃圾机器22.3秒,机器好更快。足够你的效率了吧。标标准准的文件遍历。效率足够高。算法复杂度o(n)至o(n*m) ,n为数据条数,m为分类等级。基本线性。apply是对一列数据做同一个函数。理论上,以你的数据,理论上你的apply只需要跑4次。查查你的std_level有多少值。不是你函数写的有问题,就是你for的循环次数太多,做了太多无用功。我的代码全用的内建函数,不是解决了吗?输出与你的预期不同?
3 个月之前 回复
lmw0320
lmw0320 回复NotBack: 另外,按照你的说法,pandas什么标准库可以解决这个问题呢? 论坛上发了帖子,貌似都没什么回。。
3 个月之前 回复
lmw0320
lmw0320 我也问了别人,别人给我提供了个建议,就是先定义函数,传入两个参数。因为apply方法是允许传参的。换句话说,就是定义一个公共函数,然后适用到每个字段中去。而我之前的做法是遍历每个字段,对单独的字段进行函数定义。结果发现,两者的耗时基本一样(当然,先定义函数的做法,肯定更规范些)。后面,我自己拆分了步骤,看到底哪行代码比较耗时,结果发现函数定义基本不消耗时间,都是在函数进行apply时,耗时最多。也就是说,主要的耗时在于对每行数据apply定义的函数。
3 个月之前 回复
NotBack
notback 1、我可以肯定你pandas用法错误。2、啥复杂算法,搞的我都不太敢多说。就这个需求,python标准库随便写写就搞定了。
3 个月之前 回复
lmw0320
lmw0320 回复NotBack: 可以不生成新表,而在第一个表的数据中生成新列就可以。否则计算关联时,又要关联到第一张表中。第二张表是标准表,因为行列数不一样,不便合并到一起,才独立出来的。
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: ...我的表述能力真心有点差。。。我也不知道怎么把问题描述清楚了。。基本就是你说的意思。。这种情况下,是否可以不在for循环内进行函数定义呢?
4 个月之前 回复
NotBack
notback 看你的问题描述有点晕。我理解如下,第一个表的数据,参照第二个表,生成新的第一个表。原数据为d,则新y数据逻辑:假设新数据为第一行X1列。则y从argTable的第一行查。if d=null then y= null / if d<= I(1.0) then y=1.0 / if d> I(1.0) and d<=IV(7.00) then y = (下-d)/(下 -上) / if d > IV(7.00) then (d-IV)/IV 。就这些吧?
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 我在这个论坛上,发了个帖子,里面描述了具体的情况。。这样可能比空谈所谓的效率好些。可以的话,帮忙看下我的代码是否合理。。不合理,又该如何优化呢。链接是:https://fishc.com.cn/thread-140701-1-1.html
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 我今天又想了下,有个问题。。不知道是否我自己钻牛角尖了。。就是说,我的数据需要依赖于一个外部的标准等级判定数据文件,这样的话,感觉必须用到for循环,来进行处理不同字段字段的等级数据不同的情况。举个例子吧,我有A,B,C三个指标,每个指标的等级数据评定值都不一样。我的逻辑是需要先判定哪个指标,再去标准文件中取出对应指标的等级数据值,来进行判定数据的等级。如果不用for循环来遍历不同的字段,我如何处理不同字段的数据区别呢。。。这个等级判定,还只是简单的算法。后面还有些略微复杂些的,还要关联数据上下等级的标准值来计算。。
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 那个时间很少,才0.4秒左右。主要的时间在于另外的计算公式。因为等级数据的生成,只是一个基础。后面的计算,需要利用到该等级数据,进行多次加工,才有最后的输出。
4 个月之前 回复
NotBack
notback 以你那个1-5级的数据例子,我看了一下,用最笨的方法:1、把源数据灌入db中(每种数据库都有高速导入接口,自己研究一下)2、select (case when 列1>=4.1 then 5 when 列1>=3.1 and 列1<4.1 then 4 ....... esle 1 end) 列levelX1 , ......... from table 3、导出数据。你看看运行速度。这种看似很土的方法其实效率不错,如果速度不够快,你还能数据库自定义函数和存储过程加速。另外,你的思维一直在对某个元素如何处理上,怎么说,你都觉得必须用for。所以说让你先多看看python的标准库和库代码,思维会有些转变。可以透露一下,你10w条数据读入,转换为每个人的等级数据的程序,跑多少时间吗?
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 不太懂你的意思了。我目前就是在对数据进行你所说的预处理啊。。根据标准等级数据,先生成等级数据。再利用等级数据来处理(但是这个是计算公式所要求的)。你的意思是让我用数据库来进行相应的处理?我用pandas的做法,也是尽量用到其内建的方法,如apply之类的,这个你说是max等性质的一样的啊。。我不懂为什么这个是方向性错误?我是在尽可能使用pandas的内建方法的情况下,迫不得已使用了for循环,因为没有找到合适的内建方法替换来提高速度。
4 个月之前 回复
NotBack
notback 你的方向性严重错误。看了你再问答中问的一些问题。明显感觉到,你不仅要优化python语句,还要优化pandas效率。如果学一样东西,最好从最基本的用起。根据你的代码,个人觉得你用pandas不一定比标准库效率高。数据的预处理其实很重要的,比方你一个将数值转换为等级的例子,你用任何语言,都比把数据灌到数据库,几条sql来的慢的多。个人建议:1、先把数据预先处理好,不要再代码中转换来转换去,非要用2种类型,可以弄2份对应数据。2、学好python的基础。3、虽然我对pandas没什么研究,随便看了几眼,个人觉得,用pandas更多的是使用其类似数据库的特性,比如不用for循环就能任意选择数据,比如不用循环就能计算所有数据的方差,max,sum。而不是用for循环。python的循环对于高级语言来说是速度是垫底的,我不太认为一个第三方库能解决这个问题。4、对于超大数据集的简单计算和统计,数据库本身就有极大优势,就算不能解决所有问题,通过一遍数据库计算和预处理,也能节省很多后期处理速度。
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 目前来说,貌似也没有被不接受代码的运行速度。。我只是想自己进行优化,从中可以学到些东西。。毕竟刚入行半年多时间,很多东西不会。。目前的想法是把一个东西学精再说,学太多,蜻蜓点水,反而不好。
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 谢谢你的建议~~很久前学过C,基本忘光了。。我是转行过来的。。目前是倾向先把python学好再说。以后考虑往机器学习方向靠。因此,可能会多花精力在算法优化上。。比如你说的那些内建方法和第三方包。。
4 个月之前 回复
NotBack
notback 实在优化不好算法,建议你拿c做。看你的描述,你的程序,无非是读取数据,计算某些值,输出出来。这些东西学个c也没多少时间。无非涉及,文件读取,数据类型,数值计算,if,for,while和printf。同样简单的多循环垃圾代码,c保守估计快个3,4倍没啥大问题。真学不会c,用vb6,仅仅涉及循环计算,string不要用只用bytes,效率也比python高。估计缩你个一半时间也没啥大问题。vb.net,c#我就不推荐了,光.net类库就够你哭的了。如果代码计算非常简单,你用js或者vbs试一试,也许也有惊喜哦。
4 个月之前 回复
NotBack
notback 先用cProfile看哪里最耗时。算法这东西很难说的清楚,自己找书看看吧。别太高估自己的算法。简单比方,[1,2,3,4]找最大值,你用for去找,效率肯定比max(list)低太多。你就去找能代替你算法的函数,第三方包。另外,但凡能让你少做一次循环的中间变量,你就存下来。蚂蚱也是肉。
4 个月之前 回复
NotBack
notback 给你几点建议,1,既然用到了pandas,就尽量用pandas的方法简化你的算法。 2,听你的说法来看,你的算法复杂度根本不是o(n),简单来说,你都不知道循环了多少遍你的10w条数据了。建议你算法上多看看。有没有优化的空间。说白了,就是少循环多记录。用空间换时间。现在内存都大经得起折腾。
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 之前网上看过介绍,说是尽量减少for循环,而采用内建方法来提高速度。但是我这个代码的目的,是要对数据进行相应的转换计算,而且是层层推进(中间需要生成新的数据,再用新数据来二次,三次计算)。因此,我的代码用到了for循环,来遍历几个字段(计算每个字段的方法是相同的,我目前也只是想到先处理一个字段,再用遍历的方法来解决)
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 我是新手,目前只会一点python..现在是有时间,才考虑去优化代码。目前就是用了time模块,来拆分,找出耗时比较大的代码块。另外,10W行的数据,是csv格式,我用的是pandas库的read_csv方法来读取,这个读取花了1秒的时间。
4 个月之前 回复
NotBack
notback 一个程序的运行效率和运算量,算法,结构都有关系。优化先优化前者,最后才优化代码。如果你会多种语言,简单点的方法,用其他更快的语言试一试速度,就知道了。python最nb的地方,就是,实在python计算效率太低了,你会用c,写个dll给他调用就好了。实在不会其他语言,或者其他方法,先看你的程序运行能不能跑满cpu,不能跑满cpu再优化。能跑满,暂时也不建议多优化,优化很费神的。除非,非要用python,也必须把时间控制再某个范围之内,再考虑优化吧。
4 个月之前 回复
NotBack
notback 回复lmw0320: 优化要分拆细化的。10w行,光文件读就够你优化的了。你用r还是rb读取?rb读取比r快将近一个数量级。最土的方式,自己用time.time来算时间,好点用timeit来算效率。或者用cProfile来看看效率,哪里用时最多。这些都没看,纠结一个变量是否需要,没意义。
4 个月之前 回复
lmw0320
lmw0320 回复NotBack: 了解你的意思了。只是我没有时间数据对比,也不知道目前的代码是否已经足够优化了,这样无法判定效率的好坏。只能是自己的代码前后对比,感觉是比之前优化了不少。对你说的绕开循环的手段,我知道一些内建方法,如apply,map等,我也尽量去使用了。但是可能并没有完全绕开,所以时间不会很快。比如10W行的数据进行计算,花了30多秒。。我也不知道这个算快还是算慢的。。
4 个月之前 回复
NotBack
notback 回复lmw0320: 优化是有针对性的,没代码泛泛而谈就是扯淡,python很多手段绕循环的。先coding,效率实在不够再想优化。如果发现多次编程都存在问题,再考虑优化编程的使用习惯。很难理解吗?
4 个月之前 回复
lmw0320
lmw0320 是这样的:我的数据里,其实是对某些指标的考核。这些指标其实是相似的,我一般是定义一个函数(涉及到略微复杂的计算公式),然后用for循环来遍历,适用到所有指标中。循环无法避免。你所提的最后一句话,有些看不太明白。。
4 个月之前 回复

该定义就定义,你说的使用变量循环速度的差别,就算有也微乎其微,和代码可读性相比,这才是最重要的。

lmw0320
lmw0320 回复D720CJM: 哈哈,我本来就是菜鸟一个。直说更好些,能让我更快知道实际情况。你们所说的意思,我大致理解是,首先要保证逻辑的合理性,减少不必要的重复计算。如果有内建方法的,则应尽量采用等等。。只是我的水平有限,现在还在一个人摸索阶段,只能多来这边请教下各位,才能少走弯路。
4 个月之前 回复
D720CJM
D720CJM 回复lmw0320: 请恕我直言,与其说是缩短了多少秒多少秒,倒不如说从一开始的做法就是错的,才会导致多浪费那么多……其实优化并不是那么容易的一件事情,我觉得这位说差距微乎其微,大概就是指这个意思。有时候的确运行起来耗时相差很大,但可能是处理的逻辑出了问题
4 个月之前 回复
lmw0320
lmw0320 了解了,谢谢。不过我试了下变量的替换处理,如果定义变量的情况下,10W的数据,我跑40秒,而如果不定义变量的话,则时间会缩短6秒多。
4 个月之前 回复

我看了你好几个问题,感觉纠结在这些旁枝末节啊,并不能够提升或者减少多少效率吧,你花在这里的时间更多……
不过变量定义不定义,还是具体情况具体分析,新的内存空间才会拖累速度
另外,在Python中,不可变类型,比如int类型,元组,当给变量赋值不同的值时,变量的地址会变化,太多对象的确麻烦
至于可读性,应该是尽量用面向对象的思维编程吧,提高代码的复用性,尽量不要重复写同样的代码……

lmw0320
lmw0320 回复D720CJM: 问题在于,这个函数的定义,我后期进行了修改,增加了参数的传入。时间上并没有明显提升。同时,我也查看了时间情况,定义函数并不耗时,主要的耗时都在apply函数
3 个月之前 回复
D720CJM
D720CJM 回复lmw0320: 你有没有善用参数和面向对象的设计?我个人是无法理解在for循环里面不断def定义新函数的,这样太夸张了,你的函数明明可以只在for循环外定义一个,然后输入不同的参数进行处理,返回不同的结果。事先说明啊,我没弄懂你那边贴的代码,但我觉得应该可以避免。
4 个月之前 回复
lmw0320
lmw0320 回复D720CJM: 我检查过代码,重复计算避免不了。。因为前后需求的地方不一样。我本来想定义函数来处理,但是函数定义很难受,必须在for循环内定义。。因为这个函数只能用来适用一个字段,我必须要用for循环来遍历每个相似的字段。。这样的话,导致函数的使用范围受限。也就无法避免相同函数,多次定义。。这种情况下,不知道是否就是你所谓的重复计算呢? 同时,水平有限(才半年多的经验),很多内建函数不太会用,也是个大问题。
4 个月之前 回复
D720CJM
D720CJM 回复lmw0320: 写对的代码,本身就是简洁明了的,代码本身就具有可读性。如果你用复杂的流程,很绕的逻辑去处理一个任务,自然而然就难懂了。另外,尽量少重复造轮子。比如遍历文件夹,可以用walk的,你非要自己写个函数,各种递归去实现,那注定了事倍功半。
4 个月之前 回复
D720CJM
D720CJM 回复lmw0320: 相差几十秒是很大问题了,还是要注重的效率的,但一般来说,你代码写对了,无用功少了,不会相差这么大的,可能是思路走岔了,多了很多重复计算……
4 个月之前 回复
lmw0320
lmw0320 没有人指点。。自己瞎琢磨。。所以会钻牛角尖。。你的意思就是还是要注重代码的可读性,相对比速度影响不大的情况下,还是要倾向可读性了?
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于变量定义的疑问
我再delphi的单元unit1中这样定义了变量rnvarrn Form1: TForm1;rn type TArrays=array[0..200] of integer;rn BubbleSortArrays: TArrays;rn却总是出现[Error] Unit1.pas(29): '=' expected but ':' found的错误,但是当我定义如下时错误就没有了。rnvarrn Form1: TForm1;rn type TArrays=array[0..200] of integer;rnvarrn BubbleSortArrays: TArrays;rn不知道原因在哪里,特来请教一下各位。
Python中变量的定义
[b]Python中变量是不需要预先定义变量类型。rn即使是变量名相同而值不同,那么它是两个变量。rn[code=python]rn var = 123rn print id(var)#id=24667936rn var = 456rn print id(var)#id=29986072[/code]rn说明123,和456是存在俩个变量中的。rnrn下面这个代码中id(sum)会有重复呢?rn(从23,24开始就两个地址在重复,)rn[code=python]sum = 0rn for i in range(101):rn sum += irn print i,id(sum)#这里不应该是100不同的地址码?rn else:rn print sum[/code]rn---------- PythonRun ----------rn0 24667428rn1 24667416rn2 24667392rn3 24667356rn4 24667308rn5 24667248rn6 24667176rn7 24667092rn8 24666996rn9 24666888rn10 24666768rn11 24666636rn12 24668476rn13 24668320rn14 24668152rn15 24667972rn16 24667780rn17 24667576rn18 24669344rn19 24669116rn20 24668876rn21 24668624rn22 24670344rn23 29985952rn24 29985964rn25 29985952rn26 29985964rn27 29985952rn28 29985964rn29 29985952rn30 29985964rn31 29985952rn32 29985964rn33 29985952rn34 29985964rn35 29985952rn36 29985964rn37 29985952rn38 29985964rn39 29985952rn40 29985964rn41 29985952rn42 29985964rn43 29985952rn44 29985964rn45 29985952rn46 29985964rn47 29985952rn48 29985964rn49 29985952rn50 29985964rn51 29985952rn52 29985964rn53 29985952rn54 29985964rn55 29985952rn56 29985964rn57 29985952rn58 29985964rn59 29985952rn60 29985964rn61 29985952rn62 29985964rn63 29985952rn64 29985964rn65 29985952rn66 29985964rn67 29985952rn68 29985964rn69 29985952rn70 29985964rn71 29985952rn72 29985964rn73 29985952rn74 29985964rn75 29985952rn76 29985964rn77 29985952rn78 29985964rn79 29985952rn80 29985964rn81 29985952rn82 29985964rn83 29985952rn84 29985964rn85 29985952rn86 29985964rn87 29985952rn88 29985964rn89 29985952rn90 29985964rn91 29985952rn92 29985964rn93 29985952rn94 29985964rn95 29985952rn96 29985964rn97 29985952rn98 29985964rn99 29985952rn100 29985964rn5050rnrn输出完成 (耗时 0 秒) - 正常终止
程序变量定义的疑问
typedef enum S_ERRrn rn S_ERR_OK, // no errorrn S_ERR_BUSY, // Read or Write process is in busy.rn S_ERR_NO_BUFFER, // no buffer room for data received rn S_ERR_TIMEOUT, // timeout when readrn S_ERR_UNKNOWN_CMD, // not in usern S_ERR_INVALID_CMD, // not in usern S_ERR_CANCEL, // not in usern S_ERR_PARA // provide function with invalid argumentrnS_ERR;rnrntypedef void(*CB_ERR) (S_ERR);rntypedef void(*CB_DONE_WRITE) (S_ERR); rntypedef void(*CB_DONE_READ) (S_ERR, UINT32); rnrn请问typedef 这三句话是什么意思?rnCB_ERR,CB_DONE_WRITE,CB_DONE_READ这三个该怎么使用的?或者告诉我这属于哪方面的知识?谢谢啦!
java变量定义疑问
请教大家一个问题。rn 比如rn FileInputStream fis = null;rn fis = new FileInputStream("d:\\test.txt");rn和rn FileInputStream fis;rn fis = new FileInputStream("d:\\test.txt");rn (或者说FileInputStream fis= new FileInputStream("d:\\test.txt");)rnQustion:rn 1.其中第二种方式应该也是对的吧?rn 2.然后第一种方式的先声明fis 未null的好处是 防止系统把不为空的内存赋值给fis?rn 3能给我说明下,第二种方式会很不安全吗?
Python中关于变量定义与字符编码
Python中关于变量定义与字符编码变量定义的规则:变量名只能是字母、数字或下划线的任意组合。变量名的第一个字符不能是数字以下关键字不能声明为变量名;and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,pass,p...
变量需要定义吗?
JS里的每个变量是否都需要进行显示定义,如var str,arr[10]?rnrn如何定义字符串变量str,整型变量:i,数组arr[10]rnrnrn是不是直接var 就可以了?
需要定义变量
代码如下:rn [code=sql]-- Create and Populate table dbo.NumsrnCREATE TABLE dbo.Nums(n INT NOT NULL CONSTRAINT PK_Nums PRIMARY KEY);rnGOrnDECLARE @max AS INT, @rc AS INT;rnSET @max = 100000;rnSET @rc = 1;rnrnINSERT INTO dbo.Nums VALUES(1);rnWHILE @rc * 2 <= @maxrnBEGINrn INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;rn SET @rc = @rc * 2;rnENDrnrnINSERT INTO dbo.Nums rn SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;[/code]rnrn报错如下:rn [code=sql]rnSET @max = 100000rn[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]必须声明标量变量 "@max"。 (137)[/code]rnrnrn实在看不出错在哪里,郁闷啊rn
十.python中变量的定义
变量:可变的量,区别于常量,常量为固定不可变的量变量的定义方式:变量名=value    例:a=1在定义变量名时尽量做到见名知意,例如:你定义一个变量为count,我大概就知道它表示统计总数变量名定义时注意事项:1. 变量名的定义不允许以数字开头2. 变量名不支持除了_(下划线)以外的特殊字符3. 变量名是区分大小写的4. 不支持中文作为变量名,必须使用英文5. 不能使用python关键字作为变...
关于python中[]的疑问
刚刚用python写了个qsort程序(如下) 运行结果不正确rn[code=Python]rnimport randomrnrndef qsort(L):rn if len(L) == 1:rn return Lrn elif len(L) == 0:rn return []rn pivot = L[random.randrange(len(L))]rn L1 = [x for x in L if x < pivot]rn L2 = [x for x in L if x > pivot]rn qsort(L1).append(pivot)rn L1 += qsort(L2)rn return L1rnrn[/code]rnrn调试了很久 发现问题出在return []这句上面rn改成 return L 就正确了rnrn正确代码:rn[code=Python]rnimport randomrnrndef qsort(L):rn if len(L) <= 1:rn return Lrn pivot = L[random.randrange(len(L))]rn L1 = [x for x in L if x < pivot]rn L2 = [x for x in L if x > pivot]rn qsort(L1).append(pivot)rn L1 += qsort(L2)rn return L1rnrn[/code]rnrn为什么L明明是空列表 却不能直接返回[] 代替呢?rnrn在idle里面 我这样输入L = [].append(9)rn再查看 L 发现什么都没有rn但是如果这样L = [] L.append(9)肯定是正确的呀rn[]难道在python里面不能当做空列表使用吗 还是什么其他原因
c++中定义函数或变量的疑问?
c++中定义函数或变量前面经常有些这样的字段,如: rnDECLARE_MESSAGE_MAP宏: rn#ifdef _AFXDLL rn#define DECLARE_MESSAGE_MAP() \ rnprivate: \ rnstatic const AFX_MSGMAP_ENTRY _messageEntries[]; \ rnprotected: \ rnstatic AFX_DATA const AFX_MSGMAP messageMap; \ rnstatic const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \ rnvirtual const AFX_MSGMAP* GetMessageMap() const; rn········· \ rnrn他们中间的AFX_MSGMAP_ENTRY,AFX_MSGMAP,AFX_DATA,AFX_CLASSINIT,_AFXDLL等他们是各起怎么作用?有什么关于这个方面知识资料? 先谢过了!
Python变量的一个疑问
class A:rn self.a = 0rn b=0rnrna、b这两个变量有什么区别,主要是作用域方面的,在Python中什么时候用self呢?rn
头文件中定义const变量的疑问
[quote]rn[color=#FF0000]常量表达式[/color]是编译器在编译时就能够计算出结果的整型表达式。rn[/quote]rnrn[quote]rn如果 const 变量不是用常量表达式初始化,那么它就不应该在头文件中定义。相反,和其他的变量一样,该 const 变量应该在一个源文件中定义并初始化。应在头文件中为它添加 extern 声明,以使其能被多个文件共享。rn[/quote]rnrn疑问:rn1. 只有整型的常亮表达式才可以定义const变量在头文件中吗?rn[code=c]rn//head.hrnconst double const_val = 9.5;rn[/code]rnrn[code=c]rn//main.cpprn#include rnusing namespace std;rnrn#include "head.h"rnrnint main()rnrn cout << const_val << endl;rn return 0;rnrn[/code]rnrn编译通过并成功执行输出9.5。rnrn不是很理解这边的说法。rnrn2. A)将const变量定义在头文件中,源文件包含该头文件对const变量进行访问;rn B)将const变量定义在源文件中,其他源文件利用extern声明对const变量进行访问;rn A)和B)有何区别了?rn 书上说用常量表达式初始化的const变量可以放在头文件中定义,即用A),其他的情况则选择B),但上面发现double初始化的const变量也可以用A),求解释?rn 另外A)实际上是不为const变量分配存储空间的,而B)则为const变量分配空间,是这样吗?rnrn谢谢!
在VB中定义数组变量的疑问?
Dim RecordArray(10) As String rnFor i = 0 To rs.RecordCount rnRecordArray(i) = rs!字段rnrs.MoveNext rnnextrn我现在不知道rs有多少记录rn那么rn我如何定义 RecordArray(数字)As String,数字等于多少?
关于SQLServer2008R2是否需要开启AWE的疑问
[b][size=14px]如题,操作系统是64位,内存32G,装的SQLServerR2企业版。rnrn那么问题来了:rn[color=#FF0000]是否需要开启AWE功能?rn[/color]rn[color=#FF0000]开启后能增加数据库的内存使用空间吗?比如可以使用64G的空间[/color]rnrn按照度娘搜来的资料来看,貌似64位的SQLServer已经不需要开启AWE了,只要设置最大最小内存就行rnrn求有经验的大牛提供点思路,感激不尽![/size]rn[/b]rn
Python 变量,定义变量,变量类型
  变量的定义.py: # 1. 定义一个变量记录 QQ 号码。 定义变量必须要有 = 赋值;没有=表示使用变量,会报未定义的错误 qq_number = &quot;1234567&quot; # 2. 定义一个变量记录 QQ 密码 qq_password = &quot;123&quot; # 如果希望通过解释器的方式,输出变量的内容,需要使用 print 函数 print(qq_number) print(qq_pass...
关于dowhile;循环以及c中变量定义的疑问。
[b]问题1.rndorni[color=#FF0000]nt a=1;[/color]rnwhile(a<1);这里为啥不能在里面定义a?提示错误是while()中的c没有定义。求指教。rn问题2.rnint main()rnint a,int b;rn[color=#FF0000]int c=a+b;[/color]rnscanf("%d%d",&a,&b);rnprintf("%d",c);这个例子中,int c=a+b;为什么一定要放在输入函数下面?求指教[/b][size=16px][/size]
python——变量的定义、命名
q
Python开发----变量的定义
一、变量的定义Python语言非常接近于人类说话得语言 因此变量定义很简单:a=1 b=1 c=a+b二、判断语句python的判断语句 if 条件 : 注意要有冒号 elif 判断条件 : 注意:if和elif之间一定要有缩进score=80 if score>=60: print("很好") elif s
python 定义变量
&amp;#13; 定义变量 什么是变量? 在程序运行过程中,其值可以改变的量 标识符(命令规范) 只能由数字、字母、下划线组成 不能以数字开头 不能是系统关键字 # 导入包import keyword​# 打印所有关键字print(keyword.kwlist) 命名原则 尽量做到见名知意 尽量用英文,实在不行全拼 推荐使用全小写加下...
python变量定义
变量定义 什么是变量? 在程序运行过程中,其值可以改变的量。 标识符(命令规范) 只能由数字、字母、下划线组成 不能以数字开头 不能是系统关键字 import keyword ​ #打印关键字列表 print(keyword.kwlist) 命名原则 尽量做到见名知意 尽量使用英文,实在不行使用全拼 推荐命名方式采用小写加下划线方式,如:user_name 变量赋值 # 单...
python学习&变量定义
学习一下python的变量: 变量的声明注意事项 字母,数字,下划线组成 第一字符是字母或者下划线 尽量不要使用下划线 下划线线之外,其他的特殊字符不能用于变量的声明 不要与关键字冲突,比如in len函数,if、while关键字冲突 我们来做一些练习 如果我们使用了数字的话,那么报下面的错误 现在我们来测试一下,使用其他字符声明的变量 那么,我们现在使用关键字来测试...
疑问:控件是否需要注册?
程序中引用了几个控件,编译程序后只拿*.exe到客户那里运行肯定是不行的。问题就是这些控件是否需要注册。rn 方法1:拷贝*.dll,*.ocx到system32,然后regsvr32。rn 方法2:让*.dll,*.ocx和*.exe一个目录即可。rn 上面两种方法都可以使程序正常运行,我的问题是rn1。你用哪种方法部署你的程序?rn2。如果是第一种方法,获取不同系统system32并copy文件到system32文件夹的程序你是怎么写的?rn3。第二种方法在注册表中没有信息,程序是怎么找到这个控件的?rn4。你认为哪种方法比较好?rnrn--------------------------------rn有识别不同系统system文件夹,并copy文件的程序请贴出来,谢谢。
一个关于Python变量赋值的小疑问
首先有rna = ['a','b','c','d']rnb = arn书上说这个时候b 不是a 的一个拷贝而是1个参考rn执行rndel a[0]后rna,b的值都为 ['b','c','d']rn这个时候如果再执行rna = ['123']rn为什么现在b的值不是['123']而是rn['b','c','d']呢??rn
关于堆栈段中定义的变量
请问在定义堆栈时,如rnstack segmentrn db 256 dup(0)rntos label wordrnstack endsrn其中的变量tos是存放在堆栈底吗?rn还是tos指向堆栈底?rn请指点!谢!
关于在com中定义变量
我用vb编写,在一个dll中有多个类,我定义了一个ADODB.Connection变量DBConn,希望在所有的类中调用,这个变量怎么定义,是否定义为global呢?初始化怎么写
vue中关于变量的定义
vue中有4种变量的定义 1data data中定义的变量是我们需要去维护的,会被多次改变或者使用到 2computed computed中计算属性中的定义的变量会被自动计算 需要注意的是computed中的变量不能在data中定义,会冲突,说简单点,data中的变量我们自己控制变化,在不同的methods中定义会怎样变化或者被赋值,比如购物车列表数据,在增删改过程中都会...
TESTBENCH中关于变量的定义
在编写testbench时,关于变量的定义常犯的错误就是将一个定义好的全局变量应用到了两个不同的alwaya模块中,如下面exmp1所示,那么由于这两个always块独立并行的工作机制,很可能会导致意想不到的后果。exmp1:实际上,在verilog中(编写testbench)时    如果在begin end 之间定义了always的块名,那么可以如examp2一样申明变量,这样两个always...
关于在C++中定义变量
例如:rna.h中定义rn#ifndef _A_H_rn#define _A_H_rnint number;rn#endifrnrn在b.h中包含a.hrnrn#include "a.h"rn然后把b.h放进主程序rnrn编译的时候提示“重复定义”,在c中没有这个问题,怎么解决?
【Python】Python中变量的定义、以及变量的命名规则
定义:Python中变量就是代表(或者引用)某值的名字。>>> y = 5 >>> y*2 10上述就是赋值操作,把5赋值给变量y。变量的命名规则:变量命名可以包括字母、数字、下划线。变量不可以数字开头。
在javascript中如何判断变量是否定义?
我想实现如下效果rnrn rnrn可是他直接给我报错了。。郁闷
js中判断变量是否已经定义
在前端经常需要判断一个变量是否已经定义,今天发现以前的做法是不对的。 以前的做法判断变量a是否定义: if(a){ ... } 这样在一些浏览器中会报错,原因是试图读一个未定的变量   正确的做法是: if(a === void(0)){ ... } 这样做的好处是可以兼容所有场景,记录一下 ...
关于结构定义的疑问
typedef struct tagWNDCLASS rn UINT style;rn WNDPROC lpfnWndProc;rn int cbClsExtra;rn int cbWndExtra;rn HINSTANCE hInstance;rn HICON hIcon;rn HCURSOR hCursor;rn HBRUSH hbrBackground;rn LPCTSTR lpszMenuName;rn LPCTSTR lpszClassName;rn WNDCLASS, *PWNDCLASS;rnrn新手,rn请问*PWNDCLASS是什么意思?有什么用?是结构的另一个别名吗?
Python,类中字典变量的疑问
各位python大神,我刚开始看python,遇到一个问题,有点疑惑,请高手给解下惑n我在一个类中定义了一个字符串变量和一个字典变量nn我实例化几个实例,分别对字符串变量和字典变量进行赋值,然后存储到一个链表中,最后打印发现字典变量总是会被最后一次赋值覆盖掉。nn字典变量在类中就相当于static了吗?nnnSysConfig 数据库中的信息读取后,保存到这个SysConfig中nn```n # coding=utf-8nnimport jsonn nclass SysConfig(object):n syscfg = n "id":0,n "name":"",n "switcherid":0,n "centreconsoleid":0,n "port":"",n "teacher":"",n "teacher_panorama":"",n "student":"",n "student_panorama":"",n "blackboard":"",n "course":""n n n test="test";n n def __init__(self):n pass;n n def getSysCfg(self):n return self.syscfg;n n def setSyscfg(self, cfg):n for key in cfg:n self.syscfg[key] = cfg[key];n n self.test = str(cfg);n```nn数据库操作类:n```n import pymysqlnimport sysnimport sysCfgnnclass GSDBHelper(object):n n dbConfig = n 'host':'127.0.0.1',n 'port':3306,n 'user':'root',n 'password':'root',n 'db':'db_test',n 'charset':'utf8mb4',n 'cursorclass':pymysql.cursors.DictCursorn n n dbsysList = [];nn def __init__(self):n pass;n n def setConfig(self, host, port, user, password, db):n self.dbConfig["host"] = host;n self.dbConfig["port"] = port;n self.dbConfig["user"] = user;n self.dbConfig["password"] = password;n self.dbConfig["db"] = db;n n # print("db config...", self.dbConfig);n n def getSysConfig(self):n try:n self.dbsysList.clear();n n conn = pymysql.connect(**self.dbConfig);n cur = conn.cursor();n cur.execute("select * from dbt_sys");n rows = cur.fetchall();n for row in rows:n dbsys = sysCfg.SysConfig();n dbsys.setSyscfg(row);n self.dbsysList.append(dbsys);n n for sysItem in self.dbsysList:n print(sysItem, " syscfg... ", sysItem.getSysCfg());n print(sysItem, " test 字符串 ", sysItem.test);n n except:n info = sys.exc_info();n print(info[0], ":", info[1]);n finally:n if "conn" in locals().keys():n conn.close();n```nnn执行:n```n import dbhelpernnif __name__ == '__main__':n db = dbhelper.GSDBHelper();n db.setConfig("127.0.0.1", 3306, "root", "ab123@", "db_gsaid");n db.getSysConfig();n```nnnnnnnn运行结果:n```n syscfg... 'id': 2, 'name': None, 'switcherid': 1, 'port': '"sprite":99991, "cameractrl1":2001, "cameractrl2":2002, "cameractrl3":2003, "cameractrl4":2004', 'centreconsoleid': None, 'teacher': None, 'teacher_panorama': None, 'student': None, 'student_panorama': None, 'blackboard': None, 'course': None, 'info': Nonen test 字符串 'id': 1, 'name': '', 'switcherid': 1, 'centreconsoleid': 1, 'port': '"sprite":9999, "cameractrl1":2001, "cameractrl2":20021, "cameractrl3":2003, "cameractrl4":2004', 'teacher': '"time":"min":2000, "max":600000, "lostormax_cutto":"student_panorama", "effect1":"id":16, "pect":100, "effect2":"id":16, "pect":0', 'teacher_panorama': '"time":"min":2000, "max":100000, "effect1":"id":16, "pect":100, "effect2":"id":16, "pect":0 ', 'student': '"time":"min":2000, "max":100000 , "effect1":"id":16, "pect":100, "effect2":"id":16, "pect":0', 'student_panorama': '"time":"min":2000, "max":100000 , "effect1":"id":16, "pect":100, "effect2":"id":16, "pect":0', 'blackboard': '"time":"min":2000, "max":100000, "effect1":"id":16, "pect":100, "effect2":"id":16, "pect":0 ', 'course': '"time":"min":2000, "max":100000 , "effect1":"id":16, "pect":100, "effect2":"id":16, "pect":0', 'info': Nonen syscfg... 'id': 2, 'name': None, 'switcherid': 1, 'port': '"sprite":99991, "cameractrl1":2001, "cameractrl2":2002, "cameractrl3":2003, "cameractrl4":2004', 'centreconsoleid': None, 'teacher': None, 'teacher_panorama': None, 'student': None, 'student_panorama': None, 'blackboard': None, 'course': None, 'info': Nonen test 字符串 'id': 2, 'name': None, 'switcherid': 1, 'centreconsoleid': None, 'port': '"sprite":99991, "cameractrl1":2001, "cameractrl2":2002, "cameractrl3":2003, "cameractrl4":2004', 'teacher': None, 'teacher_panorama': None, 'student': None, 'student_panorama': None, 'blackboard': None, 'course': None, 'info': Nonen```nnnnn
关于输入变量的疑问
$last=nl2br($post);rn……rn比如如上一个句子,其中$post是用户提交的内容。如果用户提交的内容里面含有“);……”的话,岂不是上面的语句就被截断了?而可以运行用户后面的省略号的内容?rn问的有点笨。见谅。
关于变量的疑问
我在建表定义时将"价格"定义为smallmoney,但运行时说:rn[color=#FF00FF]服务器: 消息 260,级别 16,状态 1,行 1rn不允许从数据类型 varchar 到数据类型 smallmoney 的隐性转换(表 'room.dbo.rooms',列 'r_price')。请使用 CONVERT 函数来运行此查询。[/color]rn当初我认为是加了[color=#FF0000]''[/color]的原因,但去掉[color=#FF0000]''[/color]后运行却出现:rn[color=#FF00FF]服务器: 消息 8152,级别 16,状态 9,行 1rn将截断字符串或二进制数据[/color]。rn没法我只好用代码去改[color=#800000]alter table rooms alter column r_price char(5),[/color]点知又不行,不给改:rn[color=#FF0000]服务器: 消息 260,级别 16,状态 1,行 1rn不允许从数据类型 smallmoney 到数据类型 char 的隐性转换(表 'room.dbo.rooms',列 'r_price')。请使用 CONVERT 函数来运行此查询[/color]rnrn为啥会出现这样情况,点解决?高手赐教!!!
关于临界区变量的疑问?
DELPHI里线程之间用临界区变量来进行线程之间的数据保护,我的疑问是,临界区里的数据也是进行CPU时间轮换的吗?一般一个线程的CPU时间是如何进行分配的。如果临界区的数据执行时间远远大于CPU轮换时间,会不会导致其他线程一直死锁状态。
C++ 虚函数是否需要定义?
C++ 虚函数是否需要定义? 个人觉得这个问题比较重要。以下是鄙人在阅读了其他博客总结出来的,若有错误,希望得到大家的批评修改!谢谢! 问题: C++中的虚函数必须有定义吗? 答:若该类有实例化对象,则虚函数必须定义,而不是简单的声明。(1)若该类有实例化对象,在类中仅仅声明虚函数而没有定义实现,编译是不可以通过的,将会出现连接错误!(2)若该类没有实例化对象,则只声明不定义是可以通过编译的
ansible 变量检测是否定义
如果需要的变量没有定义,那么可以skip或者使用jinja2的defined如下所示: tasks:     - shell: echo &quot;I've got '{{ foo }}' and am not afraid to use it!&quot;       when: foo is defined     - fail: msg=&quot;Bailing out. ...
07_变量是否有定义
<p>rn <span style="color:#3D3D3D;">本课程<span>深入浅出地剖析和分解了PHP企业级开发项目在实际工作中的应用,</span><span></span>每个过程给大家详细讲解。</span> rn</p>rn<p>rn <br />rn</p>rn<p>rn <br />rn</p>
解决判断变量是否定义
python中如何判断一个变量是否定义过,不是判断变量的值。 最笨的方法是用try try: a # 要判断的变量名称 except NameError: a_exists = False else: a_exists = True 这样的方法是可以判断出来的,但是不够优雅,python中有很多内置函数是可以实现这个功能的 &amp;amp;amp;g...
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数