てきとうなメモ

本の感想とか技術メモとか

pythonのインデント

pythonはインデントでブロックを表現できるところが格好いいと思っていたんだけども,逆にいえばブロックを閉じるところを明示的に表現していないので,インデントが一意に決まらないのだなと.他の言語と同様にindent-regionとかやって変なインデントをされてしまった.

ぐぐってたら2chのスレをみつけた

41 :デフォルトの名無しさん[sage]:2007/07/19(木) 20:55:08
Pythonは編集中にインデントレベルを変えると、周辺のレベルが思い出せなくて困ることがある。
C言語ライクな言語だとEmacsで M-x indent-region 一発で済むだけにPythonは書きづらい言語だ。(ただし読む分にはおk

42 :デフォルトの名無しさん[sage]:2007/07/19(木) 22:15:05
矩形選択して一気にインデントレベルを変更するんじゃダメなの?

54 :デフォルトの名無しさん[sage]:2007/07/20(金) 22:34:53
Pythonだと制御構造を変えるとそれに合わせてインデントも修正しなくちゃならん。
問題はその時にどこからどこまでどの程度インデントをずらすのか、修正してる途中で忘れちまうことがあるんだな。

C言語系だとブレースをいじるだけで済む。インデントはエディタが自動で揃えてくれるが、それは必須でもない。

57 :デフォルトの名無しさん[sage]:2007/07/20(金) 23:13:11
>>54
Python 付属の IDLE なら C-] と C-[
Emacspython-mode なら C-c > と C-c <
でブロック全体をインデント/デインデントできるんだが、
そういうエディタの支援を利用しないと云々という話?

74 :デフォルトの名無しさん[sage]:2007/07/23(月) 14:14:53
>>71
例えば Emacs の場合、「コマンド一発」って具体的にどうすんの?

78 :デフォルトの名無しさん[sage]:2007/09/13(木) 00:17:09
>>74
ブロックの終端に必ずreturnかpassを付けてから整形する

80 :デフォルトの名無しさん[sage]:2007/09/13(木) 00:45:46
>>78
それは・・・・・・

81 :デフォルトの名無しさん[sage]:2007/09/13(木) 01:03:47
それじゃあ、rubyのendのほうがマシw

85 :デフォルトの名無しさん:2007/10/26(金) 09:46:27
関数の最後にはreturn を書くクセをつければ

def A():
 ....
 return

の行頭空白がなくなったとしてもどうにか復元できるけど
たとえば

for i in range(10):
 if data[i]==3:
  break
else:
 print "NOT FOUND"

で空白がなくなったらもう復元できないよね
それが怖い
for の最後には必ず continue をつけるとか。

92 :デフォルトの名無しさん:2007/11/12(月) 20:20:17
>>85
for i in range(10):
if data[i]==3:
break
# end if
else:
print "NOT FOUND"
# end for

なんかださいけど

97 :デフォルトの名無しさん:2007/11/17(土) 00:24:01
>>85
>>78

for i in range(10):
 if data[i]==3:
  break
pass
else:
 print "NOT FOUND"
pass

http://pc11.2ch.net/test/read.cgi/tech/1169473442/

自分の場合は1ブロック分インデントする話だったので,矩形選択かC-c >でやればいい話だった.全くインデントしない状態から一気にインデントしたい場合は92と97の話になると思うんだけども,どちらともださい(w そもそも全くインデントしない状態にしておくなという話であるけども