[CPyUG] 要pythonic还是要易读性?

classic Classic list List threaded Threaded
18 messages Options
Reply | Threaded
Open this post in threaded view
|

[CPyUG] 要pythonic还是要易读性?

Gaicitadie
从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:

for i in range(1,10):
    print
    for j in range(1,i+1):
        print "%d*%d=%2d" % (j,i,i*j) ,


后来又有人出了一个够pythonic的,只需要一行:

print  '\n'.join([ ' '.join([ "%d*%d=%2s" %(y,x,x*y) for y in range(1,x
+1)]) for x in range(1,10)])


但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。

那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?


我个人的理解:
    用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
管理,用后面那种,尽量把代码写在一行。

不知道我理解的对不对,请高手指正

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

LaiYonghao
2010/6/1 Gaicitadie <[hidden email]>:
> 从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:
>
> for i in range(1,10):
>    print
>    for j in range(1,i+1):
>        print "%d*%d=%2d" % (j,i,i*j) ,
>
>
> 后来又有人出了一个够pythonic的,只需要一行:
谁说下面的代码是 pythonic 的?脑子被蛇给咬了吧。

>
> print  '\n'.join([ ' '.join([ "%d*%d=%2s" %(y,x,x*y) for y in range(1,x
> +1)]) for x in range(1,10)])
>
>
> 但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。
>
> 那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?
>
>
> 我个人的理解:
>    用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
> 管理,用后面那种,尽量把代码写在一行。
>
> 不知道我理解的对不对,请高手指正
>
> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>



--
web site:http://laiyonghao.com
twitter: http://twitter.com/laiyonghao

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

Luo Jiesi
In reply to this post by Gaicitadie
这也不是pythonic吧,这是函数编程。

2010/6/1 Gaicitadie <[hidden email]>
从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:

for i in range(1,10):
   print
   for j in range(1,i+1):
       print "%d*%d=%2d" % (j,i,i*j) ,


后来又有人出了一个够pythonic的,只需要一行:

print  '\n'.join([ ' '.join([ "%d*%d=%2s" %(y,x,x*y) for y in range(1,x
+1)]) for x in range(1,10)])


但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。

那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?


我个人的理解:
   用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
管理,用后面那种,尽量把代码写在一行。

不知道我理解的对不对,请高手指正

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp



--
luojiesi@zju

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

dongyi


在 2010年6月1日 下午4:36,Luo Jiesi <[hidden email]>写道:
这也不是pythonic吧,这是函数编程。


这是一行流的恶趣味

 
2010/6/1 Gaicitadie <[hidden email]>
从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:


for i in range(1,10):
   print
   for j in range(1,i+1):
       print "%d*%d=%2d" % (j,i,i*j) ,


后来又有人出了一个够pythonic的,只需要一行:

print  '\n'.join([ ' '.join([ "%d*%d=%2s" %(y,x,x*y) for y in range(1,x
+1)]) for x in range(1,10)])


但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。

那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?


我个人的理解:
   用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
管理,用后面那种,尽量把代码写在一行。

不知道我理解的对不对,请高手指正

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp



--
luojiesi@zju

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

pansz-2
In reply to this post by Gaicitadie
2010/6/1 Gaicitadie <[hidden email]>:
> 从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:
>
> for i in range(1,10):
>    print
>    for j in range(1,i+1):
>        print "%d*%d=%2d" % (j,i,i*j) ,
>
>
> 后来又有人出了一个够pythonic的,只需要一行:

建议楼主狗一下什么叫 pythonic ,然后就不会提出这样的问题了。

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

Zephyr-4
In reply to this post by Gaicitadie
我觉得,最应该使用“函数式”的地方,在于多层嵌套的循环中。把其中的循环使用“函数式”的方法来改写,代码要好看点。

for member in group:
    for p in member.keys():
        f(p)

改成:

for member in group:
    map(f, member.keys())

只有一两层的“函数式”代码,不会难读的。

在 2010年6月1日 下午4:20,Gaicitadie <[hidden email]>写道:
我个人的理解:
   用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
管理,用后面那种,尽量把代码写在一行。

不知道我理解的对不对,请高手指正



--
From:  Yesheng Zou

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

机械唯物主义 : linjunhalida
少用map。因为是在循环里面做函数调用,慢的很。
并且不是所有人都懂函数式的。

2010/6/1 Yesheng Zou <[hidden email]>
我觉得,最应该使用“函数式”的地方,在于多层嵌套的循环中。把其中的循环使用“函数式”的方法来改写,代码要好看点。

