推荐一个神器: pipe

44 views
Skip to first unread message

机械唯物主义 : linjunhalida

unread,
Mar 29, 2011, 11:19:19 PM3/29/11
to python-cn`CPyUG`华蟒用户组
在python里面实现命令行的pipe功能, 比如: [1,3,2,0] | sort

介绍在这里: http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx

安装只需要easy_install pipe.

我写了一个小用法:
在ruby下面有这样的魔法: 1.hours.ago, 它估计是采用修改整型这个类的方式来做的, 这样太不pythonic.. (不知道我说错没有?)

利用pipe的话, 可以这样写:
1 | hour | ago

代码如下:
https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py

个人觉得这个东西完全可以扩展到python核心模块中去了.
大家可以写点好玩的东西回复哈.

ubunoon

unread,
Mar 29, 2011, 11:31:18 PM3/29/11
to pyth...@googlegroups.com
额,这个东西好玩得很哪。比lambda语法要简单容易得多。


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
To be pythoner
My blog: http://www.cnblogs.com/ubunoon/
珍珠饰品:http://zjyuezz.cn.alibaba.com/


机械唯物主义 : linjunhalida

unread,
Mar 29, 2011, 11:32:57 PM3/29/11
to python-cn`CPyUG`华蟒用户组
官方网站: https://github.com/JulienPalard/Pipe

我本来以为它是修改了python核心模块, 结果发现它只是这样的:
提供pipe功能的东西都继承至Pipe类:
class Pipe:
def __init__(self, function):
self.function = function

def __ror__(self, other):
return self.function(other)

核心在于 __ror__, 这个函数其实就是 | 符号.
当python在解析 [1, 2, 3] | sort 的时候, 如果发现无法在左边的list里面找到or比较的函数的时候,
就会去调用右边的函数__ror__,
就会出现我们想要的结果: 把左边的值传给 sort.function 去执行.

核心代码少得可怜, 大家都可以去观摩下: https://github.com/JulienPalard/Pipe/blob/master/pipe.py


2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>:

lu_zi_2000

unread,
Mar 29, 2011, 11:40:32 PM3/29/11
to pyth...@googlegroups.com
��Ȥ��ѧϰ
�� 2011��03��30�� 11:32, ��еΨ������ : linjunhalida д��:
> �ٷ���վ: https://github.com/JulienPalard/Pipe
>
> �ұ�����Ϊ�����޸���python����ģ��, �������ֻ�������:
> �ṩpipe���ܵĶ������̳���Pipe��:

> class Pipe:
> def __init__(self, function):
> self.function = function
>
> def __ror__(self, other):
> return self.function(other)
>
> �������� __ror__, ���������ʵ���� | ���.
> ��python�ڽ��� [1, 2, 3] | sort ��ʱ��, ������޷�����ߵ�list�����ҵ�or�Ƚϵĺ����ʱ��,
> �ͻ�ȥ�����ұߵĺ���__ror__,
> �ͻ����������Ҫ�Ľ��: ����ߵ�ֵ���� sort.function ȥִ��.
>
> ���Ĵ����ٵÿ���, ��Ҷ�����ȥ��Ħ��: https://github.com/JulienPalard/Pipe/blob/master/pipe.py
>
>
> 2011/3/30 ��еΨ������ : linjunhalida <linjun...@gmail.com>:
>> ��python����ʵ�������е�pipe����, ����: [1,3,2,0] | sort
>>
>> ����������: http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx
>>
>> ��װֻ��Ҫeasy_install pipe.
>>
>> ��д��һ��С�÷�:
>> ��ruby�����������ħ��: 1.hours.ago, ������Dz����޸����������ķ�ʽ������, ����̫��pythonic.. (��֪����˵��û��?)
>>
>> ����pipe�Ļ�, ��������д:
>> 1 | hour | ago
>>
>> ��������:
>> https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py
>>
>> ���˾������������ȫ������չ��python����ģ����ȥ��.
>> ��ҿ���д�����Ķ����ظ���.
>>


zhao shichen

unread,
Mar 29, 2011, 11:49:06 PM3/29/11
to pyth...@googlegroups.com
不错,真的是对

中缀语法


的完美书写方式


在 2011年3月30日 上午11:40,lu_zi_2000 <lu_zi...@163.com>写道:
有趣,学习

于 2011年03月30日 11:32, 机械唯物主义 : linjunhalida 写道:
> 官方网站: https://github.com/JulienPalard/Pipe
>
> 我本来以为它是修改了python核心模块, 结果发现它只是这样的:
> 提供pipe功能的东西都继承至Pipe类:
> class Pipe:
>     def __init__(self, function):
>         self.function = function
>
>     def __ror__(self, other):
>         return self.function(other)
>
> 核心在于 __ror__, 这个函数其实就是 | 符号.
> 当python在解析 [1, 2, 3] | sort 的时候, 如果发现无法在左边的list里面找到or比较的函数的时候,
> 就会去调用右边的函数__ror__,
> 就会出现我们想要的结果: 把左边的值传给 sort.function 去执行.
>
> 核心代码少得可怜, 大家都可以去观摩下: https://github.com/JulienPalard/Pipe/blob/master/pipe.py
>
>
> 2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>:
>> 在python里面实现命令行的pipe功能, 比如: [1,3,2,0] | sort
>>
>> 介绍在这里: http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx
>>
>> 安装只需要easy_install pipe.
>>
>> 我写了一个小用法:
>> 在ruby下面有这样的魔法: 1.hours.ago, 它估计是采用修改整型这个类的方式来做的, 这样太不pythonic.. (不知道我说错没有?)
>>
>> 利用pipe的话, 可以这样写:
>> 1 | hour | ago
>>
>> 代码如下:
>> https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py
>>
>> 个人觉得这个东西完全可以扩展到python核心模块中去了.
>> 大家可以写点好玩的东西回复哈.
>>


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
呆痴木讷,君子四德

机械唯物主义 : linjunhalida

unread,
Mar 29, 2011, 11:49:38 PM3/29/11
to pyth...@googlegroups.com
不过这样会有性能问题, 每个元素都要从左到右调用一遍函数, 在性能要求高的场合下可能不太适用? (不过其实可以规避的)

2011/3/30 lu_zi_2000 <lu_zi...@163.com>:
> 有趣,学习
>

sj l

unread,
Mar 30, 2011, 12:21:40 AM3/30/11
to pyth...@googlegroups.com
赖总有翻译!!!http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx

2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>
不过这样会有性能问题, 每个元素都要从左到右调用一遍函数, 在性能要求高的场合下可能不太适用? (不过其实可以规避的)

2011/3/30 lu_zi_2000 <lu_zi...@163.com>:
> 有趣,学习
>

shhgs

unread,
Mar 30, 2011, 12:22:29 AM3/30/11
to pyth...@googlegroups.com

我不认为这类技术会在Python社区大行其道。explicit is better than implicit。| 不是加减号,很多用法实际上是由设计人员自己决定的。sh资格够老,因此它的用法已经成为Unix的文化了,但是在其他领域,这个pipe的用途就很不明确了。比方说在Hl7 message里面,在CSV file里面,这个 | 就可以当作普通的分隔符。你一定要把某些特定的语义强加到这个语法上,别人不一定买张。

有人知道stan吗?看看下面这段代码,论技巧性,比起pipe不会逊色吧,但是流行了吗?

import random
from nevow import renderer, tags

class Greeter(renderer.Renderer):
def greet(self, context, data):
return random.choice(["Hello", "Greetings", "Hi"]), " ", data

document = tags.html[
tags.head[ tags.title[ "Greetings!" ]],
tags.body[
tags.h1(style="font-size: large")[ "Now I will greet you:" ],
greet
]
]

机械唯物主义 : linjunhalida

unread,
Mar 30, 2011, 1:06:47 AM3/30/11
to pyth...@googlegroups.com
恩, 在python里面, 经常会写到sum(select(where(take_while(fib(), lambda x: x <
1000000) lambda x: x % 2), lambda x: x * x))
这样的东西(实际上工程代码中是不应该出现这样的东西的, 可能加上很多中间变量, 但是也不好读)
利用pipe可以写成:
fib() | take_while(lambda x: x < 1000000)
| where(lambda x: x % 2)
| select(lambda x: x * x)
| sum()

在其他一些orm库中, 也采用了一种串联的方式, 比如
People.filter(age_lt=40).filter(home='China').sort(age).limit(12)

这样提升了很多的可读性. 我认为可读性是python中最重要的. 我想上面的代码是非常清晰的, 没有违反explicit is better
than implicit的概念.
你说到其他领域, 我也觉得不应该滥用的.. 以能被人看懂为准..

上面pipe的方式没有动到python核心, 只是提供了一个类, 而这个类是如此简单, 完全可以嵌入我们自己的项目里面.

至于你贴出来的代码, makeup language又是另外一回事了, 至少我觉得这样的代码可读性比较差. 用shpaml吧.

2011/3/30 shhgs <shhgs....@gmail.com>:

Shell Xu

unread,
Mar 30, 2011, 1:07:37 AM3/30/11
to pyth...@googlegroups.com
我基本认同结论,C++社区有相当长的时间,选择允许语言随着使用者进化。宏/模板就不说了,后来又增加了算符重载,最后几乎每套库都有自己独自的风格和语法。
不过这并没有导致C++好用,实际上,我已经把C++评价为“最难掌握的语言”扔到一边了。在写C++的时候,我更多采用C里面简洁的技巧,减少封装,减少面对对象,尽量少用模板,少用高级特性。
--
无能者无所求,饱食而遨游,泛若不系之舟
blog: http://shell909090.com/blog/
twitter: http://twitter.com/shell909090

lee Alexander

unread,
Mar 30, 2011, 1:09:46 AM3/30/11
to pyth...@googlegroups.com
不错啊,很适合用来构建简洁易懂的SQL生成API,作为DSL的基础架构不错

比如 类似:

query=q(name="table1")|where(username="xxx")
              |orderby(id='desc')
              |select()
生成 select * from table1 where username = 'xxx' order by id desc

如何?



在 2011年3月30日 下午12:22,shhgs <shhgs....@gmail.com>写道:

limodou

unread,
Mar 30, 2011, 1:12:33 AM3/30/11
to pyth...@googlegroups.com


2011/3/30 lee Alexander <superp...@gmail.com>

不错啊,很适合用来构建简洁易懂的SQL生成API,作为DSL的基础架构不错

比如 类似:

query=q(name="table1")|where(username="xxx")
              |orderby(id='desc')
              |select()
生成 select * from table1 where username = 'xxx' order by id desc

如何?



好象在上面的例子中,不如用'.'更好啊。 

--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: http://uliwebproject.appspot.com
My Blog: http://hi.baidu.com/limodou

lee Alexander

unread,
Mar 30, 2011, 1:14:52 AM3/30/11
to pyth...@googlegroups.com
有点纠结了,

类似
fib() | take_while(lambda x: x < 1000000)
     | where(lambda x: x % 2)
     | select(lambda x: x * x)
     | sum()

这样的写法看起来确实很好懂


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

机械唯物主义 : linjunhalida

unread,
Mar 30, 2011, 1:16:24 AM3/30/11
to pyth...@googlegroups.com
恩, 用.的写法:

Pipe(range(12)).take_while(lambda x: x > 12).select(lambda x: x*x). sum()

还有这样呢?

Pipe(range(12), take_while(lambda x: x > 12), select(lambda x: x*x), sum)

2011/3/30 limodou <lim...@gmail.com>:
> 好象在上面的例子中,不如用'.'更好啊。

机械唯物主义 : linjunhalida

unread,
Mar 30, 2011, 1:22:32 AM3/30/11
to pyth...@googlegroups.com
这2个也好懂..
Pipe(range(12))\
.take_while(lambda x: x > 12)\
.select(lambda x: x*x)\
. sum()

Pipe(range(12),
take_while(lambda x: x > 12),
select(lambda x: x*x),
sum)

看起来python真的能够让每个人按照自己的方式来写代码呀..

2011/3/30 lee Alexander <superp...@gmail.com>:

limodou

unread,
Mar 30, 2011, 1:30:38 AM3/30/11
to pyth...@googlegroups.com


2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>

恩, 用.的写法:

Pipe(range(12)).take_while(lambda x: x > 12).select(lambda x: x*x). sum()

还有这样呢?

Pipe(range(12), take_while(lambda x: x > 12), select(lambda x: x*x), sum)


上面的写法不对。需要对Pipe改造一下才可以。

lu_zi_2000

unread,
Mar 30, 2011, 1:37:05 AM3/30/11
to pyth...@googlegroups.com
������ͬ�Ǻǣ�ʵ��������ΪC����������õ�����֮һ���ؼ�����������ܸߵ����ɶȣ���C�����������C�ķ��ʵ�����Ǻܶ�C������NIU��֧ �ֵ�

���ⲻ����������ʲô���Զ��ü򵥻��߸���

�� 2011��03��30�� 13:07, Shell Xu �:
�һ���ͬ���ۣ�C++�������൱����ʱ�䣬ѡ��������������ʹ���߽���/ģ��Ͳ�˵�ˣ������������������ �أ���󼸺�ÿ�׿ⶼ���Լ����Եķ�������
�����Ⲣû�е���C++���ã�ʵ���ϣ����Ѿ���C++����Ϊ���������յ����ԡ��ӵ�һ���ˡ���дC++��ʱ���Ҹ�����C������ļ��ɣ� ���ٷ�װ��������Զ��󣬾�������ģ�壬���ø߼����ԡ�

�� 2011��3��30�� ����12:22��shhgs <shhgs....@gmail.com>д ����

�Ҳ���Ϊ���༼������Python������������explicit is better than implicit��| ���ǼӼ��ţ��ܶ��÷�ʵ�������������Ա�Լ������ġ�sh�ʸ��ϣ��������÷��Ѿ���ΪUnix���Ļ��ˣ������������������pipe����;�ͺܲ��� ȷ�ˡ��ȷ�˵��Hl7 message���棬��CSV file���棬��� | �Ϳ��Ե�����ͨ�ķָ�����һ��Ҫ��ijЩ�ض�������ǿ�ӵ�������ϣ����˲�һ�����š�

����֪��stan�𣿿���������δ��룬�ۼ����ԣ�����pipe����ѷɫ�ɣ�������������


import random
from nevow import renderer, tags

class Greeter(renderer.Renderer):
   def greet(self, context, data):
       return random.choice(["Hello", "Greetings", "Hi"]), " ", data

   document = tags.html[
   tags.head[ tags.title[ "Greetings!" ]],
   tags.body[
       tags.h1(style="font-size: large")[ "Now I will greet you:" ],
       greet
   ]
]




On Wed, Mar 30, 2011 at 11:32:57AM +0800, ��еΨ������ : linjunhalida wrote:
> �ٷ���վ: https://github.com/JulienPalard/Pipe
>
> �ұ�����Ϊ�����޸���python����ģ��, �������ֻ�������:
> �ṩpipe���ܵĶ������̳���Pipe��:
> class Pipe:
>     def __init__(self, function):
>         self.function = function
>
>     def __ror__(self, other):
>         return self.function(other)
>
> �������� __ror__, ���������ʵ���� | ���.
> ��python�ڽ��� [1, 2, 3] | sort ��ʱ��, ������޷�����ߵ�list�����ҵ�or�Ƚϵĺ����ʱ��,
> �ͻ�ȥ�����ұߵĺ���__ror__,
> �ͻ����������Ҫ�Ľ��: ����ߵ�ֵ���� sort.function ȥִ��.
>
> ���Ĵ����ٵÿ���, ��Ҷ�����ȥ��Ħ��: https://github.com/JulienPalard/Pipe/blob/master/pipe.py
>
>
> 2011/3/30 ��еΨ������ : linjunhalida <linjun...@gmail.com>:
> > ��python����ʵ�������е�pipe����, ����: [1,3,2,0] | sort
> >
> > ����������: http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx
> >
> > ��װֻ��Ҫeasy_install pipe.
> >
> > ��д��һ��С�÷�:
> > ��ruby�����������ħ��: 1.hours.ago, ������Dz����޸����������ķ�ʽ������, ����̫��pythonic.. (��֪����˵��û��?)
> >
> > ����pipe�Ļ�, ��������д:
> > 1 | hour | ago
> >
> > ��������:
> > https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py
> >
> > ���˾������������ȫ������չ��python����ģ����ȥ��.
> > ��ҿ���д�����Ķ����ظ���.
> >
>
> --
> ����: python-cn`CPyUG`�����û���(����Python�����ʼ��б�)
> ����: pyth...@googlegroups.com
> �˶�: python-cn+...@googlegroups.com (��˷����ż���!)
> ����: http://code.google.com/p/cpyug/wiki/PythonCn
> ����: ����б�! �ǻ�����! http://wiki.woodpecker.org.cn/moin/AskForHelp
> ǿ��: ����ʹ�ü���: �����Ч�ر���Bug
>         http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
����: python-cn`CPyUG`�����û���(����Python�����ʼ��б�)
����: pyth...@googlegroups.com
�˶�: python-cn+...@googlegroups.com (��˷����ż���!)
����: http://code.google.com/p/cpyug/wiki/PythonCn
����: ����б�! �ǻ�����! http://wiki.woodpecker.org.cn/moin/AskForHelp
ǿ��: ����ʹ�ü���: �����Ч�ر���Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
�����������󣬱�ʳ�����Σ�������ϵ֮��
--
����: python-cn`CPyUG`�����û���(����Python�����ʼ��б�)
����: pyth...@googlegroups.com
�˶�: python-cn+...@googlegroups.com (��˷����ż���!)
����: http://code.google.com/p/cpyug/wiki/PythonCn
����: ����б�! �ǻ�����! http://wiki.woodpecker.org.cn/moin/AskForHelp
ǿ��: ����ʹ�ü���: �����Ч�ر���Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

limodou

unread,
Mar 30, 2011, 1:38:33 AM3/30/11
to pyth...@googlegroups.com


2011/3/30 limodou <lim...@gmail.com>



2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>
恩, 用.的写法:


Pipe(range(12)).take_while(lambda x: x > 12).select(lambda x: x*x). sum()

还有这样呢?

Pipe(range(12), take_while(lambda x: x > 12), select(lambda x: x*x), sum)


上面的写法不对。需要对Pipe改造一下才可以。


介绍的例子也是有问题的。内置的sum是不支持|操作的,因此:

print range(12)|sum #错
print range(12)|sum() #错
print range(12)|add #对

因此使用Pipe也是有一定的要求,需要后面的函数是经过@Pipe处理过的,否则有问题。

机械唯物主义 : linjunhalida

unread,
Mar 30, 2011, 1:46:56 AM3/30/11
to pyth...@googlegroups.com
呃, 上面那几个写法只是伪代码, 只是列一些其他的写法, 不过看起来还是pipe的方式够优雅..

2011/3/30 limodou <lim...@gmail.com>:

Zoom.Quiet

unread,
Mar 30, 2011, 1:47:15 AM3/30/11
to pyth...@googlegroups.com, limodou
在 2011年3月30日 下午1:38,limodou <lim...@gmail.com> 写道:
...

>> 上面的写法不对。需要对Pipe改造一下才可以。
>
> 介绍的例子也是有问题的。内置的sum是不支持|操作的,因此:
> print range(12)|sum #错
> print range(12)|sum() #错
> print range(12)|add #对
> 因此使用Pipe也是有一定的要求,需要后面的函数是经过@Pipe处理过的,否则有问题。

因为 Py 都是对象,所以,允许对所有语法代号进行定制;
不过,得端正目标哪:
- 令代码简短易懂

否则,就算是将 Py 伪装成 haskell/Erlang/go ... 也无法帮助大家写好程序的哪

管道式程序,俺个人感觉:
+ 有利于帮助我们抽象出纯函式
+ 并用整齐的表述形式来将一个复杂的处理过程的上下文都展示出来
适用在一般的数据处理过程中,
但是在复杂的多分支处理中,就难以使用了,就象真正的 shell 脚本,只有 zsh 支持有限的多方向管道;

这种对于 Py 语法的改进,已经是种 DSL 了,
就象 zhpy ,也不过是在核心之外,包装了一层,成为中文编程环境...

一定要在合适的场景中使用,否则,容易入魔哪...

--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
哲: http://www.zeuux.org/home/zoomquiet
豆: http://www.douban.com/group/zoomquiet
书: http://code.google.com/p/openbookproject
营: http://code.google.com/p/kcpycamp/wiki/PythoniCamp

pansz

unread,
Mar 30, 2011, 1:48:45 AM3/30/11
to pyth...@googlegroups.com
2011/3/30 lu_zi_2000 <lu_zi...@163.com>:
> 不能认同呵呵,实际是我认为C++是最好用的语言之一,关键就在于它给你很高的自由度,在C++里采用类C的风格实际上是很多C++大NIU们支 持的

编程不是靠个人英雄主义的。自由度过高的语言只适合单打独斗。自由度过高对语言来说是坏事而不是好事。one way to do one thing 才是更好的语言。

在绝大多数使用 C++的开发团队中,都要对C++的特性进行大量的限定与限制才能够正常使用。这导致不同的人,不同的团队,在不同的平台下写出的C++语言发生天壤之别。C++过多的特性正是其发展的绊脚石。

> 问题不会随着你用什么语言而变得简单或者复杂

这个真不一定。确实会有一些问题用某种语言解决起来更简单,或者更复杂。

limodou

unread,
Mar 30, 2011, 1:54:23 AM3/30/11
to pyth...@googlegroups.com


2011/3/30 Zoom.Quiet <zoom....@gmail.com>

在 2011年3月30日 下午1:38,limodou <lim...@gmail.com> 写道:
...
>> 上面的写法不对。需要对Pipe改造一下才可以。
>
> 介绍的例子也是有问题的。内置的sum是不支持|操作的,因此:
> print range(12)|sum #错
> print range(12)|sum() #错
> print range(12)|add #对
> 因此使用Pipe也是有一定的要求,需要后面的函数是经过@Pipe处理过的,否则有问题。

因为 Py 都是对象,所以,允许对所有语法代号进行定制;
不过,得端正目标哪:
- 令代码简短易懂

否则,就算是将 Py 伪装成 haskell/Erlang/go ... 也无法帮助大家写好程序的哪

管道式程序,俺个人感觉:
+ 有利于帮助我们抽象出纯函式
+ 并用整齐的表述形式来将一个复杂的处理过程的上下文都展示出来
适用在一般的数据处理过程中,
但是在复杂的多分支处理中,就难以使用了,就象真正的 shell 脚本,只有 zsh 支持有限的多方向管道;

这种对于 Py 语法的改进,已经是种 DSL 了,
就象 zhpy ,也不过是在核心之外,包装了一层,成为中文编程环境...

一定要在合适的场景中使用,否则,容易入魔哪...

 
是啊。不过DSL本身就是领域方面的内容,也没必要扩展到所有地方。不知道list引入这种操作会不会更清晰易懂呢? 

Shell Xu

unread,
Mar 30, 2011, 2:02:18 AM3/30/11
to pyth...@googlegroups.com
某种问题随着使用某种语言解决起来更加简单,或者更加复杂的原因大多数发生在库层面。perl强大的库支持注定了他强大的string处理能力。如果python有如此强的库支持如何?这个问题注定无法解答了。python的语法就没有为字符串处理而优化,因此也不会强调string处理,也注定不会有那么强的库。同样,php的长处在于html处理和粘合,也是类似情况。我们考虑一下,如果lisp有python这样多的库支持(而且用法完全一致),那么用lisp那种古怪的语法会有太大问题么?大概不会吧。
C++的灵活性是双刃剑,我在学习C++的头5年内一直很欣赏。但是随着后期,遗留代码越来越多,跨程序员的维护也渐渐增多。C++的语法就变成一个很讨厌的问题。谁能告诉我,在看到count_if(li.begin(), li.end(), sout << "blahblah" | i->(*fptr_array[SYSTEM_INFO])(func_num) >> cin); 的时候,除了想把写这玩意的程序员抓来打一顿外,还该有什么别的想法。那个该死的家伙用C++创造了一门新的语言,而我要在文档不全的情况下学习这玩意的语法。这么说好像不大公平,因为我也干了很多类似的事情。


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
无能者无所求,饱食而遨游,泛若不系之舟

lee Alexander

unread,
Mar 30, 2011, 2:03:50 AM3/30/11
to pyth...@googlegroups.com
Linq??

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

lu_zi_2000

unread,
Mar 30, 2011, 2:29:35 AM3/30/11
to pyth...@googlegroups.com
��ʵ�ϣ�����������ʲô���飬�������������һ������ȣ���ᷢ�֣�������ʲ
ô��������ʵ���⻹������
������Ϊ��վ�ھ��˵�ͷ�ϣ��������������ô��
Խ�Ƕ��ƻ��Ķ�������Խ�Dz��øı�

����˵�����ɵ����dz�������


�� 2011��03��30�� 13:48, pansz �:
> 2011/3/30 lu_zi_2000 <lu_zi...@163.com>:


>> ������ͬ�Ǻǣ�ʵ��������ΪC����������õ�����֮һ���ؼ�����������ܸߵ����ɶȣ���C�����������C�ķ��ʵ�����Ǻܶ�C������NIU��֧ �ֵ�

> ��̲��ǿ�����Ӣ������ġ����ɶȹ�ߵ�����ֻ�ʺϵ�����������ɶȹ�߶�������˵�ǻ��¶��Ǻ��¡�one way to do one thing ���Ǹ�õ����ԡ�
>
> �ھ�����ʹ�� C++�Ŀ����Ŷ��У���Ҫ��C++�����Խ��д������޶������Ʋ��ܹ���ʹ�á��⵼�²�ͬ���ˣ���ͬ���Ŷӣ��ڲ�ͬ��ƽ̨��д����C++���Է�������֮��C++�������������䷢չ�İ��ʯ��
>
>> ���ⲻ����������ʲô���Զ��ü򵥻��߸���
> ����治һ����ȷʵ����һЩ������ij�����Խ��������򵥣����߸��ӡ�
>


lu_zi_2000

unread,
Mar 30, 2011, 2:31:55 AM3/30/11
to pyth...@googlegroups.com
���Ǵ���һ����Ԫ���������У�����Ҫ��˵hello,��Ҳ������Ϊ����˵nice to meet you��˵�˼Ҳ��ԣ��ǰ�,Ψһ������DZ仯����
�� 2011��03��30�� 14:02, Shell Xu �:
ij����������ʹ��ij�����Խ��������Ӽ򵥣����߸�Ӹ��ӵ�ԭ���������ڿ���档perlǿ��Ŀ�֧��ע������ ǿ���string�������������python�����ǿ�Ŀ�֧����Σ��������ע���޷�����ˡ�python������û��Ϊ�ַ������ �������Ҳ����ǿ��string���?Ҳע����������ôǿ�Ŀ⡣ͬ��php�ij�������html�����ճ�ϣ�Ҳ��������������ǿ���һ�£��� ��lisp��python�����Ŀ�֧�֣������÷���ȫһ�£�����ô��lisp���ֹŹֵ�������̫������ô����Ų���ɡ�
C++���������˫�н�������ѧϰC++��ͷ5����һֱ�����͡��������ź��ڣ���������Խ��Խ�࣬�����Ա��ά��Ҳ�������ࡣC++������ ���һ������������⡣˭�ܸ����ң��ڿ���count_if(li.begin(), li.end(), sout << "blahblah" | i->(*fptr_array[SYSTEM_INFO])(func_num) >> cin); ��ʱ�򣬳������д������ij���Աץ����һ���⣬������ʲô����뷨���Ǹ������ļһ���C++������һ���µ����ԣ�����Ҫ���ĵ���ȫ�������ѧϰ������� ������ô˵���񲻴�ƽ����Ϊ��Ҳ���˺ܶ����Ƶ����顣

�� 2011��3��30�� ����1:48��pansz <pan.s...@gmail.com>д ����
2011/3/30 lu_zi_2000 <lu_zi...@163.com>:
> ������ͬ�Ǻǣ�ʵ��������ΪC����������õ�����֮һ���ؼ�����������ܸߵ����ɶȣ���C�����������C�ķ��ʵ�����Ǻܶ�C������NIU��֧ �ֵ�

��̲��ǿ�����Ӣ������ġ����ɶȹ�ߵ�����ֻ�ʺϵ�����������ɶȹ�߶�������˵�ǻ��¶��Ǻ��¡�one way to do one thing ���Ǹ�õ����ԡ�

�ھ�����ʹ�� C++�Ŀ����Ŷ��У���Ҫ��C++�����Խ��д������޶������Ʋ��ܹ���ʹ�á��⵼�²�ͬ���ˣ���ͬ���Ŷӣ��ڲ�ͬ��ƽ̨��д����C++���Է�������֮ ��C++�������������䷢չ�İ��ʯ��

> ���ⲻ����������ʲô���Զ��ü򵥻��߸���

����治һ����ȷʵ����һЩ������ij�����Խ��������򵥣����߸��ӡ�

--
����: python-cn`CPyUG`�����û���(����Python�����ʼ��б�)
����: pyth...@googlegroups.com
�˶�: python-cn+...@googlegroups.com (��˷����ż���!)
����: http://code.google.com/p/cpyug/wiki/PythonCn
����: ����б�! �ǻ�����! http://wiki.woodpecker.org.cn/moin/AskForHelp
ǿ��: ����ʹ�ü���: �����Ч�ر���Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
�����������󣬱�ʳ�����Σ�������ϵ֮��

机械唯物主义 : linjunhalida

unread,
Mar 30, 2011, 2:37:44 AM3/30/11
to pyth...@googlegroups.com
语言核心简洁我觉得非常重要, 语言本身是非常重要的接口, 设定了之后若干年都不好改的... 魔法可以放在库里面, 但是最好也不能复杂到侵蚀语言本身的程度...

2011/3/30 lu_zi_2000 <lu_zi...@163.com>:
> 我们处在一个多元化的世界中,我们要会说hello,但也不能因为别人说nice to meet you就说人家不对,是吧,唯一不变的是变化本身
>

limodou

unread,
Mar 30, 2011, 2:41:13 AM3/30/11
to pyth...@googlegroups.com


2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>

语言核心简洁我觉得非常重要, 语言本身是非常重要的接口, 设定了之后若干年都不好改的... 魔法可以放在库里面, 但是最好也不能复杂到侵蚀语言本身的程度...


其实指令集不也是如此,CISC和RISC各有优点和缺点。 

机械唯物主义 : linjunhalida

unread,
Mar 30, 2011, 2:42:12 AM3/30/11
to pyth...@googlegroups.com
那个又是另一个领域了...

2011/3/30 limodou <lim...@gmail.com>:
> 其实指令集不也是如此,CISC和RISC各有优点和缺点。

zhao shichen

unread,
Mar 30, 2011, 2:46:32 AM3/30/11
to pyth...@googlegroups.com
呵呵,我也在使用C++一段时间之后回到了C。

貌似对C++赞许的人多是用C++时间不多的人。

C就已经足够好用了。

C++带来的只是麻烦和疲劳。


--
呆痴木讷,君子四德

Shell Xu

unread,
Mar 30, 2011, 2:46:04 AM3/30/11
to pyth...@googlegroups.com
我比较讨厌的,是拿起前人写的日记,发现三任前任用了三种小语种,分别是壮侗语族,苗瑶语族,藏缅语族。三者都属于汉藏语系——这个,让我情何以堪阿。

在 2011年3月30日 下午2:31,lu_zi_2000 <lu_zi...@163.com>写道:
我们处在一个多元化的世界中,我们要会说hello,但也不能因为别人说nice to meet you就说人家不对,是吧,唯一不变的是变化本身
于 2011年03月30日 14:02, Shell Xu 写道:
某种问题随着使用某种语言解决起来更加简单,或者更加复杂的原因大多数发生在库层面。perl强大的库支持注定了他 强大的string处理能力。如果python有如此强的库支持如何?这个问题注定无法解答了。python的语法就没有为字符串处理而优 化,因此也不会强调string处理,也注定不会有那么强的库。同样,php的长处在于html处理和粘合,也是类似情况。我们考虑一下,如 果lisp有python这样多的库支持(而且用法完全一致),那么用lisp那种古怪的语法会有太大问题么?大概不会吧。
C++的灵活性是双刃剑,我在学习C++的头5年内一直很欣赏。但是随着后期,遗留代码越来越多,跨程序员的维护也渐渐增多。C++的语法就 变成一个很讨厌的问题。谁能告诉我,在看到count_if(li.begin(), li.end(), sout << "blahblah" | i->(*fptr_array[SYSTEM_INFO])(func_num) >> cin); 的时候,除了想把写这玩意的程序员抓来打一顿外,还该有什么别的想法。那个该死的家伙用C++创造了一门新的语言,而我要在文档不全的情况下学习这玩意的 语法。这么说好像不大公平,因为我也干了很多类似的事情。

在 2011年3月30日 下午1:48,pansz <pan.s...@gmail.com>写 道:
2011/3/30 lu_zi_2000 <lu_zi...@163.com>:
> 不能认同呵呵,实际是我认为C++是最好用的语言之一,关键就在于它给你很高的自由度,在C++里采用类C的风格实际上是很多C++大NIU们支 持的

编程不是靠个人英雄主义的。自由度过高的语言只适合单打独斗。自由度过高对语言来说是坏事而不是好事。one way to do one thing 才是更好的语言。

在绝大多数使用 C++的开发团队中,都要对C++的特性进行大量的限定与限制才能够正常使用。这导致不同的人,不同的团队,在不同的平台下写出的C++语言发生天壤之 别。C++过多的特性正是其发展的绊脚石。


> 问题不会随着你用什么语言而变得简单或者复杂

这个真不一定。确实会有一些问题用某种语言解决起来更简单,或者更复杂。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
无能者无所求,饱食而遨游,泛若不系之舟
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
无能者无所求,饱食而遨游,泛若不系之舟

lu_zi_2000

unread,
Mar 30, 2011, 2:53:42 AM3/30/11
to pyth...@googlegroups.com
c++��Ҫ���ʱ�����ĥӲ�ݣ���ȴ�C�и�ߵĿ���Ч��

��ʵ�ܲ��̲˺�������ˣ��þ��˻��Ҳ�ܺ���

�� 2011��03��30�� 14:46, zhao shichen �:
�Ǻǣ���Ҳ��ʹ��C++һ��ʱ��֮��ص���C��

ò�ƶ�C++������˶�����C++ʱ�䲻����ˡ�

C���Ѿ��㹻�����ˡ�

C++������ֻ���鷳��ƣ�͡�


--
����ľګ�������ĵ�

pansz

unread,
Mar 30, 2011, 3:02:03 AM3/30/11
to pyth...@googlegroups.com
2011/3/30 lu_zi_2000 <lu_zi...@163.com>:

> 我们处在一个多元化的世界中,我们要会说hello,但也不能因为别人说nice to meet you就说人家不对,是吧,唯一不变的是变化本身

优秀的文章是让人读的,优秀的代码却是让人改的。

所以一篇文章用八种语言风格无所谓,因为用户只需要去读。代码不合适,因为用户往往需要去改。

Shell Xu

unread,
Mar 30, 2011, 3:02:43 AM3/30/11
to pyth...@googlegroups.com
大哥阿,我泡了17年C,12年C++,人的一辈子还有更多的时间来泡么。。。
而且随着泡下去时间的增长,我的工资增长完全不成比例。

在 2011年3月30日 下午2:53,lu_zi_2000 <lu_zi...@163.com>写道:
c++需要你更长时间的软磨硬泡,会比纯C有更高的开发效率

其实萝卜咸菜和有所好了,用久了汇编也很好用
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
无能者无所求,饱食而遨游,泛若不系之舟

Zhang Laixian

unread,
Mar 30, 2011, 3:16:58 AM3/30/11
to pyth...@googlegroups.com
膜拜...17年.

2011/3/30 Shell Xu <shell...@gmail.com>

lu_zi_2000

unread,
Mar 30, 2011, 3:32:19 AM3/30/11
to pyth...@googlegroups.com
�������������˵�ˣ�ֻ��˵�㲻�ʺ�C����������C�������ʺ���
�� 2011��03��30�� 15:16, Zhang Laixian �:
Ĥ��...17��.

2011/3/30 Shell Xu <shell...@gmail.com>
��簢��������17��C��12��C++���˵�һ���ӻ��и���ʱ������ô������
������������ȥʱ����������ҵĹ���������ȫ���ɱ���

�� 2011��3��30�� ����2:53��lu_zi_2000 <lu_zi...@163.com>д ����



--
�����������󣬱�ʳ�����Σ�������ϵ֮��
����: python-cn`CPyUG`�����û���(����Python�����ʼ��б�)
����: pyth...@googlegroups.com
�˶�: python-cn+...@googlegroups.com (��˷����ż���!)
����: http://code.google.com/p/cpyug/wiki/PythonCn
����: ����б�! �ǻ�����! http://wiki.woodpecker.org.cn/moin/AskForHelp
ǿ��: ����ʹ�ü���: �����Ч�ر���Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

Shell Xu

unread,
Mar 30, 2011, 2:50:31 AM3/30/11
to pyth...@googlegroups.com
也不完全。
面对对象语法还是挺有用的,STL容器也很方便。
但是要提防仅仅为了看起来漂亮就滥用黑魔法。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
无能者无所求,饱食而遨游,泛若不系之舟

ubunoon

unread,
Mar 30, 2011, 3:42:58 AM3/30/11
to pyth...@googlegroups.com
我实在不赞同过分的使用stl,stl中的容器使用还是可以的,相关的算法实现,实在不敢去使用,为了一个算法,我们得构造太多的东西去理解与实现,不够直观与简洁。总觉得C++的模板不是一般的人能够玩得来的,如果大部分人都玩不来,这就已经不是工程语言需要的东西了。

开头的pipe中的,很直观也很简洁,虽然语法和python内建的含义已经被改义了,但是这种形式在他的pipe中是统一的,也不需要更多的学习,因此还是很赞同的。

pansz

unread,
Mar 30, 2011, 4:09:20 AM3/30/11
to pyth...@googlegroups.com
2011/3/30 ubunoon <net...@gmail.com>:

> 我实在不赞同过分的使用stl,stl中的容器使用还是可以的,相关的算法实现,实在不敢去使用,为了一个算法,我们得构造太多的东西去理解与实现,不够直观与简洁。总觉得C++的模板不是一般的人能够玩得来的,如果大部分人都玩不来,这就已经不是工程语言需要的东西了。

这是一种矛盾。例如很多人觉得新特性的增加应当尽量利用现有语法并以库的形式实现,STL
算法就是这个想法的牺牲品。它不改变语法,仅仅利用现有的运算符重载框架来实现函数对象,导致了极度复杂和费解的代码。

其实只要增加 lambda 函数或者说把函数做成first-class变量,就能够使 STL
算法的代码优雅许多倍。但是这不可避免的要修改与增加语法。显然,他们已经认识到这个巨大的错误,在 C++11 里面已经明确了 lambda
函数的语法。

模板这东西,为什么很多人玩不来?其实与当初他们对语法修订的保守有很大的关系。如果当初就吧 auto 关键字,lambda
函数等等很多语法特性加进去,那么模板代码相对会整洁很多,也有更多人能够玩得来。

从我个人的角度,我认为C++标准中每一次对传统习惯的执着都恶化了C++语法。例如最初是执着对C的兼容导致了在C++里面有完全不相容的多种代码风格,后来对模板,STL
容器和算法的引入也是由于过于专注兼容现有C++语法导致STL算法实际上在实战中基本没人敢用。例子:随便一个 foreach 在标准 C++
中需要写多少代码都让人咋舌,微软VC的私自改进版 foreach 倒是有很多人乐于使用。

不改变语法就无法优雅的实现 lambda 函数,也无法优雅的实现 foreach,这是 C++ 语法的基础设计问题还是什么呢?

Shell Xu

unread,
Mar 30, 2011, 4:11:53 AM3/30/11
to pyth...@googlegroups.com
参看一本书,《C++语言的设计和演化》


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

lu_zi_2000

unread,
Mar 30, 2011, 4:18:11 AM3/30/11
to pyth...@googlegroups.com
˭˵STL�㷨û���á�����
Ŀǰ������֪�����۴��㷨���滹�����Բ��棬STL��sort�㷨��ִ��Ч�ʶ�����ߵ�

�����������������Ϊ����ʲô�������ʲô
�ͺ������ĺܶ�����ѧ������������й���Ҳ����˵��ͷͷ�µ�һ��

�� 2011��03��30�� 16:09, pansz �:
> 2011/3/30 ubunoon <net...@gmail.com>:
>> ��ʵ�ڲ���ͬ��ֵ�ʹ��stl��stl�е�����ʹ�û��ǿ��Եģ���ص��㷨ʵ�֣�ʵ�ڲ���ȥʹ�ã�Ϊ��һ���㷨�����ǵù���̫��Ķ���ȥ�����ʵ�֣�����ֱ�����ࡣ�ܾ���C++��ģ�岻��һ������ܹ�������ģ����󲿷��˶��治��������Ѿ����ǹ���������Ҫ�Ķ����ˡ�
> ����һ��ì�ܡ�����ܶ��˾��������Ե�����Ӧ�������������������Կ����ʽʵ�֣�STL
> �㷨��������뷨������Ʒ����ı����������������е���������ؿ����ʵ�ֺ�����󣬵����˼��ȸ��Ӻͷѽ�Ĵ��롣
>
> ��ʵֻҪ���� lambda �������˵�Ѻ�������first-class���������ܹ�ʹ STL
> �㷨�Ĵ���������౶�������ⲻ�ɱ����Ҫ�޸�������������Ȼ�������Ѿ���ʶ������޴�Ĵ����� C++11 �����Ѿ���ȷ�� lambda
> ���������
>
> ģ���ⶫ����Ϊʲô�ܶ����治������ʵ�뵱�����Ƕ����޶��ı����кܴ�Ĺ�ϵ�������Ͱ� auto �ؼ��֣�lambda
> ����ȵȺܶ������Լӽ�ȥ����ôģ�������Ի����ܶ࣬Ҳ�и�����ܹ��������
>
> ���Ҹ��˵ĽǶȣ�����ΪC++��׼��ÿһ�ζԴ�ͳϰ�ߵ�ִ�Ŷ�����C++�������������ִ�Ŷ�C�ļ��ݵ�������C++��������ȫ�����ݵĶ��ִ����񣬺�����ģ�壬STL
> �������㷨������Ҳ�����ڹ���רע��������C++������STL�㷨ʵ������ʵս�л�û�˸��á����ӣ����һ�� foreach �ڱ�׼ C++
> ����Ҫд���ٴ��붼����զ�࣬΢��VC��˽�ԸĽ�� foreach �����кܶ�������ʹ�á�
>
> ���ı������޷����ŵ�ʵ�� lambda ����Ҳ�޷����ŵ�ʵ�� foreach������ C++ ���Ļ�������⻹��ʲô�أ�
>


Zhang Jiawei

unread,
Mar 30, 2011, 8:36:59 AM3/30/11
to pyth...@googlegroups.com
我发现我有一个同事,他有很多在我看来很拙劣的手法搞 IT。他整天守着一个肥痴的 Eclipse, 动不动就蓝屏的 Windows,
最喜欢用鼠标一点一点,敲键盘老搞错键,他不会什么 wc -l, 不会什么 vi, 每次看日志,用一个 scp 的 gui 从 linux
服务器上拖到 windows 上, 然后用一个叫做 programmer's
notepad的工具打开一个上百M的日志文件,时常和我抱怨这么大的文件打也打不开。服务器又在美国,每次拖一个几十M的文件都要几十分钟。他就若无其事的在那边等着,我干着急也没用,我说我帮你用
vi 直接在服务器上看吧,他很委婉的拒绝了,他说你看是方便了,我看却很不方便。我不会用 vi.
再然后,说到他的代码风格,很不符合审美情趣,要空格的地方没空格,该换行的地方也没换行, 等号左右时常有空格时常又没有空格,没有定数。

末了,就是这样一个人,放在一百个人身上,九十五个绝对是庸才,不过他是另外的五个之一。

因为全公司他最忙,不一定是忙自己的事情,是忙别人的事情。每隔10分钟会被不同的人叫过去帮忙。帮什么忙呢?有人会问他一个商品的推荐算法的思路杂么做,还有人会问他搜索引擎的后台构架是杂么样的,另外还有人会请他分析一个诡异现象的root
cause. 高中的时候拿过上海市数学竞赛的一等奖,交大的自动化硕士。搞过机器人识别图像分析,推荐引擎,深谙算法,数理逻辑,现在还时常翻翻大学里的数理教材,说不搞搞脑子,人容易变傻。

后来我大概感受到,学院派的人其实没有放很多心思在流于表面的东西上,因为这样往往占用的是他们触及问题本质的时间,得不偿失。

一个 1 hour ago 的小魔法也好,
一个可以分清楚注释,实际代码,能不能去掉空格的图形化代码统计工具也罢。除了能让你莫名的暗爽,到底带来了什么实际价值?
无非你比别人更快的算出了一个时间,看到某些人量产了多少代码,用一种很毛糙的手段从令人不齿的商业视角计算了一下每个码农非常不准确的性价比。

我们为什么不要崇尚个人英雄主义?因为英雄能做的你肯定做不了,你做的比他快的事情,别人更不不削去做。找个比你做的还快的告诉他做什么就行了。

算法导论是用伪代码写的,表达思想的形式远没有思想本身更重要,只有艺术家才会讨论隶书和狂草的区别,你们想搞得高级一点的人就不要纠结这点东西了。


在 2011年3月30日 下午4:18,lu_zi_2000 <lu_zi...@163.com> 写道:
> 谁说STL算法没人用。。。
> 目前具我所知,无论从算法方面还是语言层面,STL的sort算法的执行效率都是最高的
>
> 语言这个东西,你认为他是什么,他就是什么
> 就好象中文很多老外学不来,但最笨的中国人也可以说的头头事道一样

Kula

unread,
Mar 30, 2011, 8:42:39 AM3/30/11
to pyth...@googlegroups.com
你只能说他学术搞得好而已。。但是学术和工程是两个维度的东西。不能混在一起谈。要是进而推导出工程不如学术那就错得更离谱了

2011/3/30 Zhang Jiawei <gho...@gmail.com>

机械唯物主义 : linjunhalida

unread,
Mar 30, 2011, 8:57:20 AM3/30/11
to pyth...@googlegroups.com
说得非常不错. 他是专家. 他的核心价值在于专家的知识和经验.

2011/3/30 Zhang Jiawei <gho...@gmail.com>:

邦邦李

unread,
Mar 30, 2011, 9:05:57 AM3/30/11
to pyth...@googlegroups.com
yes,所有c比c++更有活力

在 2011年3月30日 下午1:07,Shell Xu <shell...@gmail.com>写道:
我基本认同结论,C++社区有相当长的时间,选择允许语言随着使用者进化。宏/模板就不说了,后来又增加了算符重载,最后几乎每套库都有自己独自的风格和语法。
不过这并没有导致C++好用,实际上,我已经把C++评价为“最难掌握的语言”扔到一边了。在写C++的时候,我更多采用C里面简洁的技巧,减少封装,减少面对对象,尽量少用模板,少用高级特性。

在 2011年3月30日 下午12:22,shhgs <shhgs....@gmail.com>写道:


我不认为这类技术会在Python社区大行其道。explicit is better than implicit。| 不是加减号,很多用法实际上是由设计人员自己决定的。sh资格够老,因此它的用法已经成为Unix的文化了,但是在其他领域,这个pipe的用途就很不明确了。比方说在Hl7 message里面,在CSV file里面,这个 | 就可以当作普通的分隔符。你一定要把某些特定的语义强加到这个语法上,别人不一定买张。

有人知道stan吗?看看下面这段代码,论技巧性,比起pipe不会逊色吧,但是流行了吗?

import random
from nevow import renderer, tags

class Greeter(renderer.Renderer):
   def greet(self, context, data):
       return random.choice(["Hello", "Greetings", "Hi"]), " ", data

   document = tags.html[
   tags.head[ tags.title[ "Greetings!" ]],
   tags.body[
       tags.h1(style="font-size: large")[ "Now I will greet you:" ],
       greet
   ]
]




On Wed, Mar 30, 2011 at 11:32:57AM +0800, 机械唯物主义 : linjunhalida wrote:
> 官方网站: https://github.com/JulienPalard/Pipe
>
> 我本来以为它是修改了python核心模块, 结果发现它只是这样的:
> 提供pipe功能的东西都继承至Pipe类:
> class Pipe:
>     def __init__(self, function):
>         self.function = function
>
>     def __ror__(self, other):
>         return self.function(other)
>
> 核心在于 __ror__, 这个函数其实就是 | 符号.
> 当python在解析 [1, 2, 3] | sort 的时候, 如果发现无法在左边的list里面找到or比较的函数的时候,
> 就会去调用右边的函数__ror__,
> 就会出现我们想要的结果: 把左边的值传给 sort.function 去执行.
>
> 核心代码少得可怜, 大家都可以去观摩下: https://github.com/JulienPalard/Pipe/blob/master/pipe.py
>
>
> 2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>:
> > 在python里面实现命令行的pipe功能, 比如: [1,3,2,0] | sort
> >
> > 介绍在这里: http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx
> >
> > 安装只需要easy_install pipe.
> >
> > 我写了一个小用法:
> > 在ruby下面有这样的魔法: 1.hours.ago, 它估计是采用修改整型这个类的方式来做的, 这样太不pythonic.. (不知道我说错没有?)
> >
> > 利用pipe的话, 可以这样写:
> > 1 | hour | ago
> >
> > 代码如下:
> > https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py
> >
> > 个人觉得这个东西完全可以扩展到python核心模块中去了.
> > 大家可以写点好玩的东西回复哈.

> >
>
> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 发言: pyth...@googlegroups.com
> 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug
>         http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
--
无能者无所求,饱食而遨游,泛若不系之舟
blog: http://shell909090.com/blog/
twitter: http://twitter.com/shell909090

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
我的msn:zy...@msn.com

Zhang Jiawei

unread,
Mar 30, 2011, 9:39:57 AM3/30/11
to pyth...@googlegroups.com
我举的例子里的人一样是工程师的头衔。我也并不完全赞同他的一些做法,我上述列举的那些。我的重点是让大家做事的时候尽量去触及本质。即便是工程上的。

shhgs

unread,
Mar 30, 2011, 9:56:40 AM3/30/11
to pyth...@googlegroups.com

这个写法确实还是不错的,看上去像ruby,又有一点像Haskell,就是不像Python。

这个还是约定俗成的东西。就像sh里面的 |,如果大家都接受了,那么就是它了。

不过我还是非常不看好他的前景。

On Wed, Mar 30, 2011 at 01:14:52PM +0800, lee Alexander wrote:
> 有点纠结了,
>
> 类似
> fib() | take_while(lambda x: x < 1000000)
> | where(lambda x: x % 2)
> | select(lambda x: x * x)
> | sum()
>
> 这样的写法看起来确实很好懂
>
>
> 在 2011年3月30日 下午1:12,limodou <lim...@gmail.com>写道:
>
> >
> >
> > 2011/3/30 lee Alexander <superp...@gmail.com>
> >
> >> 不错啊,很适合用来构建简洁易懂的SQL生成API,作为DSL的基础架构不错
> >>
> >> 比如 类似:
> >>
> >> query=q(name="table1")|where(username="xxx")
> >> |orderby(id='desc')
> >> |select()
> >> 生成 select * from table1 where username = 'xxx' order by id desc
> >>
> >> 如何?
> >>
> >>
> >>
> > 好象在上面的例子中,不如用'.'更好啊。


> >
> > --
> > I like python!
> > UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
> > UliWeb <<simple web framework>>: http://uliwebproject.appspot.com
> > My Blog: http://hi.baidu.com/limodou
> >

> > --
> > 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> > 发言: pyth...@googlegroups.com
> > 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> > 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> > 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> > 强烈: 建议使用技巧: 如何有效地报告Bug
> > http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
> >
>
>
>
> --

evil...@sogou.com

unread,
Mar 30, 2011, 12:51:56 PM3/30/11
to pyth...@googlegroups.com
��Ҫ����ħ���Ļ�ֱ���ú���ʽ���Բ��͵��ˡ�

�� Wed, 30 Mar 2011 11:19:19 +0800����еΨ������ : linjunhalida
<linjun...@gmail.com> �:

> ��python����ʵ�������е�pipe����, ����: [1,3,2,0] | sort
>
> ����������:
> http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx
>
> ��װֻ��Ҫeasy_install pipe.
>
> ��д��һ��С�÷�:
> ��ruby�����������ħ��: 1.hours.ago,
> ������Dz����޸����������ķ�ʽ������, ����̫��pythonic..
> (��֪����˵��û��?)
>
> ����pipe�Ļ�, ��������д:
> 1 | hour | ago
>
> ��������:
> https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py
>
> ���˾������������ȫ������չ��python����ģ����ȥ��.
> ��ҿ���д�����Ķ����ظ���.
>


pansz

unread,
Mar 30, 2011, 9:07:53 PM3/30/11
to pyth...@googlegroups.com
2011/3/30 lu_zi_2000 <lu_zi...@163.com>:
> 谁说STL算法没人用。。。
> 目前具我所知,无论从算法方面还是语言层面,STL的sort算法的执行效率都是最高的

执行效率高低与有没有人敢用是两回事,汇编的执行效率更高,但是相信没人敢用汇编去写星际争霸。

几乎没人敢用,隐含的前提就是有很多人用了,然后发现用这玩意的后果,然后发现能远离就尽量远离的害怕。不真正用过,是不会知道敢不敢用的。12y+的C++经验,楼上
Shell Xu 算是一个同行,我也是 12y+,我可以用 STL
算法,甚至把程序的主题都集中在算法表述,问题在于这玩意弄出去之后,有几个人敢维护?这种玩意给周围20+个程序员看了都没人敢维护。

这里的重点是:要深入使用STL算法肯定要自定义函数对象,而创建自定义函数对象相关的精巧代码太超乎常规的编程思维了。

pansz

unread,
Mar 30, 2011, 9:18:34 PM3/30/11
to pyth...@googlegroups.com
2011/3/30 Zhang Jiawei <gho...@gmail.com>:

> 我发现我有一个同事,他有很多在我看来很拙劣的手法搞 IT。他整天守着一个肥痴的 Eclipse, 动不动就蓝屏的 Windows,

这是文化,其实很多人会受到周围文化的影响。互联网初期那些顶级黑客文化也是一样的,他们的习惯会互相影响。就好比用 emacs 的黑客周围可能有很多同好一样。

2001年我开始使用 vi,是因为那时从研发总经理到项目经理到部门主任到所有的同事全部都是 vi 派。不会用 vi
,天天把文件从服务器上拖回来到本地用记事本编辑的人,是绝对的少数以及绝对的被歧视派,你那个同事在这种氛围下可能连生存的空间都没有,他一定会被边缘化。

文化的差异其实类似于语言的隔阂,就如说,不论你有多么牛的技术,你不懂英文也不可能在美国教书。如果周围所有的人都知道 wc -l
是什么,你不知道的后果就是:你在他们眼里根本不存在。

lu_zi_2000

unread,
Mar 30, 2011, 9:49:25 PM3/30/11
to pyth...@googlegroups.com
����дһϵ�й���C�����Ľ̳��ˣ���˵�Ķԣ�����ʲô���ɣ����Ƕ�������Ӧ��
����ᣬ����ȥ�ı���

������������������������ס�

��װ��Ŀ���������ã��뿪���ã���װû�����塣

û������һ��ȥ��stl��foreach��������⣬����ʱ��for����iterator������
�ij�����ȥ��򵥣�����������õ�Ŀ�ģ����� ���д���ٵĴ��롣

���У�Ҳ��һ����Ҫ��foreach����Ҳ����ʹ��boost���boost_foreach��ʡ��
iterator�ij�񣬵�Ȼ��ȡ��������� Ȥ���������յ�֪ʶ��

�������ȫ����д�Լ���ϲ���Ĵ������ﵽ��õ�Ч��

�����ڻ��ֵ�����д����ֻ����˵���������ʱ����һ����Ԫ���ŵ�ʱ����Ҫ
�����ö�Ƕȵ�Ŀ��ȥ��������硣һ�㲻��Ķ�������ֻ������������ �κμ�
���Ķ������ǽ����ڲ���֮�ϵ�,ֻ���㻹û�з�����

�� 2011��03��31�� 09:18, pansz �:
> 2011/3/30 Zhang Jiawei <gho...@gmail.com>:
>> �ҷ�������һ��ͬ�£����кܶ����ҿ�����׾�ӵ��ַ��� IT������������һ���ʳյ� Eclipse, �������������� Windows,
> �����Ļ�����ʵ�ܶ��˻��ܵ���Χ�Ļ���Ӱ�졣�����������Щ�����ڿ��Ļ�Ҳ��һ��ģ����ǵ�ϰ�߻ụ��Ӱ�졣�ͺñ��� emacs �ĺڿ���Χ�����кܶ�ͬ��һ��
>
> 2001���ҿ�ʼʹ�� vi������Ϊ��ʱ���з��ܾ��?��Ŀ���?�������ε����е�ͬ��ȫ������ vi �ɡ������� vi
> ��������ļ��ӷ��������ϻ����������ü��±��༭���ˣ��Ǿ�Ե������Լ���Եı������ɣ����Ǹ�ͬ�������ַ�Χ�¿��������Ŀռ䶼û�У���һ���ᱻ��Ե����
>
> �Ļ��IJ�����ʵ���������Եĸ��ң�����˵���������ж�ôţ�ļ������㲻��Ӣ��Ҳ��������������顣�����Χ���е��˶�֪�� wc -l
> ��ʲô���㲻֪���ĺ����ǣ�����������������ڡ�
>


Zhang Jiawei

unread,
Mar 30, 2011, 10:44:23 PM3/30/11
to pyth...@googlegroups.com
你这个不存在的结论,让我白忙活了半天。不过每个人的理解程度不一样,我也不能强求谁都领会精神,就好像我不能强求别人用 vi 一样。

这个现象就有趣了,如果我来揣测一下我那个同事在你们公司的地位。大概是从小兵到主任,每个人都在很忙碌的看日志,简单的问题你们都可以解决,复杂的问题,日志的结果被汇总到我那个同事那边,做决策,然后人家给出下一个指令,大家再忙碌半天。

我承认会用 vi 的绝对是把好枪。

难的是,自己是把好枪,还能自己扣动扳机。

lu_zi_2000

unread,
Mar 30, 2011, 10:48:14 PM3/30/11
to pyth...@googlegroups.com
��Ȼ�����о������Ϳ������������ǿ��Բ�ȡ��ȫ��ͬ������
���о����������Ŭ�����ҵ�����������÷������������ƹ�
�ڿ�������������ƶ�ͳһ�Ŀ���������ϰ�ߣ���������ͳһʹ��django�����
web.py,���ٸ�������ʹ��ʹ���������ά������������ ����ͬ�ı���淶����
�����

��������ά�ȵ������ˡ�
�� 2011��03��31�� 09:49, lu_zi_2000 �:

Fei Pan

unread,
Mar 31, 2011, 2:25:27 AM3/31/11
to pyth...@googlegroups.com
控制复杂度

在 2011年3月31日 上午10:48,lu_zi_2000 <lu_zi...@163.com>写道:
当然,在研究环境和开发环境,我们可以采取完全不同的作法
在研究环境里,我们努力的找到解决问题的最好方法,并把它推广
在开发环境里,我们制定统一的开发方案和习惯,比如我们统一使用django而放弃
web.py,减少复杂语法的使用使程序更容易维护,让所有人 用相同的编码规范来进
行开发等

这是两个维度的问题了。
于 2011年03月31日 09:49, lu_zi_2000 写道:
> 打算写一系列关于C++的教程了,你说的对,无论什么理由,我们都必须适应这
> 个社会,或者去改变他
>
> 尽管在你的世界里,你是它的主宰。
>
> 封装的目的在于重用,离开重用,封装没有意义。
>
> 没人让你一定去用stl的foreach来解决问题,多数时候,for加上iterator会让你
> 的程序看上去更简单,但如果有重用的目的,可能 你会写更少的代码。
>
> 还有,也不一定非要用foreach,你也可以使用boost里的boost_foreach来省略
> iterator的丑恶,当然这取决于你的兴 趣和你所掌握的知识。
>
> 最后,你完全可以写自己更喜欢的代码来达到更好的效果。
>
> 无意于回字的四种写法,只是想说,我们所处的时代是一个多元开放的时代,需要
> 我们用多角度的目光去看这个世界。一层不变的东西最终只会走向死亡, 任何简
> 单的东西都是建立在不简单之上的,只是你还没有发现它。
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
Stay Hungry. Stay Foolish.

赖勇浩

unread,
Mar 31, 2011, 3:21:35 AM3/31/11
to pyth...@googlegroups.com
2011/3/30 机械唯物主义 : linjunhalida <linjun...@gmail.com>:
> 在python里面实现命令行的pipe功能, 比如: [1,3,2,0] | sort
来个应用经验:
用这玩意儿出错以后查 Bug 艰难。详情:
http://blog.csdn.net/lanphaday/archive/2011/03/31/6291668.aspx
用 Pipe 搞定单词统计的面试题

>
> 介绍在这里: http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx
>
> 安装只需要easy_install pipe.
>
> 我写了一个小用法:
> 在ruby下面有这样的魔法: 1.hours.ago, 它估计是采用修改整型这个类的方式来做的, 这样太不pythonic.. (不知道我说错没有?)
>
> 利用pipe的话, 可以这样写:
> 1 | hour | ago
>
> 代码如下:
> https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py
>
> 个人觉得这个东西完全可以扩展到python核心模块中去了.
> 大家可以写点好玩的东西回复哈.
>
> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 发言: pyth...@googlegroups.com
> 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug
> http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
>

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

机械唯物主义 : linjunhalida

unread,
Mar 31, 2011, 3:40:40 AM3/31/11
to pyth...@googlegroups.com
为什么查bug艰难呢? 无法获取中间值? 可以 | as_list呀..

2011/3/31 赖勇浩 <ma...@laiyonghao.com>:

Leo Jay

unread,
Mar 31, 2011, 3:52:44 AM3/31/11
to pyth...@googlegroups.com, 机械唯物主义 : linjunhalida
2011/3/31 机械唯物主义 : linjunhalida <linjun...@gmail.com>:
> 为什么查bug艰难呢? 无法获取中间值? 可以 | as_list呀..
>

oneliner写起来爽,debug就头大了,谁知道在哪一步出的错啊。
只能一行一行拆开,把中间结果打出来。

--
Best Regards,
Leo Jay

hhuai

unread,
Mar 31, 2011, 4:59:49 AM3/31/11
to python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
没人觉得Ruby更加优雅吗。


On Mar 30, 11:19 am, 机械唯物主义 : linjunhalida <linjunhal...@gmail.com>
wrote:
> 在python里面实现命令行的pipe功能, 比如: [1,3,2,0] | sort


>
> 介绍在这里:http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx
>
> 安装只需要easy_install pipe.
>
> 我写了一个小用法:
> 在ruby下面有这样的魔法: 1.hours.ago, 它估计是采用修改整型这个类的方式来做的, 这样太不pythonic.. (不知道我说错没有?)
>
> 利用pipe的话, 可以这样写:
> 1 | hour | ago
>

> 代码如下:https://bitbucket.org/linjunhalida/code-example/src/tip/python/1houra...
>
> 个人觉得这个东西完全可以扩展到python核心模块中去了.
> 大家可以写点好玩的东西回复哈.

limodou

unread,
Mar 31, 2011, 5:01:35 AM3/31/11
to pyth...@googlegroups.com


2011/3/31 hhuai <886...@gmail.com>
没人觉得Ruby更加优雅吗。


有啊。所以他们有他们的讨论组。 

Zoom.Quiet

unread,
Mar 31, 2011, 5:07:22 AM3/31/11
to pyth...@googlegroups.com, limodou
在 2011年3月31日 下午5:01,limodou <lim...@gmail.com> 写道:
> 2011/3/31 hhuai <886...@gmail.com>
>>
>> 没人觉得Ruby更加优雅吗。
> 有啊。所以他们有他们的讨论组。

- 但是,这里不多
- 俺痛恨 使用 end 作为语法边界的所有语言
- 当然,沈游侠也说了,正是因为有人对 Py 使用缩进作语法边界很不爽,所以有了 Ruby

--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
哲: http://www.zeuux.org/home/zoomquiet
豆: http://www.douban.com/group/zoomquiet
书: http://code.google.com/p/openbookproject
营: http://code.google.com/p/kcpycamp/wiki/PythoniCamp

Zandy

unread,
Mar 31, 2011, 5:26:03 AM3/31/11
to pyth...@googlegroups.com, Zoom.Quiet, limodou
多元化好,不同的人可以选到自己喜欢的,有人喜欢缩进,有人喜欢 end,像我就喜欢 { ... } 
,,,好像跑题了,呵呵

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
-- best regards!
-- by Zandy

Rujia Liu

unread,
Mar 31, 2011, 5:46:51 AM3/31/11
to pyth...@googlegroups.com
如果多元化,但是不能随便选,就悲剧了,呵呵...
我也喜欢{ ... },可是偏偏要写maxscript,和C++交叉着写的时候很容易写成if xxx then { ...
}(maxscript的if语法是 if xxx then ( ... ))

2011/3/31 Zandy <zan...@gmail.com>:

pansz

unread,
Mar 31, 2011, 9:20:50 PM3/31/11
to pyth...@googlegroups.com
2011/3/31 lu_zi_2000 <lu_zi...@163.com>:

> 没人让你一定去用stl的foreach来解决问题,多数时候,for加上iterator会让你
> 的程序看上去更简单,但如果有重用的目的,可能 你会写更少的代码。

从科学的角度来讲,语言应当从最高标准评价,也就是说,这个语言能够写出的最优秀代码能达到什么程度。

从工程的角度来讲,语言只能从最低标准评价,也就是说,这个语言能够写出的最难懂的代码能到什么程度,因为在实践中你很难阻止一个工程师在语言允许的范围内写出令人费解与误解的代码。任何一个不能被程序自动检查的代码规范都会导致要么被人忽略和忘却被淡出,要么耗费大量的人力去检查实施而无法坚持。

努力说明一个语言的代码能够多么优秀,这只具有科研上的意义;但是一个语言在避免糟糕代码,以及避免糟糕代码带来的后果方面特别突出的话,他就可能在实际软件开发中广泛运用。

回到切题的问题:Python 的 Pipe 属于什么样的行为?在我看来,目前为止非常好,因为他描述的方式足够优雅。而且不容易导致令人费解的代码。

Shell Xu

unread,
Mar 31, 2011, 9:50:41 PM3/31/11
to pyth...@googlegroups.com
pipe是一个看起来非常爽的东西,不过直到被封装并且经过足够多的测试,证明其在保持内部黑盒的同时具有相当的鲁棒性,我不打算在实际的项目中进行运用。
实际上,达到这个标准的话,这东西绝对有望被加入标准python特性。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

Rujia Liu

unread,
Mar 31, 2011, 9:51:30 PM3/31/11
to pyth...@googlegroups.com
2011/4/1 pansz <pan.s...@gmail.com>:

> 2011/3/31 lu_zi_2000 <lu_zi...@163.com>:
>> 没人让你一定去用stl的foreach来解决问题,多数时候,for加上iterator会让你
>> 的程序看上去更简单,但如果有重用的目的,可能 你会写更少的代码。
>
> 从科学的角度来讲,语言应当从最高标准评价,也就是说,这个语言能够写出的最优秀代码能达到什么程度。
>
> 从工程的角度来讲,语言只能从最低标准评价,也就是说,这个语言能够写出的最难懂的代码能到什么程度,因为在实践中你很难阻止一个工程师在语言允许的范围内写出令人费解与误解的代码。任何一个不能被程序自动检查的代码规范都会导致要么被人忽略和忘却被淡出,要么耗费大量的人力去检查实施而无法坚持。

非常同意。不过要是让我钻牛角尖的话,工程上也不能只考虑“最低”吧,考虑”正常情况下“能写出来的最难懂代码就好。比如,ioccc那种级别的难懂代码,实践中还是可以阻止的
:)

机械唯物主义 : linjunhalida

unread,
Mar 31, 2011, 10:23:17 PM3/31/11
to pyth...@googlegroups.com
class Pipe:
def __init__(self, function):
self.function = function

def __ror__(self, other):
return self.function(other)

def __call__(self, *args, **kwargs):
return Pipe(lambda x: self.function(x, *args, **kwargs))

这样的代码还需要做什么封装...

我考虑了一下上面的实现, 其实就是把函数套函数的方式利用 pipe的方式写得更清晰了.
因为利用生成器, 并不会增加函数调用, 不过中间会用到很多函数调用, 性能会差很多...


2011/4/1 Shell Xu <shell...@gmail.com>:

Linker

unread,
Mar 31, 2011, 10:38:06 PM3/31/11
to pyth...@googlegroups.com, 机械唯物主义 : linjunhalida
Python哲学是 显式 比 隐式 好。
这个Pipe不知道算不算符合?

2011/4/1 机械唯物主义 : linjunhalida <linjun...@gmail.com>
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
Regards,
Linker Lin

linker...@gmail.com

Shell Xu

unread,
Mar 31, 2011, 10:38:24 PM3/31/11
to pyth...@googlegroups.com
所谓被封装和经过足够多的测试,其实说的是两点。
1.用户不关心你的代码是怎么写的。
2.用下来没问题。
对于简单的代码来说,通常感觉用户的却不用知道。但是结合上后者,情况就有了质变。有一类情况是,代码越简单,用户用起来问题越少。而后一类则是,代码少,所以满足不了要求,总出现各种问题,再修改,导致代码爆炸,味道越来越差。
pipe是哪种?看起来是第一种。不过我还是保守一点的好。毕竟不使用新技术的情况下写出的代码,在很久的时间内可以保持兼容性。而用了的话,出了问题只有陷入焦油坑了。为了复用代码还算值得付出机会成本,只是为了代码好看一些,我觉得我还是再等等......

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

Zoom.Quiet

unread,
Mar 31, 2011, 10:42:19 PM3/31/11
to pyth...@googlegroups.com, Linker, 机械唯物主义 : linjunhalida
在 2011年4月1日 上午10:38,Linker <linker...@gmail.com> 写道:
> Python哲学是 显式 比 隐式 好。
> 这个Pipe不知道算不算符合?
>
- 显 的是什么?!
- Pipe 着力显示的是数据的处理过程,和我们对问题的解决思路
- 从排版上,精简了原先不必要的缩进,更加美观
嗯嗯嗯!引用一下 沈游侠的军规之一:
- 代码必须写得使 code review 非常快捷,任何人不用看内容,扫一眼排版就知道是否有问题!


> 2011/4/1 机械唯物主义 : linjunhalida <linjun...@gmail.com>
>>
>> class Pipe:
>>    def __init__(self, function):
>>        self.function = function
>>
>>    def __ror__(self, other):
>>        return self.function(other)
>>
>>    def __call__(self, *args, **kwargs):
>>        return Pipe(lambda x: self.function(x, *args, **kwargs))
>>
>> 这样的代码还需要做什么封装...
>>
>> 我考虑了一下上面的实现, 其实就是把函数套函数的方式利用 pipe的方式写得更清晰了.
>> 因为利用生成器, 并不会增加函数调用, 不过中间会用到很多函数调用, 性能会差很多...

- 不一定,加入惰性运算神马的,效率是可以继续提高的

limodou

unread,
Mar 31, 2011, 11:02:37 PM3/31/11
to pyth...@googlegroups.com


2011/4/1 Zoom.Quiet <zoom....@gmail.com>

在 2011年4月1日 上午10:38,Linker <linker...@gmail.com> 写道:
> Python哲学是 显式 比 隐式 好。
> 这个Pipe不知道算不算符合?
>
- 显 的是什么?!
- Pipe 着力显示的是数据的处理过程,和我们对问题的解决思路
- 从排版上,精简了原先不必要的缩进,更加美观
嗯嗯嗯!引用一下 沈游侠的军规之一:
   - 代码必须写得使 code review 非常快捷,任何人不用看内容,扫一眼排版就知道是否有问题!



我觉得存在的问题就是:

1. 它目前不是python的标准语法,因为不是标准语法所以会有一种hack的味道。当然,如果哪天变成标准语法了,我想争论会少很多。
2. |的用法和(或)的操作符在某种程度上有语义限制。这个完全要看后面的函数
3. 因为它对函数的定义有特殊要求,并不是随便拿过来就能用的 

反正现在是以库的形式存在,自已能控制就行了。想用就用,不想用就不用。就和c++的操作符重载一样。只不过自已用可能没什么问题,但是让别人用,就要把相关的信息说得清楚让别人易于理解,这样会更好一些。省得让别人搞不清楚。

Oyster

unread,
Apr 2, 2011, 10:47:45 PM4/2/11
to python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
不错,代码好懂多了

victor lee

unread,
Apr 3, 2011, 5:34:25 AM4/3/11
to pyth...@googlegroups.com

看好呵,让代码清晰就是王道

limodou

unread,
Apr 3, 2011, 5:36:27 AM4/3/11
to pyth...@googlegroups.com


2011/4/3 victor lee <victor...@gmail.com>

看好呵,让代码清晰就是王道

觉得好就用吧。
 
在 2011-4-1 上午11:02,"limodou" <lim...@gmail.com>写道:

> 2011/4/1 Zoom.Quiet <zoom....@gmail.com>
>
>> 在 2011年4月1日 上午10:38,Linker <linker...@gmail.com> 写道:
>> > Python哲学是 显式 比 隐式 好。
>> > 这个Pipe不知道算不算符合?
>> >
>> - 显 的是什么?!
>> - Pipe 着力显示的是数据的处理过程,和我们对问题的解决思路
>> - 从排版上,精简了原先不必要的缩进,更加美观
>> 嗯嗯嗯!引用一下 沈游侠的军规之一:
>> - 代码必须写得使 code review 非常快捷,任何人不用看内容,扫一眼排版就知道是否有问题!
>>
>>
>>
> 我觉得存在的问题就是:
>
> 1. 它目前不是python的标准语法,因为不是标准语法所以会有一种hack的味道。当然,如果哪天变成标准语法了,我想争论会少很多。
> 2. |的用法和(或)的操作符在某种程度上有语义限制。这个完全要看后面的函数
> 3. 因为它对函数的定义有特殊要求,并不是随便拿过来就能用的
>
> 反正现在是以库的形式存在,自已能控制就行了。想用就用,不想用就不用。就和c++的操作符重载一样。只不过自已用可能没什么问题,但是让别人用,就要把相关的信息说得清楚让别人易于理解,这样会更好一些。省得让别人搞不清楚。
 

redaready

unread,
Apr 3, 2011, 12:23:20 PM4/3/11
to pyth...@googlegroups.com
对实现DSL,这个视频把各种技巧总结得不错:

Zoom.Quiet

unread,
Apr 3, 2011, 12:37:32 PM4/3/11
to pyth...@googlegroups.com, redaready
在 2011年4月4日 上午12:23,redaready <redare...@gmail.com> 写道:
> 对实现DSL,这个视频把各种技巧总结得不错:
> http://pycon.blip.tv/file/3359419

不行太和谐了,谁有下载下来的?!
- 或是 幻灯也成?

redaready

unread,
Apr 3, 2011, 2:30:08 PM4/3/11
to pyth...@googlegroups.com, redaready
Reply all
Reply to author
Forward
0 new messages