python的代码缩进真是坑爹

629 views
Skip to first unread message

aking

unread,
Nov 6, 2011, 8:32:14 PM11/6/11
to pyth...@googlegroups.com
今天被这个代码缩进搞得很郁闷,
我一台机器上用KOMODO写的代码,到另一台机器上运行的时候莫名其妙出错了,一调试才发现是代码缩进的问题,真是火大。
看到一个兄弟的博客也是被代码缩进的问题给耍了
我就纳闷了,就不能用{} begin end之类的来分割代码块么?
有谁知道历史渊源的给讲讲故事哈,安慰下偶们受伤的心灵。
附这个苦命阶级兄弟的博文
python一句代码干掉你三天良性睡眠(关于代码缩进)
http://www.4ucode.com/Study/Topic/1509755

Felinx Lee

unread,
Nov 6, 2011, 8:40:17 PM11/6/11
to pyth...@googlegroups.com
这个你为啥不用Ruby或VB呢?
Python就长这幅德性,是有人欢喜有人恨啊!

2011/11/7 aking <kang...@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



--
What can change the nature of a man?(Planescape Torment)
----------------------------------------------------------------------------------------
http://feilong.me            Felinx Lee's Blog (Chinese Only)
http://www.zhimaq.com IT Q&A (Chinese Only)
http://poweredsites.org  What powered your sites? PHP, Ruby or Python?

崔昊

unread,
Nov 6, 2011, 8:41:12 PM11/6/11
to pyth...@googlegroups.com
那自己用ruby好了呗,抱怨是没有意义的。

slene

unread,
Nov 6, 2011, 8:44:09 PM11/6/11
to pyth...@googlegroups.com, slene
编程习惯和规范的问题,从来没遇到过缩进问题。
项目统一使用 pycharm, 所有编辑代码的工具设置为 tab = 4 space

yaroot

unread,
Nov 6, 2011, 8:46:59 PM11/6/11
to pyth...@googlegroups.com
这种事自己STFW一下不就完了...
这是python哲学..不喜欢也很正常, 你会喜欢ruby的..

我的习惯是永远用4个空格, 可以看看 PEP8 和 idiomatic python

2011/11/7 aking <kang...@gmail.com>:

pansz

unread,
Nov 6, 2011, 8:48:16 PM11/6/11
to pyth...@googlegroups.com
2011/11/7 aking <kang...@gmail.com>:

> 今天被这个代码缩进搞得很郁闷,
> 我一台机器上用KOMODO写的代码,到另一台机器上运行的时候莫名其妙出错了,一调试才发现是代码缩进的问题,真是火大。

这个,能讲讲具体例子么?一个机器上能运行的话,没理由另外一台机器缩进就不对了吧。

另外,不用tab字符,tab一律转换成空格,一般可以少很多问题。

aking

unread,
Nov 6, 2011, 8:51:04 PM11/6/11
to pyth...@googlegroups.com
关键是这种情况在实际环境中会引发很多蛋筒问题
我想知道这么做的原因是什么?纯粹是为了偷懒?

aking

unread,
Nov 6, 2011, 8:53:32 PM11/6/11
to pyth...@googlegroups.com
噢我忘记说了
另外一台机器上用的是pythonwin,
难道python可以跨平台就是不能跨IDE?

aking

unread,
Nov 6, 2011, 8:55:00 PM11/6/11
to pyth...@googlegroups.com
不知道这个对应python的那一条哲学:(

老光

unread,
Nov 6, 2011, 9:04:50 PM11/6/11
to pyth...@googlegroups.com
别牢骚了,有很多人正是因为喜欢这种以缩进替代各种括号或助记符的风格,才转学python的,比如我.

缩进问题即使跨平台,跨编辑器,也只发生在copy别人的代码来插入自己的文件中的时候,单个文件中是不会有问题的.借别人的源码前,要先仔细读读才好.

叉叉

unread,
Nov 6, 2011, 9:05:20 PM11/6/11
to pyth...@googlegroups.com
猜想可能是这样的。

在编辑器A中,写了a.py的代码。
然后在编辑器B中,又添加了一部分代码。

编辑器A用了4个空格做缩进。
编辑器B用了TAB做缩进。

蛋疼往往都是自找的。

洗洗冲冲,再吹吹风就好了。注意风向和毛的方向。

aking

unread,
Nov 6, 2011, 9:08:28 PM11/6/11
to pyth...@googlegroups.com
每一行代码都是我自己敲的,不存在借的问题
语言是用于实际使用的,他的一些特性不应该对使用造成困扰
所以我想知道这么做的理由

aking

unread,
Nov 6, 2011, 9:13:48 PM11/6/11
to pyth...@googlegroups.com
应该就是这种情况,其实我对python的要求更高些
求一种无痛舒服的语言

pansz

unread,
Nov 6, 2011, 9:26:40 PM11/6/11
to pyth...@googlegroups.com
2011/11/7 aking <kang...@gmail.com>:

> 每一行代码都是我自己敲的,不存在借的问题
> 语言是用于实际使用的,他的一些特性不应该对使用造成困扰
> 所以我想知道这么做的理由

你先要知道困扰是怎么产生的,然后才能知道理由。如果这个困扰是你的编辑器产生的,那么责备 python 的理由何在呢?只能说明设计
python 的人要求编程人员必须有一个靠谱的编辑器而已。

目前能发现的问题无非就下面两种:
1。混用 空格跟 tab。
2。粘贴别人代码之前没有关闭自动缩进(话说某些编辑器在粘贴的时候能够自动关闭自动缩进的)。

但是话说乱拷贝别人代码跟混用空格 tab 本来就是很糟糕的习惯。

老光

unread,
Nov 6, 2011, 9:47:55 PM11/6/11
to pyth...@googlegroups.com
嗯嗯,玩笑话哈,楼主别生气:楼主来这地儿说这事,是否有轻微的自杀倾向...
尝试将4个连续空格都换成制表符,再尝试将制表符替换回4个连续空格.注,此处的"^I"是按TAB键.
:%s/ /^I/g
:%s/^I/ /g




----- Original Message -----
From: "pansz" <pan.s...@gmail.com>
To: <pyth...@googlegroups.com>
Sent: Monday, November 07, 2011 10:26 AM
Subject: Re: [CPyUG] python的代码缩进真是坑爹


jyf

unread,
Nov 6, 2011, 10:36:32 PM11/6/11
to pyth...@googlegroups.com
在你的机器上可以跑 在别的机器上就有缩进问题?

应该是你机器上用了一种缩进 然后到了别的平台又用了别的缩进策略来编辑过吧?

这个事情怪只怪你不用 vim/emacs 而去用 其他编辑器 :D

On Mon, Nov 07, 2011 at 09:53:32AM +0800, aking wrote:
> 噢我忘记说了
> 另外一台机器上用的是pythonwin,
> 难道python可以跨平台就是不能跨IDE?
>

Anders

unread,
Nov 6, 2011, 10:56:33 PM11/6/11
to pyth...@googlegroups.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



--
我们都是和自己赛跑的人,为了美好的
未来奔跑不息,要知道超越自己也是一
种胜利。

Hyacinthus

unread,
Nov 6, 2011, 11:21:56 PM11/6/11
to pyth...@googlegroups.com
我最喜欢的就是python的这个缩进了!
这是python代码优美的最大原因呀

2011/11/7 Anders <ander...@gmail.com>



--
from Muninn

MuSheng Chen

unread,
Nov 7, 2011, 12:28:33 AM11/7/11
to pyth...@googlegroups.com
喜欢缩进,现在看到用{}、begin/end之类的就像一陀陀的排泄物。

2011/11/7 Hyacinthus <hyaci...@gmail.com>

依云

unread,
Nov 7, 2011, 12:43:32 AM11/7/11
to pyth...@googlegroups.com
On Mon, Nov 07, 2011 at 09:44:09AM +0800, slene wrote:
> 编程习惯和规范的问题,从来没遇到过缩进问题。
> 项目统一使用 pycharm, 所有编辑代码的工具设置为 tab = 4 space

这样不小心混用 tab 和 space 时 Python 会报错的。Python 总是认为 1 tab
= 8 spaces。

> 在 2011-11-7,上午9:32, aking 写道:
>
> > 今天被这个代码缩进搞得很郁闷,
> > 我一台机器上用KOMODO写的代码,到另一台机器上运行的时候莫名其妙出错了,一调试才发现是代码缩进的问题,真是火大。
> > 看到一个兄弟的博客也是被代码缩进的问题给耍了
> > 我就纳闷了,就不能用{} begin end之类的来分割代码块么?
> > 有谁知道历史渊源的给讲讲故事哈,安慰下偶们受伤的心灵。
> > 附这个苦命阶级兄弟的博文
> > python一句代码干掉你三天良性睡眠(关于代码缩进)
> > http://www.4ucode.com/Study/Topic/1509755

--
Best regards,
lilydjwg

Linux Vim Python 我的博客
http://lilydjwg.is-programmer.com/

Maconel Sun

unread,
Nov 7, 2011, 12:56:10 AM11/7/11
to pyth...@googlegroups.com
就是因为用缩进来表示代码块,才让我喜欢上了python。
我们现在的项目是c++的,项目规定用4个空格,但还是有很多人用tab(vc默认是tab)。因为编译不会有问题,所以也没人去纠正这个事。要是像python一样强制统一就好了。


aking

unread,
Nov 7, 2011, 5:10:09 AM11/7/11
to pyth...@googlegroups.com
诸位python给我造成的不便是一个方面
另外一个方面就是我邮件里提到的那篇博文里说的情况,因为代码缩进的问题,一不小心造成逻辑错误,而且还很难检查出来,
这个从工程方面来讲是一个很不好的特点,像我平时使用if语句都是喜欢像下面这样的,哪怕是if里只有一条语句我都会这样
因为这样语义明确,我自己看也好,别人看也好,都一眼能够明白
if(xxx)
{
dodo;
}

python使用空格或者TAB来划分代码块,虽然写代码的时候方便了,但是造成代码块界限不明显很容易由于失误造成逻辑错误
而且很难检查出来,比如下面的例子python code1 python code2,再假如这样一个情景:某苦逼程序员深夜加班写下了代码
python code1,然后睡意朦胧中多敲了几个空格,结果变成了python code2,好像下面这样几条语句拿出来示众当然是容易发
现错误在哪里,可是如果是几十几百行代码,且深层嵌套的代码里呢像python code3一样,说实话,我小于60的智商一看到这样的
代码头就晕了。
python code1
if xxx:
do111
do222

python code2
if xxx:
do111
do222

python code3
if xx11:
do111
if x222:
if x333:
xxxx
xxxx
。。。。。。。


再次附上url并加全文
python一句代码干掉你三天良性睡眠(关于代码缩进)
http://www.4ucode.com/Study/Topic/1509755
python一句代码干掉你三天良性睡眠(关于代码缩进)
需求:一个大学里提供一门课程,让学生参加资格考试,考完之后,学校想知道自己学生在考试时的表现,如果通过率高,就增加学费。现在,要求写一个程序,对考试结果进行总结。这里假设有10个学生,1表示该学生通过了考试,2表示没有通过。

1.输入每个考试结果(1或2)。每次请求另一个考试结果时,都在屏幕上显示消息:“Enter result”。
2.统计两类考试结果的数量(1的数量和2的数量)。
3.显示考试结果总结,分别指出通过和没有通过考试的学生的人数。
4.假如有8名以上的学生通过考试,便打印一条消息 “Raise tuition”(增加学费)。
×××××××××

1.程序必须处理10个考试结果,所以需要一个计数器控制的循环。
2.每个考试结果都是1个数字,除了1就是2.假如数字不是1,就假设它是2.
3.要使用两个计数器:一个统计通过考试的学生数量,另一个统计没有通过的数量。
4.程序处理完所有结果后,必须判断是否有8名以上的学生通过了考试。有的话这个学校要提高学费了。
×××××××××
passes=0
failures=0
studentCounter=1

while passes < = 10:
result=raw_input("Enter result:")
result=int(result)
if result ==1:
passes=passes+1
else:
failures=failures+1
studentCounter=studentCounter+1 #这句是重点

print passes
print failures
if passes >8:
print "add"

以上就是实现代码,不过在python下面需要注意地一点是,一定要注意缩进,没有一个语言要求那么严格的,python例外。而且丫还死不报错。就看你逻辑错误。。哎,我今天可以睡个好觉了。

aking

unread,
Nov 7, 2011, 5:12:11 AM11/7/11
to pyth...@googlegroups.com
我还是认为python的这个特性存在缺点

在 2011年11月7日 上午11:36,jyf <jyf...@gmail.com> 写道:

毛毛

unread,
Nov 7, 2011, 5:10:42 AM11/7/11
to pyth...@googlegroups.com
这个问题就别说了吧,喜欢的人有喜欢的理由,不喜欢的人有不喜欢的理由,觉得好就用,觉得不好就不用,多大的事。

于2011年11月07日 星期一 18时12分11秒,aking写到:

Zoom.Quiet

unread,
Nov 7, 2011, 5:21:12 AM11/7/11
to pyth...@googlegroups.com
在 2011年11月7日 下午6:10,aking <kang...@gmail.com> 写道:
> 诸位python给我造成的不便是一个方面
> 另外一个方面就是我邮件里提到的那篇博文里说的情况,因为代码缩进的问题,一不小心造成逻辑错误,而且还很难检查出来,
> 这个从工程方面来讲是一个很不好的特点,像我平时使用if语句都是喜欢像下面这样的,哪怕是if里只有一条语句我都会这样
> 因为这样语义明确,我自己看也好,别人看也好,都一眼能够明白
>  if(xxx)
>  {
>     dodo;
>  }
>
> python使用空格或者TAB来划分代码块,虽然写代码的时候方便了,但是造成代码块界限不明显很容易由于失误造成逻辑错误
> 而且很难检查出来,比如下面的例子python code1 python code2,再假如这样一个情景:某苦逼程序员深夜加班写下了代码
> python code1,然后睡意朦胧中多敲了几个空格,结果变成了python code2,好像下面这样几条语句拿出来示众当然是容易发
> 现错误在哪里,可是如果是几十几百行代码,且深层嵌套的代码里呢像python code3一样,说实话,我小于60的智商一看到这样的
> 代码头就晕了。

- 嘿嘿嘿!这正是俺爱死 Py 的重要原因之一:
- 这货内置的精神追求就是
- 不得写出难以看懂的代码!
- 既然使用缩进,没有其它神马多余的语法结构标识,所以:
- 你应该使用靠谱的编辑来辅助管理你不好的缩进习惯
- 你无法维护超过50行,多过2层的逻辑
- 你无法忍受其它人乱来的缩进方式
那么这也意味着:
+ 你忽然开始享受人类最优雅和NB的编辑器了
+ 你的所有函式都2于50行,简洁明了
+ 你所在的团队有稳定统一的代码规约了,你看任何人的代码都没有反胃的感觉了
等等
一切都是只准用缩进来标识代码块引发的...
非常非常敬佩 Guido 老爹当年怎么发现这招儿的...


> python code1
>   if xxx:
>       do111
>   do222
>
> python code2
>   if xxx:
>       do111
>       do222
>
> python code3
>   if xx11:
>       do111
>       if x222:
>          if x333:
>              xxxx
>          xxxx
>            。。。。。。。
>
>
>
>
> 再次附上url并加全文
> python一句代码干掉你三天良性睡眠(关于代码缩进)
> http://www.4ucode.com/Study/Topic/1509755


--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

Leo Jay

unread,
Nov 7, 2011, 5:25:45 AM11/7/11
to pyth...@googlegroups.com
2011/11/7 aking <kang...@gmail.com>
>
> 我还是认为python的这个特性存在缺点
>

我感觉你的抱怨没有意义。给我的感觉就像在抱怨为啥C语言一定要一对一对的括号对好,一旦少了个括号就出错一样。
人家语法就是这样定义的。

你的代码只用一个或两个空格那是不好注意缩进。一般来说都是用4个空格的。

代码写出了一堆if的时候,你就应该抽成独立的函数了,而不是全写在一起。就算用C,你写个7,8层if放在一起,也是不可读的。

无论你在用什么语言,只要你开始把其它语言的习惯往上套,都是别扭的,都在给自己找麻烦。

如果你真的想用python,为什么不去习惯它呢?或者你自己fork一个缩进无所谓的python版本出来?

--
Best Regards,
Leo Jay

limodou

unread,
Nov 7, 2011, 5:26:47 AM11/7/11
to pyth...@googlegroups.com
2011/11/7 aking <kang...@gmail.com>:
> 我还是认为python的这个特性存在缺点
>

不管你喜欢不喜欢,python已经这样了,并且已经过了有10几年了,估计不会再有变化了。所以再讨论好不好没太大意义,除非你有能力把它改掉,不然白白浪费时间。

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

Wang Xuerui

unread,
Nov 7, 2011, 5:32:11 AM11/7/11
to pyth...@googlegroups.com
在 2011年11月7日 下午6:12,aking <kang...@gmail.com> 写道:
> 我还是认为python的这个特性存在缺点
。。。我也是新手,不过。。缩进什么的脑内跟踪应该不难区分吧,还有一个就是忘掉从属关系的时候直接光标定位到第一个字符,一溜上箭头就能找到开始这个语句块的语句。。。

你要是实在不习惯,用这个笑话里面的方法吧。。(各位大虾不要向我扔砖块。>_<)
def voom(spam,eggs):
if condition: #{
do_something
#}
这样。。或者if xxx: #then 再#end if也行。。。随你便了。。

Leo Jay

unread,
Nov 7, 2011, 5:34:41 AM11/7/11
to pyth...@googlegroups.com
2011/11/7 Leo Jay <python...@gmail.com>:

当初我开始注意到python就是因为它居然把缩进当成语法的一部分。你再也不会看到同一个代码片段前几行缩进3个空格,后几行缩进10个空格的乱七八糟的代码了。
不知道你信不信,我见过一段C++代码,在visual studio里,我一看,一屏的空白。我还在想呢,谁没事空这么多行啊。
当我鼠标在空白上一框我才发现,这段代码缩进了100多个空格,代码在屏幕右边。。。

每个语言都有自己的独特的地方。有的你喜欢,有的你不喜欢。选自己喜欢的用就是了。
我当初也看过lua和ruby,感觉lua标准库太少,ruby到处都是 | 和 =>看上去跟perl一样,我都不喜欢。所以一直用python。
缩进对我来说从来都不是问题,我无论什么语言,一律4个空格做缩进。

依云

unread,
Nov 7, 2011, 5:30:27 AM11/7/11
to pyth...@googlegroups.com

这个似乎是从 ABC 语言继承下来的。

>
> > python code1
> > if xxx:
> > do111
> > do222
> >
> > python code2
> > if xxx:
> > do111
> > do222
> >
> > python code3
> > if xx11:
> > do111
> > if x222:
> > if x333:
> > xxxx
> > xxxx
> > 。。。。。。。
> >
> >
> >
> >
> > 再次附上url并加全文
> > python一句代码干掉你三天良性睡眠(关于代码缩进)
> > http://www.4ucode.com/Study/Topic/1509755
>

--

依云

unread,
Nov 7, 2011, 5:38:55 AM11/7/11
to pyth...@googlegroups.com
On Mon, Nov 07, 2011 at 06:10:09PM +0800, aking wrote:
> 诸位python给我造成的不便是一个方面
> 另外一个方面就是我邮件里提到的那篇博文里说的情况,因为代码缩进的问题,一不小心造成逻辑错误,而且还很难检查出来,
> 这个从工程方面来讲是一个很不好的特点,像我平时使用if语句都是喜欢像下面这样的,哪怕是if里只有一条语句我都会这样
> 因为这样语义明确,我自己看也好,别人看也好,都一眼能够明白
> if(xxx)
> {
> dodo;
> }
>
> python使用空格或者TAB来划分代码块,虽然写代码的时候方便了,但是造成代码块界限不明显很容易由于失误造成逻辑错误
> 而且很难检查出来,比如下面的例子python code1 python code2,再假如这样一个情景:某苦逼程序员深夜加班写下了代码
> python code1,然后睡意朦胧中多敲了几个空格,结果变成了python code2,好像下面这样几条语句拿出来示众当然是容易发
> 现错误在哪里,可是如果是几十几百行代码,且深层嵌套的代码里呢像python code3一样,说实话,我小于60的智商一看到这样的
> 代码头就晕了。

你的 C 语言习惯我很赞同,但是 Python 不是 C。Python 的缩进不对会造成逻辑
错误,C 语言的花括号放错位置不也一样会造成错误吗?我见过这种 C 代码:

if(xxx);
{
yyy;
}

以及这种:

x == func();

这些都是语言的特性而已。如果你不喜欢,那你可以用别的自己喜欢的语言啊。至
于”睡意朦胧“中多敲了几个空格,实际上在睡意朦胧的时候使用任何编程语言都会
出错的。

至于深层嵌套,你不觉得不爽吗?既然不爽,当然应该避免了。

Leo Jay

unread,
Nov 7, 2011, 5:58:07 AM11/7/11
to pyth...@googlegroups.com
2011/11/7 依云 <lily...@gmail.com>:

>我见过这种 C 代码:
>
> if(xxx);
> {
>  yyy;
> }
>
> 以及这种:
>
> x == func();
>
> 这些都是语言的特性而已。如果你不喜欢,那你可以用别的自己喜欢的语言啊。至
> 于”睡意朦胧“中多敲了几个空格,实际上在睡意朦胧的时候使用任何编程语言都会
> 出错的。
>

我还见过这样的C++代码:
if (...) {
foo(); // why??????????/
return xxx;
}
return yyy;

结果由于trigraph的原因,那个return xxx;被注释掉了。
在foo()执行完之后居然会去执行return yyy

当年的编译器一般都不对这种trigraph出warning。恰好满足if条件的概率又小,当时,那好一通debug啊。

Hendiko

unread,
Nov 7, 2011, 6:16:19 AM11/7/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
我也被缩进搞过,还碰到过检查了缩进是正确的,但就是提示缩进有问题。我用的是ULIPAD 和 PYTHONWIN的编辑器。

greatghoul

unread,
Nov 7, 2011, 7:39:19 AM11/7/11
to pyth...@googlegroups.com
可能一些ide会自动空格转tab或者tab转空格,导致缩进不一致,报错吧。

2011/11/7 Hendiko <hend...@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



--
Ghoul To World! -  http://www.g2w.me
ScriptFan - http://scriptfan.com/

limodou

unread,
Nov 7, 2011, 8:31:43 AM11/7/11
to pyth...@googlegroups.com
2011/11/7 Hendiko <hend...@gmail.com>:

> 我也被缩进搞过,还碰到过检查了缩进是正确的,但就是提示缩进有问题。我用的是ULIPAD 和 PYTHONWIN的编辑器。
>

ulipad的话是可以显示空白的,一看就清楚了。关键是不要混用。

li zJay

unread,
Nov 7, 2011, 9:44:42 AM11/7/11
to pyth...@googlegroups.com
通过缩进来表达程序段是一个更简洁的设计,很多人感觉不适就是因为刚开始学习程序语言的时候接触到的是C/Java/C#等风格的{}。

就像一个人从小就使用刀叉吃饭,他可能很难想像只用两根棍子也可以吃饭。

2011/11/7 limodou <lim...@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



--
祝好

David Soh

unread,
Nov 7, 2011, 10:38:33 AM11/7/11
to pyth...@googlegroups.com
同意,我学的第一个语言就是python……(有看过JAVA的书,不过一直都没有深入去研究)

2011/11/7 li zJay <zjay...@gmail.com>

CHEN Xing

unread,
Nov 7, 2011, 4:46:23 PM11/7/11
to pyth...@googlegroups.com
好处还是明显的,比如:
* 把缩进做为语法的一部分,强制大家使用一种不太差的代码风格。。像C++,有些人的代码缩进确实是混乱的。。。
* 从语法角度统一了格式,比如C/C++,有的风格把{和前一行代码写在一行,有的把{单独起一行,还有的在{单独起一行的基础上再缩进两个格……每个人的习惯不一样,读别人代码/协作时要适应风格,还是很讨厌的……
* 代码看着比较简洁。

另外,Tab与空格的问题实在不值得抱怨:
* 在源代码中混用Tab与空格缩进是绝对不值得提倡的,用你的话说,不能“跨IDE”啊……如果别人的TAB设定不一样,看到的代码缩进就是一团糟。。Python的语法一定程度上避免了这种情况,是好事啊。
* 缩进既然作为语法的一部分,学Python时是应该有所了解的。。而且统一缩进四个空格这件事好像也挺多地方强调的。
* 当然,从楼主的经历看,不幸被TAB问题困扰也是难免的。但也应注意到该问题对每个个体来讲其实是“一劳永逸”的,遇到一次这个问题,以后有所注意,就不会再被其所困扰了……

再者,其实心理上的因素也很重要,一般来讲如果非常习惯了某种语法,就不太容易接受不同的语法。。比如我以前对Pascal比较熟,就觉得C式的语法很混乱,比如用丑陋的{}而不用begin
end,赋值居然不用:=强调一下之类…… 不过时间久了习惯了其实也都一样的……

总之,个人感觉抱怨一个语言的语法其实意义真的不大,除非想设计一种更好的语言……不过这应该需要很多很多积累了吧……

当然,如果特别想写end,ruby吧!


CHEN, Xing / 陈醒

2011/11/6 aking <kang...@gmail.com>:


> 今天被这个代码缩进搞得很郁闷,
> 我一台机器上用KOMODO写的代码,到另一台机器上运行的时候莫名其妙出错了,一调试才发现是代码缩进的问题,真是火大。
> 看到一个兄弟的博客也是被代码缩进的问题给耍了
> 我就纳闷了,就不能用{} begin end之类的来分割代码块么?
> 有谁知道历史渊源的给讲讲故事哈,安慰下偶们受伤的心灵。
> 附这个苦命阶级兄弟的博文
> python一句代码干掉你三天良性睡眠(关于代码缩进)
> http://www.4ucode.com/Study/Topic/1509755
>

HYRY

unread,
Nov 7, 2011, 6:18:36 PM11/7/11
to pyth...@googlegroups.com
我觉得缩进语法还是很直观的, 多看看就会习惯的。
但是TAB和space混排的问题就比较头疼的,我也经常会在上面栽跟头。
比如在别的电脑上想修改一下程序,如果没有好的编辑器就会比较麻烦。

既然Python推荐使用4个空格作为缩进,我感到疑惑的是为什么Python没有禁止
使用Tab。或者干脆从语法上只认4个空格作为缩进,那就不会有这么多麻烦了。

Python没有这样规定,是因为有人偏好用Tab或者2个空格吧。有时候会发现一
段有用的代码,但是缩进格式和自己的不同,于是还得调整它的缩进格式才
能使用。

Shell Xu

unread,
Nov 7, 2011, 8:30:50 PM11/7/11
to pyth...@googlegroups.com

两个方面。
如果你会被python的缩进搞混逻辑,那c的无括号语法也会。难道你再发一篇去讲c的无括号语法的存在,if内允许赋值这些特性多么不合理么?
搞混逻辑的根本原因,是你不熟悉缩进逻辑控制语法。在一眼扫过代码的时候,你下意识的按照括号封闭去解释了语义,或者不能解释语义。那当然痛苦。让python程序员去看恶意对齐的c代码也会有同样问题。
至于空格和tab的问题,属于强制格式控制语法的副作用。如果对缩进不敏感,当然不会有这个问题。因为这个理由需要对编辑器作出限制,说他坑爹是有道理的。

From P81HD

Flya Flyaa

unread,
Nov 7, 2011, 8:38:17 PM11/7/11
to pyth...@googlegroups.com
缩进的缺点同好处比起来,完全微不足道。

2011/11/8 HYRY <ruoy...@gmail.com>:

Maconel Sun

unread,
Nov 7, 2011, 8:57:04 PM11/7/11
to pyth...@googlegroups.com
On Mon, Nov 7, 2011 at 6:10 PM, aking <kang...@gmail.com> wrote:
诸位python给我造成的不便是一个方面
另外一个方面就是我邮件里提到的那篇博文里说的情况,因为代码缩进的问题,一不小心造成逻辑错误,而且还很难检查出来,
这个从工程方面来讲是一个很不好的特点,像我平时使用if语句都是喜欢像下面这样的,哪怕是if里只有一条语句我都会这样
因为这样语义明确,我自己看也好,别人看也好,都一眼能够明白
 if(xxx)
 {
    dodo;
 }

python使用空格或者TAB来划分代码块,虽然写代码的时候方便了,但是造成代码块界限不明显很容易由于失误造成逻辑错误
而且很难检查出来,比如下面的例子python code1 python code2,再假如这样一个情景:某苦逼程序员深夜加班写下了代码
python code1,然后睡意朦胧中多敲了几个空格,结果变成了python code2,好像下面这样几条语句拿出来示众当然是容易发
现错误在哪里,可是如果是几十几百行代码,且深层嵌套的代码里呢像python code3一样,说实话,我小于60的智商一看到这样的
代码头就晕了。

这恰恰就是python的优点哪。难道睡意朦胧下写的错误代码,应该悄悄地兼容它吗。
以缩进为语法的优点就是,想正常运行,请保持整洁。

 

aking

unread,
Nov 7, 2011, 10:22:13 PM11/7/11
to pyth...@googlegroups.com
我的意思就是python会兼容睡意朦胧下的代码,而且很难检查出来,这是很危险的事情。

Roowe羅立威

unread,
Nov 7, 2011, 10:27:06 PM11/7/11
to pyth...@googlegroups.com
不用tab代替4個空格(或者2個,8個)是你的編輯器的問題~關睡意什麽事情吶
Blog:www.iroowe.com
Twitterwitter.com/bestroowe

Roowe羅立威

unread,
Nov 7, 2011, 10:27:01 PM11/7/11
to pyth...@googlegroups.com
不用tab代替4個空格(或者2個,8個)是你的編輯器的問題~關睡意什麽事情吶

在 2011年11月8日 上午11:22,aking <kang...@gmail.com>写道:



--
Blog:www.iroowe.com
Twitterwitter.com/bestroowe

pansz

unread,
Nov 7, 2011, 10:49:53 PM11/7/11
to pyth...@googlegroups.com
2011/11/8 aking <kang...@gmail.com>:
> 我的意思就是python会兼容睡意朦胧下的代码,而且很难检查出来,这是很危险的事情。

在 C 里面你一样可以写出下面的代码:
if (xxx)
do111;
do222;

而且也一样不会报错。

如果你只是需要强制报错的话,可以使用 pass。

if xxx:
do111
pass
do222
这个代码不会报错。
if xxx:
do111
pass
do222

这个代码会报错,因为 pass 被认为是结束符,后面如果再接同级缩进的代码视为语法错。

所以,你可以把 pass 当做 end,只是 python 认为它可有可无而已。

HYRY

unread,
Nov 7, 2011, 10:59:59 PM11/7/11
to pyth...@googlegroups.com
我记得pass只是一个空语句,放在两个同级的语句中也不会报错的。我用Python 2.6,下面的代码不报错。难道python 3.0改了吗?

def f():
    if 1:
        print "ok"
        pass
        print "ok2"
    
f()

piglei

unread,
Nov 8, 2011, 12:14:07 AM11/8/11
to pyth...@googlegroups.com
一切吐嘈python缩进的行为都是与人民群众为敌,终究会走向灭亡滴

--

pansz

unread,
Nov 8, 2011, 12:20:18 AM11/8/11
to pyth...@googlegroups.com
2011/11/8 HYRY <ruoy...@gmail.com>:

靠谱的编辑器应该会避免你输入成这个样子的,输入 pass 之后,后面一行自动的减一级缩进。

puras

unread,
Nov 8, 2011, 12:31:29 AM11/8/11
to pyth...@googlegroups.com
使用string中的Template
现在传进去的值有一个变量名为pojo,
但是这个pojo,在模板里,有的地方需要首字母大写,
不知道在Template中,如何能调用方法在需要的地方换成首字母大写。
用capitalize方法,没有执行。

谢谢!

---------------------------------------------------------------------------------------------------
Confidentiality Notice: The information contained in this e-mail and any accompanying attachment(s)
is intended only for the use of the intended recipient and may be confidential and/or privileged of
Neusoft Corporation, its subsidiaries and/or its affiliates. If any reader of this communication is
not the intended recipient, unauthorized use, forwarding, printing,  storing, disclosure or copying
is strictly prohibited, and may be unlawful.If you have received this communication in error,please
immediately notify the sender by return e-mail, and delete the original message and all copies from
your system. Thank you.
---------------------------------------------------------------------------------------------------

依云

unread,
Nov 8, 2011, 12:33:35 AM11/8/11
to pyth...@googlegroups.com

果然,Vim 会自动处理。

limodou

unread,
Nov 8, 2011, 1:03:26 AM11/8/11
to pyth...@googlegroups.com
2011/11/8 puras <he...@neusoft.com>:

> 使用string中的Template
> 现在传进去的值有一个变量名为pojo,
> 但是这个pojo,在模板里,有的地方需要首字母大写,
> 不知道在Template中,如何能调用方法在需要的地方换成首字母大写。
> 用capitalize方法,没有执行。
>
> 谢谢!
>

首先看是什么模板系统,再说不行就在调用前先进行转换。

puras

unread,
Nov 8, 2011, 1:07:54 AM11/8/11
to pyth...@googlegroups.com
用的是Python默认的
from string import Template

ct = Template("""
    private ${pojo} ${pojo};
""")
想生成
private User user;
可现在只能生成
private user user;


于 2011/11/8 14:03, limodou 写道:
2011/11/8 puras <he...@neusoft.com>:
使用string中的Template
现在传进去的值有一个变量名为pojo,
但是这个pojo,在模板里,有的地方需要首字母大写,
不知道在Template中,如何能调用方法在需要的地方换成首字母大写。
用capitalize方法,没有执行。

谢谢!

首先看是什么模板系统,再说不行就在调用前先进行转换。


Leo Jay

unread,
Nov 8, 2011, 1:37:13 AM11/8/11
to pyth...@googlegroups.com
2011/11/8 puras <he...@neusoft.com>:

> 用的是Python默认的
> from string import Template
>
> ct = Template("""
>     private ${pojo} ${pojo};
> """)
> 想生成
> private User user;
> 可现在只能生成
> private user user;
>

嗯,这里只做变量替换,不做其它操作。你还是把这个分成两个变量吧。

aking

unread,
Nov 8, 2011, 1:39:44 AM11/8/11
to pyth...@googlegroups.com
在 2011年11月8日 下午1:33,依云 <lily...@gmail.com> 写道:
> On Tue, Nov 08, 2011 at 01:20:18PM +0800, pansz wrote:
>> 2011/11/8 HYRY <ruoy...@gmail.com>:
>> > 我记得pass只是一个空语句,放在两个同级的语句中也不会报错的。我用Python 2.6,下面的代码不报错。难道python 3.0改了吗?
>> > def f():
>> > if 1:
>> > print "ok"
>> > pass
>> > print "ok2"
>>
>> 靠谱的编辑器应该会避免你输入成这个样子的,输入 pass 之后,后面一行自动的减一级缩进。
>
> 果然,Vim 会自动处理。
~~~~~~~~~~~~~~~~~~~~~~
充分体现了Vim的强大哈

> --
> Best regards,
> lilydjwg
>
> Linux Vim Python 我的博客
> http://lilydjwg.is-programmer.com/
>

puras

unread,
Nov 8, 2011, 1:43:51 AM11/8/11
to pyth...@googlegroups.com
有哪种Template可以实现我想要的效果么?

PS:现在是用了两个变量,但是感觉这样很不舒服。

aking

unread,
Nov 8, 2011, 1:55:07 AM11/8/11
to pyth...@googlegroups.com
to pansz
在c里面
if (xxx)
do111;
do222;
是语义明确的,而且c里面有{}划分语义块的机制,而python没有
虽然有各种方法来规避python的这个缺点,但也正是这些方法的存在强烈的证明了python的不足,
至于你说的pass的方法已经有兄弟测试过了我就不多说了。

HYRY

unread,
Nov 8, 2011, 1:57:22 AM11/8/11
to pyth...@googlegroups.com
编辑器避免输入和语法报错是两回事。另外,如果你先输入了
print "ok"
print "ok2"
然后在两行之间插入一个pass,编辑器会怎样?它自动减少pass后面的代码缩进吗?

2011年11月8日火曜日14時20分18秒 UTC+9 poet:

limodou

unread,
Nov 8, 2011, 2:04:14 AM11/8/11
to pyth...@googlegroups.com
2011/11/8 puras <he...@neusoft.com>:

> 用的是Python默认的
> from string import Template
>
> ct = Template("""
> private ${pojo} ${pojo};
> """)
> 想生成
> private User user;
> 可现在只能生成
> private user user;
>

python自带的是不能做复杂的计算的,它好象只有一些基本的处理。具体的还是看下文档吧。

依云

unread,
Nov 8, 2011, 2:00:30 AM11/8/11
to pyth...@googlegroups.com
On Tue, Nov 08, 2011 at 02:55:07PM +0800, aking wrote:
> to pansz
> 在c里面
> if (xxx)
> do111;
> do222;
> 是语义明确的,而且c里面有{}划分语义块的机制,而python没有
> 虽然有各种方法来规避python的这个缺点,但也正是这些方法的存在强烈的证明了python的不足,
> 至于你说的pass的方法已经有兄弟测试过了我就不多说了。

Python 里哪条语句不语义明确了?只不过解读的方式不一样而已。C 只认 {},而
Python 要求你好好缩进。仅此而已。

aking

unread,
Nov 8, 2011, 2:09:13 AM11/8/11
to pyth...@googlegroups.com
呃~~~~~~~
哥们你没有理解我说的什么意思

puras

unread,
Nov 8, 2011, 2:09:12 AM11/8/11
to pyth...@googlegroups.com
谢谢!

顺便问下,别的模板,有能实现我想要的效果的么?


于 2011/11/8 15:04, limodou 写道:
2011/11/8 puras <he...@neusoft.com>:
用的是Python默认的
from string import Template

ct = Template("""
    private ${pojo} ${pojo};
""")
想生成
private User user;
可现在只能生成
private user user;

python自带的是不能做复杂的计算的,它好象只有一些基本的处理。具体的还是看下文档吧。


aking

unread,
Nov 8, 2011, 2:11:36 AM11/8/11
to pyth...@googlegroups.com
我投降,不纠结这个了,只是发下牢骚而已,没想到这么浪费大家的时间。

Leo Jay

unread,
Nov 8, 2011, 2:12:27 AM11/8/11
to pyth...@googlegroups.com
2011/11/8 puras <he...@neusoft.com>:
> 谢谢!
>
> 顺便问下,别的模板,有能实现我想要的效果的么?
>

http://www.makotemplates.org/

想干啥都行。

Leo Jay

unread,
Nov 8, 2011, 2:17:06 AM11/8/11
to pyth...@googlegroups.com
2011/11/8 aking <kang...@gmail.com>:

> to pansz
>   在c里面
>      if (xxx)
>        do111;
>        do222;
> 是语义明确的,而且c里面有{}划分语义块的机制,而python没有

python里空格就是用来划分语义块的。跟C的花括号一个意思。
C里面你花括号多一个少一个都不行。python也是,空格应该几个就几个,多一个少一个也不行。

> 虽然有各种方法来规避python的这个缺点,但也正是这些方法的存在强烈的证明了python的不足,
> 至于你说的pass的方法已经有兄弟测试过了我就不多说了。

puras

unread,
Nov 8, 2011, 2:21:19 AM11/8/11
to pyth...@googlegroups.com
谢谢!!!
哈。我去看看。。。

于 2011/11/8 15:12, Leo Jay 写道:
2011/11/8 puras <he...@neusoft.com>:
谢谢!

顺便问下,别的模板,有能实现我想要的效果的么?

http://www.makotemplates.org/

想干啥都行。


老光

unread,
Nov 8, 2011, 2:37:27 AM11/8/11
to pyth...@googlegroups.com
是特性,还是bug,站的角度不同,看法不同而已。
对pythoner来说, 缩进是特性,{}是bug。
对你来说,缩进是bug, {}是特性。

我们保留各自的意见吧,都不要强迫别人接受自己的看法。
大伙各回各家,洗洗睡吧……

WooParadog

unread,
Nov 8, 2011, 4:13:13 AM11/8/11
to pyth...@googlegroups.com

记得django 的有个fillter 的东西...没太用过,不清楚行不行,给一个思路了.

Sent from my mobile device

--

Larry Li

unread,
Nov 8, 2011, 5:08:23 AM11/8/11
to pyth...@googlegroups.com
用python就要用python的思维方式。
抛开python要求保持代码简洁不说,十几层的代码嵌套本身就有问题。
无论哪种语言,如果一个function一个method行数超过了一目了然的范围,就需要重构。

CHEN Xing

unread,
Nov 8, 2011, 2:14:57 PM11/8/11
to pyth...@googlegroups.com
2011/11/7 aking <kang...@gmail.com>:

> to pansz
>   在c里面
>      if (xxx)
>        do111;
>        do222;
> 是语义明确的,而且c里面有{}划分语义块的机制,而python没有

跟计算机打交道的语言语法都是严谨的,语义都是明确的……但上面C的这个例子容易导致幻觉,所以多数style
guide都要求if后面一律添加大括号。。Python中缩进做为语法的一部分,如果你觉得不明确,应该是还不够熟悉的原因,或者说对
{}式的机制太熟悉了……

换个角度说,格式好的C/C++等的程序,代码块是要服从缩进的,从而{}实际上并没有必要存在……于是Python这种语言直接就把{}省去了,代码清晰明了。

或者说,{}语法允许了混乱格式的存在,在给开发者更大的自由度同时,也引入了不少陷阱。这是C/Perl这类语言的风格吧。Python的理念应该是不同的,从语法的角度统一了很多东西,符合语法的正确的程序相比之下没有太大自由度,但在语法上的陷阱少一些。

> 虽然有各种方法来规避python的这个缺点,但也正是这些方法的存在强烈的证明了python的不足,
举例?

> 至于你说的pass的方法已经有兄弟测试过了我就不多说了。
pass是空语句吧,有点像";",跟这个讨论似乎木有关系?

CHEN, Xing / 陈醒

wang tiezhen

unread,
Nov 9, 2011, 5:18:35 PM11/9/11
to pyth...@googlegroups.com
+1

2011/11/8 WooParadog <guoha...@gmail.com>

Alexander.Lee

unread,
Nov 10, 2011, 1:27:32 AM11/10/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
优秀的Python程序员写出来的代码都是整齐划一简洁明了的,且能推而广之在使用其他语言的时候保持这一优良作风。这是优点,如果反而觉得是缺点的
话,我觉得应该反省一下自己的编码习惯

On 11月7日, 下午6时21分, "Zoom.Quiet" <zoom.qu...@gmail.com> wrote:


> 在 2011年11月7日 下午6:10,aking <kangxi...@gmail.com> 写道:
>
> > 诸位python给我造成的不便是一个方面
> > 另外一个方面就是我邮件里提到的那篇博文里说的情况,因为代码缩进的问题,一不小心造成逻辑错误,而且还很难检查出来,
> > 这个从工程方面来讲是一个很不好的特点,像我平时使用if语句都是喜欢像下面这样的,哪怕是if里只有一条语句我都会这样
> > 因为这样语义明确,我自己看也好,别人看也好,都一眼能够明白
> > if(xxx)
> > {
> > dodo;
> > }
>
> > python使用空格或者TAB来划分代码块,虽然写代码的时候方便了,但是造成代码块界限不明显很容易由于失误造成逻辑错误
> > 而且很难检查出来,比如下面的例子python code1 python code2,再假如这样一个情景:某苦逼程序员深夜加班写下了代码
> > python code1,然后睡意朦胧中多敲了几个空格,结果变成了python code2,好像下面这样几条语句拿出来示众当然是容易发
> > 现错误在哪里,可是如果是几十几百行代码,且深层嵌套的代码里呢像python code3一样,说实话,我小于60的智商一看到这样的
> > 代码头就晕了。
>

> - 嘿嘿嘿!这正是俺爱死 Py 的重要原因之一:
> - 这货内置的精神追求就是
> - 不得写出难以看懂的代码!
> - 既然使用缩进,没有其它神马多余的语法结构标识,所以:
> - 你应该使用靠谱的编辑来辅助管理你不好的缩进习惯
> - 你无法维护超过50行,多过2层的逻辑
> - 你无法忍受其它人乱来的缩进方式
> 那么这也意味着:
> + 你忽然开始享受人类最优雅和NB的编辑器了
> + 你的所有函式都2于50行,简洁明了
> + 你所在的团队有稳定统一的代码规约了,你看任何人的代码都没有反胃的感觉了
> 等等
> 一切都是只准用缩进来标识代码块引发的...
> 非常非常敬佩 Guido 老爹当年怎么发现这招儿的...


>
>
>
>
>
>
>
>
>
> > python code1
> > if xxx:
> > do111
> > do222
>
> > python code2
> > if xxx:
> > do111
> > do222
>
> > python code3
> > if xx11:
> > do111
> > if x222:
> > if x333:
> > xxxx
> > xxxx
> > 。。。。。。。
>
> > 再次附上url并加全文
> > python一句代码干掉你三天良性睡眠(关于代码缩进)
> >http://www.4ucode.com/Study/Topic/1509755
>

> --
> 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
> 俺:http://about.me/zoom.quiet
> 文字协议:http://creativecommons.org/licenses/by-sa/2.5/cn/

deepen099

unread,
Nov 10, 2011, 2:16:17 AM11/10/11
to pyth...@googlegroups.com
http://www.4ucode.com/Study/Topic/1509755 这个代码缩进的问题和我今天早上提的问题(地址:http://groups.google.com/group/python-cn/browse_thread/thread/88239f62aefe615e/5c1760f295945eef#5c1760f295945eef)很像啊,不留神就回忽略了那个地方的缩进。

walk notes

unread,
Nov 10, 2011, 3:07:00 AM11/10/11
to pyth...@googlegroups.com
一直用Tab键缩进,哪有敲空格缩进的,
还有,其它语言,就算语法不要求缩进,你写的时候就不缩进了吗?用制表符,别敲空格了!还有,赶紧换编辑器吧,怎么还用不带自动缩进的编辑器?

deepen099

unread,
Nov 10, 2011, 3:18:11 AM11/10/11
to pyth...@googlegroups.com
您好,我是一个Python的新手,现在在用Eclipse的PyDEV写Python程序,您觉得这个选择正确吗?还有就是想问一下您推荐用什么编辑器(我在使用Ubuntu)?非常感谢
退订: python-cn+unsub...@googlegroups.com (向此发空信即退!)

pansz

unread,
Nov 10, 2011, 3:35:31 AM11/10/11
to pyth...@googlegroups.com
2011/11/10 walk notes <pytho...@gmail.com>:

> 一直用Tab键缩进,哪有敲空格缩进的,
> 还有,其它语言,就算语法不要求缩进,你写的时候就不缩进了吗?用制表符,别敲空格了!还有,赶紧换编辑器吧,怎么还用不带自动缩进的编辑器?

如果你的编辑器真的支持自动缩进的话,你是完全不会遇到需要用 tab 键的时候的。

Ryan Feng

unread,
Nov 10, 2011, 3:35:48 AM11/10/11
to pyth...@googlegroups.com
正确,我很喜欢pydev+eclipse。抽空学学vim就行。

-- 
Ryan Feng
Sent with Sparrow

deepen099

unread,
Nov 10, 2011, 3:56:34 AM11/10/11
to pyth...@googlegroups.com
非常感谢您。

王万清

unread,
Nov 10, 2011, 4:13:32 AM11/10/11
to pyth...@googlegroups.com
在 2011年11月10日 下午4:18,deepen099 <deep...@163.com>写道:
您好,我是一个Python的新手,现在在用Eclipse的PyDEV写Python程序,您觉得这个选择正确吗?还有就是想问一下您推荐用什么编辑器(我在使用Ubuntu)?非常感谢

在Linux下,学习并使用下Vim或Emacs,一定会有收获。
 



--
博客:http://wangwanqing.com
微博:http://weibo.com/wyatt
Google+:https://plus.google.com/118148961813633197597/

deepen099

unread,
Nov 10, 2011, 4:19:32 AM11/10/11
to pyth...@googlegroups.com
谢谢您,我现在在用Emacs写C语言程序。

王万清

unread,
Nov 10, 2011, 4:24:40 AM11/10/11
to pyth...@googlegroups.com


在 2011年11月10日 下午5:19,deepen099 <deep...@163.com>写道:
谢谢您,我现在在用Emacs写C语言程序。


呵呵,,我在用Emacs写Python代码。
 

deepen099

unread,
Nov 10, 2011, 4:31:51 AM11/10/11
to pyth...@googlegroups.com
:)

Shell Xu

unread,
Nov 10, 2011, 6:07:02 AM11/10/11
to pyth...@googlegroups.com

吐槽一下,除了配置,我基本都用emacs。配置是用vim的。
吐槽点在哪里?你想想用emacs的人什么最重要。

From P81HD

Todd Gao

unread,
Nov 10, 2011, 6:24:08 AM11/10/11
to python-...@googlegroups.com, pyth...@googlegroups.com
很同意这一点!有的代码用空格缩进,有的用tab,结果python解释器还不能正确判断,想想有时也确实不好判断。我现在用notepad++,喜欢在run之前把tab全部转为空格。不过在idle里面编译没遇到这类问题。editplus也会出现类似问题,netbeans好像也遇到过,pydev没用过,看样子,写python代码一定要有一款好的编辑器。

在 2011年11月8日星期二UTC+8上午7时18分36秒,ruoyu zhang写道:
我觉得缩进语法还是很直观的, 多看看就会习惯的。
但是TAB和space混排的问题就比较头疼的,我也经常会在上面栽跟头。
比如在别的电脑上想修改一下程序,如果没有好的编辑器就会比较麻烦。

既然Python推荐使用4个空格作为缩进,我感到疑惑的是为什么Python没有禁止
使用Tab。或者干脆从语法上只认4个空格作为缩进,那就不会有这么多麻烦了。

Python没有这样规定,是因为有人偏好用Tab或者2个空格吧。有时候会发现一
段有用的代码,但是缩进格式和自己的不同,于是还得调整它的缩进格式才
能使用。

--
来自: 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

plotz xu

unread,
Nov 10, 2011, 9:03:27 AM11/10/11
to pyth...@googlegroups.com
今天调试一个别人的程序,确实遇到了缩进的问题

Feilong Niu

unread,
Nov 10, 2011, 9:22:53 AM11/10/11
to pyth...@googlegroups.com, python-...@googlegroups.com
VIM党可以使用如下设置,缩进字符是TAB还是空格一目了然:
set list
set listchars=tab:\|\ ,trail:-,nbsp:_


在 2011年11月10日 下午7:24,Todd Gao <todd.g...@gmail.com>写道:

Marlon Yao

unread,
Nov 10, 2011, 10:20:41 AM11/10/11
to pyth...@googlegroups.com
我的是这样设置的:
set list
set listchars=tab:▸\ ,eol:¬

效果还是不错的。

2011/11/10 Feilong Niu <fei...@gmail.com>

酿泉

unread,
Nov 11, 2011, 8:16:49 AM11/11/11
to pyth...@googlegroups.com
Python下本来就不应该写过于长的方法和函数,如果超过一屏了一般都是程序员自我反省的时候了
而且优秀的编辑器不会因为缩进而困扰

walk notes

unread,
Nov 13, 2011, 5:55:35 AM11/13/11
to pyth...@googlegroups.com
要不试试emacs吧,我也是用ubuntu, 可以脱离鼠标习惯了之后挺舒服的。

在 2011年11月10日 下午4:18,deepen099 <deep...@163.com>写道:

walk notes

unread,
Nov 13, 2011, 6:02:06 AM11/13/11
to pyth...@googlegroups.com
需要啊,突然发现一整块代码都需要整体再缩进一层的时候。

wonderbeyond

unread,
Nov 13, 2011, 6:52:18 AM11/13/11
to pyth...@googlegroups.com
Vim里这样搞:

<Ctrl-c>
Get to beginning of the block
<shift-V>
Jump to the end of the block
Press ">"
--
work wonders together!

pansz

unread,
Nov 14, 2011, 10:23:09 PM11/14/11
to pyth...@googlegroups.com
2011/11/13 walk notes <pytho...@gmail.com>:
> 需要啊,突然发现一整块代码都需要整体再缩进一层的时候。
>>
>> 如果你的编辑器真的支持自动缩进的话,你是完全不会遇到需要用 tab 键的时候的。
>>

在 vim 中是这样的:先用 V 键(大写的V)将整块代码选择,然后按 >> (就是两个大于号),此法增加缩进一级,重复使用可以多增加几级,按小于号可减少缩进。

马博文

unread,
Nov 14, 2011, 11:53:02 PM11/14/11
to pyth...@googlegroups.com
V键是在命令模式还是视图模式下使用的?命令模式下我使用>缩进成功了,视图模式下只能手动的选择一段代码,然后按>缩进,而且只能缩进一次,我那里操作出问题了么?
thanks
regards
Bowen

maomao li

unread,
Nov 15, 2011, 12:16:29 AM11/15/11
to pyth...@googlegroups.com
gv可以重复选中。如果你知道要需要缩进多少次的话可以>前加数字,如:2>就缩进两次。 编辑{}风格的代码还可以使用=命令来做自动说尽%=可以缩进{}内的内容。

很难说python使用缩进作为语法是对还是错,因为有利也有弊。利就是从语法上约束了代码具有较好的可读性。弊就是难印刷和复制粘贴代码。 你在一个网站上看到一段代码复制下来运行很可能会失败,而其他语言这样的情况比python少见。作为脚本的javascript可以被压缩优化传输,而python不能,如果python成为浏览器的脚本语言的话,我想压缩方法就是用pyc了?

Qingtang Zhou

unread,
Nov 15, 2011, 12:21:23 AM11/15/11
to pyth...@googlegroups.com
没错,按一次>确实只能缩进一次。
想要多次可以加数字,如果懒的打数字可以在要缩进的首行按. 重复上一次缩进。

2011/11/15 马博文 <iambo...@gmail.com>:


> V键是在命令模式还是视图模式下使用的?命令模式下我使用>缩进成功了,视图模式下只能手动的选择一段代码,然后按>缩进,而且只能缩进一次,我那里操作出问题了么?
> thanks
> regards
> Bowen
>
> 在 2011年11月15日 上午11:23,pansz <pan.s...@gmail.com>写道:
>>
>> 2011/11/13 walk notes <pytho...@gmail.com>:
>> > 需要啊,突然发现一整块代码都需要整体再缩进一层的时候。
>> >>
>> >> 如果你的编辑器真的支持自动缩进的话,你是完全不会遇到需要用 tab 键的时候的。
>> >>
>>
>> 在 vim 中是这样的:先用 V 键(大写的V)将整块代码选择,然后按 >>
>> (就是两个大于号),此法增加缩进一级,重复使用可以多增加几级,按小于号可减少缩进。

--
"""
Qt Zhou
Pythoner, Linuxer.
"""

phptiger86

unread,
Nov 15, 2011, 12:42:07 AM11/15/11
to python-cn
这个也是python的特点,帮你省了不少括号呢,
建议选择好一点的编辑器,
呵呵,我是喜欢这样的代码缩进,强制你把代码写整齐了,好处多多~
 
 
2011-11-15

 
 

吕明明 | 技术部

MP :15110245316    Tel010-85870206-8771  

Fax 010-85870206-8000

E-maillvmin...@ready2go.cn

Add北京市朝阳区百子湾路石门村5号东朝时代广场西区1号楼108 100022

发件人: Qingtang Zhou
发送时间: 2011-11-15  13:22:01
收件人: python-cn
抄送:
主题: Re: [CPyUG] Re: python的代码缩进真是坑爹
AD-锐迪购logo.jpg

马博文

unread,
Nov 15, 2011, 1:27:43 AM11/15/11
to pyth...@googlegroups.com
嗯,平常.用的少,都是一些基本的命令,学到了,谢谢

"""

Hyvi

unread,
Nov 15, 2011, 2:22:50 AM11/15/11
to pyth...@googlegroups.com
按等于号 自动缩进。支持各种语言。
多行缩进方法: 按v,选择要缩进的行,再按等于号(=) ,自动缩进。

在 2011年11月15日 下午1:21,Qingtang Zhou <zho...@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



--
Hyvi Tan
- Protect your dream ...


Hyvi

unread,
Nov 15, 2011, 2:33:55 AM11/15/11
to pyth...@googlegroups.com, python-...@googlegroups.com
解释下 
1) trail是什么? 
2) nbsp:_ 输入空格,怎么没看见下划线?

pansz

unread,
Nov 15, 2011, 2:48:43 AM11/15/11
to pyth...@googlegroups.com
2011/11/15 马博文 <iambo...@gmail.com>:

> V键是在命令模式还是视图模式下使用的?命令模式下我使用>缩进成功了,视图模式下只能手动的选择一段代码,然后按>缩进,而且只能缩进一次,我那里操作出问题了么?

要想熟练vim可以认为:一切命令都是基于命令模式的,其他的所有模式都是临时模式,换句话说vim只有一个模式。当你认为 vim
只有一个模式的时候,你的 vim 一般就已经非常纯熟了。

V 键之后可以使用 j 和 k 等行动类命令上下移动,以选择多行。
多数行动命令前面可以加数字,例如缩进3级就 3>
那么 Vkkk3> 就把当前行与前三行都增加了3级缩进,这里k可以被替代为任何行动类命令。

如果不使用 V 键,双 > 可以直接控制当前行。

It is loading more messages.
0 new messages