for member in group:
    for p in member.keys():
        f(p)

改成:

for member in group:
    map(f, member.keys())

只有一两层的“函数式”代码,不会难读的。

在 2010年6月1日 下午4:20,Gaicitadie <[hidden email]>写道:

我个人的理解:
   用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
管理,用后面那种,尽量把代码写在一行。

不知道我理解的对不对,请高手指正



--
From:  Yesheng Zou


--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

Zephyr-4
我记得 map 要比 for 的效率要好? [] 又比 map 要好,但我觉得它不如 map 用得舒服(遍历方面,不是构造 list)。

难得,我一直处在一个误区当中?

在 2010年6月2日 上午7:32,机械唯物主义 : linjunhalida <[hidden email]>写道:
少用map。因为是在循环里面做函数调用,慢的很。
并且不是所有人都懂函数式的。
 
--
From:  Yesheng Zou

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

机械唯物主义 : linjunhalida
奇怪,map是最快的?

for spend 0.000483036041 seconds.
[] spend 0.000254154205 seconds.
map spend 0.000143051147 seconds.


2010/6/2 Yesheng Zou <[hidden email]>
我记得 map 要比 for 的效率要好? [] 又比 map 要好,但我觉得它不如 map 用得舒服(遍历方面,不是构造 list)。

难得,我一直处在一个误区当中?

在 2010年6月2日 上午7:32,机械唯物主义 : linjunhalida <[hidden email]>写道:
少用map。因为是在循环里面做函数调用,慢的很。
并且不是所有人都懂函数式的。
 
--
From:  Yesheng Zou

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

t.py (996 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

阿暖
array 最快

On 6/2/10, 机械唯物主义 : linjunhalida <[hidden email]> wrote:

> 奇怪,map是最快的?
>
> for spend 0.000483036041 seconds.
> [] spend 0.000254154205 seconds.
> map spend 0.000143051147 seconds.
>
>
> 2010/6/2 Yesheng Zou <[hidden email]>
>
>> 我记得 map 要比 for 的效率要好? [] 又比 map 要好,但我觉得它不如 map 用得舒服(遍历方面,不是构造 list)。
>>
>> 难得,我一直处在一个误区当中?
>>
>> 在 2010年6月2日 上午7:32,机械唯物主义 : linjunhalida <[hidden email]>写道:
>>
>>> 少用map。因为是在循环里面做函数调用,慢的很。
>>> 并且不是所有人都懂函数式的。
>>>
>>
>> --
>> From:  Yesheng Zou
>>
>>  --
>> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
>> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
>> 详情: https://groups.google.com/group/python-cn
>> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>>
>
> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

张沈鹏
In reply to this post by Gaicitadie
在 2010年6月1日 下午4:20,Gaicitadie <[hidden email]> 写道:

> 从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:
>
> for i in range(1,10):
>    print
>    for j in range(1,i+1):
>        print "%d*%d=%2d" % (j,i,i*j) ,
>
>
> 后来又有人出了一个够pythonic的,只需要一行:
>
print  '\n'.join([
                 ' '.join([
                         "%d*%d=%2s" %(y,x,x*y)
                         for y in range(1,x +1)
                  ])
           for x in range(1,10)
         ])

这样排版


>
>
> 但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。
>
> 那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?
>
>
> 我个人的理解:
>    用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
> 管理,用后面那种,尽量把代码写在一行。
>
> 不知道我理解的对不对,请高手指正
>
> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>



--
关于我 : http://kanrss.com/@zsp

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

Zoom.Quiet
2010/6/2 张沈鹏 <[hidden email]>:

> 在 2010年6月1日 下午4:20,Gaicitadie <[hidden email]> 写道:
>> 从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:
>>
>> for i in range(1,10):
>>    print
>>    for j in range(1,i+1):
>>        print "%d*%d=%2d" % (j,i,i*j) ,
>>
>>
>> 后来又有人出了一个够pythonic的,只需要一行:
>>
> print  '\n'.join([
>                 ' '.join([
>                         "%d*%d=%2s" %(y,x,x*y)
>                         for y in range(1,x +1)
>                  ])
>           for x in range(1,10)
>         ])
>
> 这样排版
>
是也乎,是也乎,
这是 SOP ~ 面向屏幕的编程!很靠谱的...
类似的...
http://wiki.woodpecker.org.cn/moin/PyPrimeNumberGenerator

>
>>
>>
>> 但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。
>>
>> 那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?
>>
>>
>> 我个人的理解:
>>    用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
>> 管理,用后面那种,尽量把代码写在一行。
>>
>> 不知道我理解的对不对,请高手指正
>>
>> --
>> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
>> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
>> 详情: https://groups.google.com/group/python-cn
>> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>>
>
>
>
> --
> 关于我 : http://kanrss.com/@zsp
>
> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>



--
http://zoomquiet.org 人生苦短? Pythonic!

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

老光
In reply to this post by 张沈鹏
折个衷嘛,象这样:

for i in range(1,10):
    print ' '.join(["%d*%d=%2d" % (j,i,i*j) for j in range(i,10)])

减少了行数,也不至于一行情况下,后面的嵌套难以理解.
好象有什么语言里range(1,10)是这样表示的:(1..10),好爽啊!

----- Original Message -----
From: "张沈鹏" <[hidden email]>
To: <[hidden email]>
Sent: Wednesday, June 02, 2010 10:34 AM
Subject: Re: [CPyUG] 要pythonic还是要易读性?


>在 2010年6月1日 下午4:20,Gaicitadie <[hidden email]> 写道:
>> 从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:
>>
>> for i in range(1,10):
>>    print
>>    for j in range(1,i+1):
>>        print "%d*%d=%2d" % (j,i,i*j) ,
>>
>>
>> 后来又有人出了一个够pythonic的,只需要一行:
>>
> print  '\n'.join([
>                 ' '.join([
>                         "%d*%d=%2s" %(y,x,x*y)
>                         for y in range(1,x +1)
>                  ])
>           for x in range(1,10)
>         ])
>
> 这样排版
>
>
>>
>>
>> 但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。
>>
>> 那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?
>>
>>
>> 我个人的理解:
>>    用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
>> 管理,用后面那种,尽量把代码写在一行。
>>
>> 不知道我理解的对不对,请高手指正
>>
>> --
>> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
>> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
>> 详情: https://groups.google.com/group/python-cn
>> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>>
>
>
>
> --
> 关于我 : http://kanrss.com/@zsp
>
> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

[CPyUG] Re: 要pythonic还是要易读性?

GeekGao
In reply to this post by Gaicitadie
额,这叫"Pythonic" ? 神似Perl.

On Jun 1, 4:20 pm, Gaicitadie <[hidden email]> wrote:

> 从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:
>
> for i in range(1,10):
>     print
>     for j in range(1,i+1):
>         print "%d*%d=%2d" % (j,i,i*j) ,
>
> 后来又有人出了一个够pythonic的,只需要一行:
>
> print  '\n'.join([ ' '.join([ "%d*%d=%2s" %(y,x,x*y) for y in range(1,x
> +1)]) for x in range(1,10)])
>
> 但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。
>
> 那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?
>
> 我个人的理解:
>     用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
> 管理,用后面那种,尽量把代码写在一行。
>
> 不知道我理解的对不对,请高手指正

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

Zephyr-4
In reply to this post by 机械唯物主义 : linjunhalida
map一块,应该这样写吧:

print '\n'.join(
    map(lambda i:
            ' '.join(map(lambda j: '%d*%d=%2d' % (i,j,i*j), range(1,i+1))),
        range(1,10))
)

而且,对于 [] 和 map 还有 join 操作的额外消耗。如果只是输出,则不需要进行 join 操作。包装一个输出函数直接输出就可以了(for也不用 print,而用这个包装出来的函数)。如果是要得到一个列表,那么 for 还需要进行入表的操作。

我这里每次结果波动很大。

把需求的数从10改到比较大时(如1000),三者的时间是差不多的。

至少,这三种方式对效率没有质的影响,还是代码清晰易读为首要考虑因素比较好 :D

在 2010年6月2日 上午10:18,机械唯物主义 : linjunhalida <[hidden email]>写道:
奇怪,map是最快的?

for spend 0.000483036041 seconds.
[] spend 0.000254154205 seconds.
map spend 0.000143051147 seconds.

 
--
From:  Yesheng Zou

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

heroboy


2010/6/2 Yesheng Zou <[hidden email]>
map一块,应该这样写吧:

print '\n'.join(
    map(lambda i:
            ' '.join(map(lambda j: '%d*%d=%2d' % (i,j,i*j), range(1,i+1))),
        range(1,10))
)

而且,对于 [] 和 map 还有 join 操作的额外消耗。如果只是输出,则不需要进行 join 操作。包装一个输出函数直接输出就可以了(for也不用 print,而用这个包装出来的函数)。如果是要得到一个列表,那么 for 还需要进行入表的操作。

我这里每次结果波动很大。

把需求的数从10改到比较大时(如1000),三者的时间是差不多的。

至少,这三种方式对效率没有质的影响,还是代码清晰易读为首要考虑因素比较好 :D

我猜时间差不多的原因是因为,测试的时候print没去掉。
 

在 2010年6月2日 上午10:18,机械唯物主义 : linjunhalida <[hidden email]>写道:

奇怪,map是最快的?

for spend 0.000483036041 seconds.
[] spend 0.000254154205 seconds.
map spend 0.000143051147 seconds.

 
--
From:  Yesheng Zou

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

[CPyUG] Re: 要pythonic还是要易读性?

Dingyuan Rao
In reply to this post by 机械唯物主义 : linjunhalida
你看到速度差异是因为print的次数造成的。print的时候,如果遇到换行,就会flush缓存。这个会花比较多的时间。
你可以试试把第一层循环里面的print语句去掉,这样他们的时间就差不多了




On Jun 2, 10:18 am, 机械唯物主义 : linjunhalida <[hidden email]>
wrote:

> 奇怪,map是最快的?
>
> for spend 0.000483036041 seconds.
> [] spend 0.000254154205 seconds.
> map spend 0.000143051147 seconds.
>
> 2010/6/2 Yesheng Zou <[hidden email]>
>
>
>
> > 我记得 map 要比 for 的效率要好? [] 又比 map 要好,但我觉得它不如 map 用得舒服(遍历方面,不是构造 list)。
>
> > 难得,我一直处在一个误区当中?
>
> > 在 2010年6月2日 上午7:32,机械唯物主义 : linjunhalida <[hidden email]>写道:
>
> >> 少用map。因为是在循环里面做函数调用,慢的很。
> >> 并且不是所有人都懂函数式的。
>
> > --
> > From:  Yesheng Zou
>
> >  --
> > 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
> > 退订:http://tinyurl.com/45a9tb//针对163/qq邮箱:http://tinyurl.com/4dg6hc
> > 详情:https://groups.google.com/group/python-cn
> > 严正: 理解列表! 智慧提问!http://wiki.woodpecker.org.cn/moin/AskForHelp
>
>  t.py
> < 1KViewDownload

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 要pythonic还是要易读性?

机械唯物主义 : linjunhalida
In reply to this post by 老光
一个点是pythonic,两个点是magic。

2010/6/2 老光 <[hidden email]>
折个衷嘛,象这样:

for i in range(1,10):
   print ' '.join(["%d*%d=%2d" % (j,i,i*j) for j in range(i,10)])

减少了行数,也不至于一行情况下,后面的嵌套难以理解.
好象有什么语言里range(1,10)是这样表示的:(1..10),好爽啊!

----- Original Message -----
From: "张沈鹏" <[hidden email]>
To: <[hidden email]>
Sent: Wednesday, June 02, 2010 10:34 AM
Subject: Re: [CPyUG] 要pythonic还是要易读性?


>在 2010年6月1日 下午4:20,Gaicitadie <[hidden email]> 写道:
>> 从网上看到一个打印九九乘法表的讨论。一个让最容易理解的:
>>
>> for i in range(1,10):
>>    print
>>    for j in range(1,i+1):
>>        print "%d*%d=%2d" % (j,i,i*j) ,
>>
>>
>> 后来又有人出了一个够pythonic的,只需要一行:
>>
> print  '\n'.join([
>                 ' '.join([
>                         "%d*%d=%2s" %(y,x,x*y)
>                         for y in range(1,x +1)
>                  ])
>           for x in range(1,10)
>         ])
>
> 这样排版
>
>
>>
>>
>> 但后面的这个虽然只有一行,但感觉很难读,像正则表达式一样,看似简洁,但代码理解起来很费力。
>>
>> 那么在Python的开发中要用前面的那种循规蹈矩还是后面这种尽可能缩减行数的呢?
>>
>>
>> 我个人的理解:
>>    用Python开发一些软件,特别是有些大型的软件的时候用前面那种循规蹈矩的,便于以后代码维护。如果用Python当做shell进行系统
>> 管理,用后面那种,尽量把代码写在一行。
>>
>> 不知道我理解的对不对,请高手指正
>>
>> --
>> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
>> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
>> 详情: https://groups.google.com/group/python-cn
>> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>>
>
>
>
> --
> 关于我 : http://kanrss.com/@zsp
>
> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:[hidden email]
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp