Top / Python / TIPS集

添え字付きの for 文の文法

returnList = []
codes = createCityCodes()  ← 配列がふたつあったばあい、
names = createCityNames()  ← こちらはnames[i]とかでアクセスしたい。。

for i,code in enumerate(codes):
  returnObj = {
    'cityCode': code,
    'cityName': names[i]
  }
  returnList.append(returnObj)

みたいな感じに扱える。もしくは、

import itertools
.....
for code,name in itertools.zip_longest(codes,names):
  returnObj = {
    'cityCode': code,
    'cityName': names
  }
  returnList.append(returnObj)

こんな感じで、複数の配列をおなじfor文で回すことも可能*1。。。

改行をそのまま文字列であつかいたい

「"""」や「'''」で始めて終わることで、その間の文字列はそのまま扱われるようになります。

	text1 ="""1行目
	2行目
	3行目"""

	text2 ="""1行目
2行目
3行目"""

	print ("----")
	print (text1)
	print ("----")
	print (text2)
	print ("----")

結果は

----
1行目
	2行目
	3行目
----
1行目
2行目
3行目
----

このとおり。文字列内の改行はそのまま改行と解釈され、さらにインデントもそのままタブとして反映されるということですね。ちなみに、複数行コメントを書く際にこれを使って書いているコードもありました。

'''
/*
 * Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   .....
*/
'''

こんな感じで。なるほどね。。

finallyがよばれない??

Linux上で、sudo kill した場合、try/finallyのfinallyがよばれないっぽい。フォアグラウンドで実行してctrl+cした場合は問題ないのですが。。

import sys,signalしといて

def cleanup(*args):
    sys.exit(0)
signal.signal(signal.SIGINT, cleanup)
signal.signal(signal.SIGTERM, cleanup)

とか書いておくと、よばれるようになりますが、コレでいいのかな。。。

他ファイルのメソッド呼び出し

myutils.py に定義された

def cleanup(xx):

などのメソッドを呼び出すには、呼び出し側で

from myutils import cleanup,sysout

と宣言しておけば、

cleanup("hoge")

などと直接呼び出せる。

public static void main ぽく書きたい

PythonにはJavaでいう

public static void main(String[] args){
  ...
}

みたいな概念がなく、

sudo python3 xxx.py

と呼び出すと、先頭から順次実行されるっぽい。

いわゆるmainメソッドを作るやり方は以下の通りです。

import sys

def main(args):
	メイン処理


if __name__ == "__main__":
	main(sys.argv)

「 __name__ 」 には、スクリプトとして直接呼び出されたときのみ*2、"__main__" と入っているらしいので、それを判定して main メソッドを呼び出すとすれば public static void main の完成です。ついでにコマンドライン引数を上記のように渡せば、引数も同様にJavaぽくあつかうことができます。あ、引数は0番目はプログラム名なので、1番目からが実際の引数です。

参考

MacでPython3

Yosemiteを使ってるとバージョンが2.7系で、、3.x系を使いたい場合。

などを参考に、Python環境を管理するツールを入れます

$ brew install pyenv
$ echo 'export PYENV_ROOT=$HOME/.pyenv' >> ~/.bash_profile
$ echo 'export PATH=$PYENV_ROOT/bin:$PATH' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

$ pyenv install 3.5.1
なんかエラーが出たら、たいがい
$ xcode-select --install
これ。

$ pyenv shell 3.5.1
$ python --version
Python 3.5.1
$

pyenvが必要かどうかフローチャート - Qiita この辺見ると、いるかどうかよく考えて、、、という流派もあるようです。。わたくしは切替方法わかんなかったのでやりましたが、自己責任で。

JSON文字列のDump

r = requests.get('https://xxx/yyy.json')
result = json.dumps(r.json(),ensure_ascii=False, indent=4, sort_keys=True, separators=(',', ': '))
print(result)

requests は pip(かpip3)などでインストールされてる前提で。。


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Python / TIPS集

現在のアクセス:4684


*1 python2.7はメソッドがizip_longestだったりなんか違う感じかな??
*2 よするに sudo python3 xxx.py てこと

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS