2015/11/11

[勉][py]やむを得ず覚えるpython (1)

やむを得ないが、pythonを覚えよう。
1日1時間程度を目安にする。

pythonが嫌いなわけではなく、スクリプト言語全般を苦手としているのだが、読めるだけじゃなくて書けないと不便になりつつあるので、C/C++ならわかる人がその違いで覚えるイメージで書いていく。
書きつつ覚えるので、間違ってたらすまん。

過去にpythonを書いたのは、これがあった。
hiro99ma blog: [py]ハードタブは1~8スペース扱い


環境

うちはcygwinでやる。つまり、Windowsだ。

$ python --version
Python 2.7.10
$ which python
/usr/bin/python

 

Hello World

PY習 やっぱり最初は"Hello World"
条件とか特にないから、こんなんで動くか?

01.py
#!/usr/bin/python
def main():
        print("Hello, World!")

$ ./01.py
$

だめやった。

#!/usr/bin/python
def main():
        print("Hello, World!")
main()

$ ./01.py
Hello, World!

出た。
つまり、こういうことか。

#!/usr/bin/python
def hiro99ma():
        print("Hello, World!")
hiro99ma()

$ ./01.py
Hello, World!

出た。
固定のエントリポイントは存在せず、地の文?に書いたものがそのまま実行されるということか。

 

#!/usr/bin/python
hiro99ma()
def hiro99ma():
        print("Hello, World!")

$ ./01.py
Traceback (most recent call last):
  File "./01.py", line 2, in <module>
    hiro99ma()
NameError: name 'hiro99ma' is not defined

前方参照だ。

 

#!/usr/bin/python
def hiro88ma():
        print("Goten Morgen!")
hiro88ma()
def hiro99ma():
        print("Hello, World!")
hiro99ma()

$ ./01.py
Goten Morgen!
Hello, World!

地の文と関数が混ざっていても、平文が上から順番に実行されている。


地の文

なんと呼ぶのかわからないけど、関数じゃないところに書いた実装を地の文を呼んでおこう。

#!/usr/bin/python
print("Hello, World!")

$ ./01.py
Hello, World!

 

#!/usr/bin/python
        print("Hello, World!")

$ ./01.py
  File "./01.py", line 2
    print("Hello, World!")
    ^
IndentationError: unexpected indent

インデントには厳しい。


エントリポイント?

#!/usr/bin/python
if __name__ == "__main__":
        print("Hello, World!")

$ ./01.py
Hello, World!

よくこういう書き方をしているが、これは関数?
でもdefがついていないから、ちょっと違うと思う。

ああ、単なるif文だ。
「__name__が"__main__"だったら」ということだ。

if __name__ == '__main__': について - へたれプログラマな日々
他と一緒に使うときにはエントリポイントじゃないけど、単独で呼び出されたときはエントリポイントになる、という動きみたいだ。

C言語っぽいイメージでいえば、#ifdefでmain()が囲まれていて、定義されてコンパイルしたときだけmain()が有効になる、みたいなところか。
単独でも動いて、他のがあっても動くと私の場合迷ってしまいそうだから、なるべく書かないようにしておこう。
ただ、エラーくらいは出したいのだが、こんな感じか?

#!/usr/bin/python
import sys
if __name__ == "__main__":
        sys.stderr.write("not main!\n")
        exit(-1)

$ ./01.py
not main!
$ echo $?
255

まあ、よかろう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。