论坛首页 编程语言技术论坛

从实际工作需要与经历说说我选择PYTHON的原因(附相关源代码)

浏览 39913 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-05-05  
py和java被学校大量引入课程了,ruby好像还没有。
0 请登录后投票
   发表时间:2009-05-05  
尝试哈perl看看
0 请登录后投票
   发表时间:2009-05-05   最后修改:2009-05-05
Hooopo 写道
xukong 写道
呵,你还在花时间改进啊...

我在X60上测试了10次你的代码,环境如前,不要说100万,50万都还是保持在31秒左右,50万py是12秒,而且现在的程序已经忽略了数据处理的正确和程序的可读性,我原来写的ruby代码虽然性能不好,但是还算具有一定可读性,也是能够实际运行解决真正问题的代码啊

使用PYTHON我花了20%的时间解决了80%的性能问题,性能还不错,但是象现在ruby已经花了太多时间来改进性能这个问题了,而且这样完全追求性能的演示写法我也不喜欢,毕竟优化是放在正确和可读性都保证之后,优化到极点,代码多半也不是那么好看懂了,时间花费也更多了


可读性是指给学过ruby的人读的,代码可读性也不是像你那样这么简单的脚本写了230多行,弄那么多不知所云的变量。还有这样的代码:
if ((ic != nil) && (ic > 0))

if (result_search == nil)

虽然您号称写了10年程序,但是单从你写的那ruby代码来看你和我一样属于对ruby还没入门级别的。
至于你喜欢用python这个是你的自由,谁也管不到。可是拿这样水准的ruby代码来说明你选择python的原因未免是在忽悠别人也是忽悠自己。


为什么非要上纲上线的说什么忽悠?我并没有贬低什么来吸引谁,只是表达了我的疑惑,我的所有贴子最多只表明了认识不到位,有失偏颇而已...

而且我一再说了,是在2个几乎一模一样的代码执行后,结果另我奇怪才发的帖子,为什么几乎一模一样的代码PY就要快,代码中也并没有用什么独有的数据类型和相关操作(就是哈希表,数组,简单的字符串操作,文件读写,呵,一般好象也就用到这些也能解决大多数问题了这些最常用到的要用特别的语句调用才能有效果?),我功力不够,不知道是怎么回事,就上来发表请大家指点下,说得好听点,就叫抛砖引玉吧...

if ((ic != nil) && (ic > 0))
这么写自然有道理

tmp_date = "abc:"
ic = tmp_date.index(":")

if (ic > 0)
    puts "ic > 0"
end

你去掉和加上"abc:"中的:执行试试,然后再用我的语句加上和去掉:试试
因为我从数据库中导出的时间字段在小于10点前小时是不会补成09的,而我在按2位处理小时时,如果这条记录是10点前的,就会取到包含如9:的错误值,所以必须判断是否有:,有的话就要重新取值

if (result_search == nil)

有什么不对?变量名取长了?我写的代码变量名确实比较长,个人习惯,总比A,B,C好吧
哦,我查了下,看到这篇帖子 http://www.ruby-lang.org.cn/forums/thread-697-1-1.html
不过里面说了 我们熟悉的 == 用来比较存在对象中的值 我是比较值是否为空,应该可以用==吧

我承认我写的代码有点冗长,不过这是个人习惯而已,我觉得这样看得明白,结果同样的写法在RUBY中影响了性能,PY中没有,我也没有办法,事前没有想到过...
0 请登录后投票
   发表时间:2009-05-05   最后修改:2009-05-05
xukong 写道

if (result_search == nil)

有什么不对?变量名取长了?我写的代码变量名确实比较长,个人习惯,总比A,B,C好吧
哦,我查了下,看到这篇帖子 http://www.ruby-lang.org.cn/forums/thread-697-1-1.html
不过里面说了 我们熟悉的 == 用来比较存在对象中的值 我是比较值是否为空,应该可以用==吧

我承认我写的代码有点冗长,不过这是个人习惯而已,我觉得这样看得明白,结果在RUBY中影响了性能,PY中没有,我也没有办法,事前没有想到过...

同上,
if (!result_search)

即可,如果觉得这样不够“清晰”的话,我们看看相对“传统”的语言,比如Java:
Boolean checked;
//check 被赋值;
if (Checked) //第一种写法;
if (Checked == true) //第二种写法;

我想第二种并不就让人得到更多的信息。
如果是Python的话,这个问题比Ruby更加明显;
比如,我们要知道字符串是否为空或None,这通常拥有相似的意义:
if str: #第一种
.......
if (str != None) or (str != ''): #第二种

我个人觉得,习惯不是在任何时候都能作为挡箭牌。
希望我的措辞没有过激的地方。
0 请登录后投票
   发表时间:2009-05-05  
第二种可以让人家知道这是个bool变量,而第一个也许只是!=NULL

# if (Checked) //第一种写法; 
# if (Checked == true) //第二种写法;
0 请登录后投票
   发表时间:2009-05-05   最后修改:2009-05-05
判断简单的为真为假我才会用 if (result_search) 而且要是确切的布尔型

但我现在判断的是否为空值,在这种情况下我从来没有用过上面的写法

一般认为非0值才是为真,NIL确实算得上是0之外,但是实际上NIL是什么都没有,我不习惯将什么都没有当作真,一定要有个值哪怕是真是假,是正是负,还是有值的什么任何类型

下面的代码证实了我的想发,NIL不为真

fwdsendwaitstatus = Hash.new()

k = "1"
x = k
fwdsendwaitstatus[k] = x

k = "2"
result_search = fwdsendwaitstatus[k]

if (result_search == nil)
    puts "result_search == nil"
end

if (result_search)
    puts "result_search == nil is true, yes yes yes"
else
    puts "result_search == nil is true, no no no"
end


我写成 if (result_search == nil)  是当为空时要做什么事
如果写成你所说的 if (result_search)
最终什么都做不成...

呵,挡箭牌,我只是有点不自甘菲薄而已...

倒霉,没有注意到那个!,我最不喜欢用的就是!,一不小心会看漏掉,直观的东西还要反过来再想,要做2道思考...

仔细想了下,还是觉得蛮怪的 if (!result_search) 做非空操作来判断它是空为真(为什么不直接判断它是空,非要多手多脚做个非空为真操作来判段它是空,从性能上考虑就多了个无端端的!非操作)后才做当 result_search 为空时的操作

呵,说是挡箭牌就挡箭牌牌吧,楼上的可能觉得if (!result_search)代码少,觉得优雅,不过我还是喜欢 if (result_search == nil) 的习惯...
0 请登录后投票
   发表时间:2009-05-05  
判断简单的为真为假我才会用 if (result_search) 而且要是确切的布尔型

引用
但我现在判断的是否为空值,在这种情况下我从来没有用过上面的写法

你是要说是否为nil吧?什么叫是否为空值?ruby中nil,empty,undefined是三个不同的概念。说的清楚点好吗?

引用
一般认为非0值才是为真,NIL确实算得上是0之外,但是实际上NIL是什么都没有,我不习惯将什么都没有当作真,一定要有个值哪怕是真是假,是正是负,还是有值的什么任何类型

什么叫一般认为非0值才是真,麻烦看看ruby的语法再说好不好?怎么还扯上0了?ruby中只有nil和false为假,其余都为真,不管是0还是“”。。。

引用
下面的代码证实了我的想发,NIL不为真

楼主,恭喜你,你发现了一个惊天秘密!!


引用
fwdsendwaitstatus = Hash.new()

k = "1"
x = k
fwdsendwaitstatus[k] = x

k = "2"
result_search = fwdsendwaitstatus[k]

if (result_search == nil)
    puts "result_search == nil"
end

if (result_search)
    puts "result_search == nil is true, yes yes yes"
else
    puts "result_search == nil is true, no no no"
end

证明一个nil为假这样的问题用得着这样吗?
if nil
 puts "no"
else
 puts "yes"
end


引用
我写成 if (result_search == nil)  是当为空时要做什么事
如果写成你所说的 if (result_search)
最终什么都做不成...

呵,挡箭牌,我只是有点不自甘菲薄而已...

倒霉,没有注意到那个!,我最不喜欢用的就是!,一不小心会看漏掉,直观的东西还要反过来再想,要做2道思考...

仔细想了下,还是觉得蛮怪的 if (!result_search) 做非空转换判断后来做当 result_search 为空时的操作

呵,说是挡箭牌就挡箭牌牌吧,我还是喜欢 if (result_search == nil) 的习惯...

怕漏掉!?这样啊:
!!!result_search还看不见可以!!!!!result_search呵呵,这个娱乐。。
ruby里习惯用法是这样的:if result_search.nil?


最后说一句,拿习惯当挡箭牌也行,但是基本语法要知道吧?
0 请登录后投票
   发表时间:2009-05-05   最后修改:2009-05-05
呵,我本来想改的,不过想到这是自己的真实思路,就没有改

我以前理解NULL,真假值之间是看懂书本上的,实际用好了就没有管了,今天只是实际验证下自己一贯的思路是正确的,如此而已,谁以为自己抓住了什么就抓住了什么吧,呵...

if (result_search == nil)别人都贴出代码来了,你说我讨论什么

代码我是写多了,不过我不习惯无中生有,代码中操作到空要避免,所以没有显示操作空的习惯

至于说到!,我不习惯多手多脚,所以是不会使用 if (!nil) 的语句去判断空的

if result_search.nil? 我没有用过

if (result_search == nil) 这个语句,这个概念在大多数常用语言中应该是通用的,我也不想改变到特殊的语法,至于会被说不够RUBY,认了...
0 请登录后投票
   发表时间:2009-05-05  
楼主参见programming ruby第五章 标准类型。。。。。。
0 请登录后投票
   发表时间:2009-05-05  
xukong 写道


另外看了改进后的RUBY,有点小寒,不是对RUBY有点了解的,有些符号操作就看不懂了,当然不懂就不乱用,也不要乱发表评论,这个我是吸取教训了(不过我也只是常规写法啊,谁想到会有这么大差距,关键是2个代码都几乎一样,结果不一样,就有点被迷惑,想当然了),不过要吸引同事,初期还是: 嘿,我这个程序跑得还比较快,也不太难看懂,有兴趣学下没有,呵,呵...

真不知道楼主怎么想的,您一次又一次的强调代码一样

代码一样能说明什么问题呢?

如果您说您是初学者这样说有情可原,可是,,前面您又说自己写了10程序,也写过省级项目。。。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics