Regen Techlog

Web・プログラミングの技術メモ

Python小ネタ

   

Pythonの意外と知られていない小ネタを紹介します。

比較演算子の連続使用

比較演算子はx < y < zのように続けて使用することができます。

>>> x = 5
>>> 1 < x < 10
True
>>> 5 < x < 10
False
>>> 1 < x < 5
False
>>> 1 < x <= 5
True

複素数

Pythonは複素数をサポートしています。虚数単位はjもしくはJを使います。

>>> (1+1j) * (1-1j)
(2+0j)

mathモジュールに複素数を渡したり解が複素数になるような演算はエラーが出ますが、複素領域での処理をするにはcmathモジュールを使います。

>>> import math
>>> math.sqrt(-1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> import cmath
>>> cmath.sqrt(-1)
1j

べき乗演算子で平方根

べき乗演算子でmath.sqrtを使わず平方根を取得できます。

>>> 2 ** 0.5
1.4142135623730951

0の0乗

0^0は数学的には不定ですが便宜上特定の値を割り当てることがあり、Pythonは1を返します。

>>> 0 ** 0
1

文字列の繰り返し

文字列に対して乗算演算子を使うと、指定回数繰り返した文字列を生成します。

>>> 'abc' * 5
'abcabcabcabcabc'

文字列のカウント

count関数を使って文字列中に指定文字列が何回出現するか取得できます。

>>> 'abcabc'.count('ab')
2
>>> 'abcabc'.count('ca')
1

様々なエンコード・デコード

文字列をエンコード・デコードする際に、UTF-8やSift_JISなどの文字コード以外の様々なコーデックが用意されています。デフォルトで使えるコーデックは標準エンコーディング、コーデックの追加などはcodecsモジュールで行えます。

>>> 'abc'.encode('base64')  # Base64エンコード
'YWJj\n'
>>> _.decode('base64')  # Base64デコード
'abc'
>>> 'abc'.encode('zlib')  # gzip圧縮
"x\x9cKLJ\x06\x00\x02M\x01'"
>>> 'abc'.encode('bz2')  # bz2圧縮
'BZh91AY&SYd\x8c\xbbs\x00\x00\x00\x01\x008\x00 \x00!\x98\x19\x84aw$S\x85\t\x06H\xcb\xb70'
>>> 'abc'.encode('rot13')  # シーザー暗号
'nop'
>>> 'abc'.encode('hex')  # 16進数表現
'616263'

組み合わせれば、Base64+gzipでエンコードされたデータも1行でデコードできます。

>>> 'eJxLVChLLapUyMnPS1dIzkgsSkwuSS1SKC4pysxLBwCVPgqc'.decode('base64').decode('zlib')
'a very long character string'

 - プログラミング

コメントを残す

  関連記事

Pythonで簡単にWindowsサービスを作る

Pythonで書いた処理をバックグラウンドで動かしておきたいときに、Window …

Suspend on LAN

ネットワークに接続されたPCを遠隔で起動する技術にWake on LAN(WoL …

VC++9.0でOpenMP使用時の注意点

OpenMPを使ったCライブラリをPythonで使うためにPython本体のバー …

SourceTreeのGit-Flowで必ずno-ffする

GUIでGit操作ができるクライアントの一つSourceTreeですが、Git- …

browsercookiejar: ブラウザのCookieをPythonから利用する

ウェブスクレイピングの記事を書きましたが、ログインが必要なページから情報を取得す …

子テーマでサイドバーを最後に追加する

WordPressでテーマをカスタマイズする場合は子テーマを使うのが一般的ですが …

lxmlでスクレイピングするときのコツ

PythonでスクレイピングをしようとするとBeautifulSoup4やlxm …

WindowsでPython Netifacesをインストールする

Pythonでマジックパケットを監視してみようと思ってプログラムを書いていたので …

THETA画像のEXIF読み取りと傾き補正

最近一部で話題のTHETA(ワンショット全球パノラマカメラ)ですが,THETAを …

「Unable to find vcvarsall.bat」の対処法

C/C++などのビルドが必要なファイルを含むPythonパッケージをWindow …