ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

Python3

state machineの話(あるいはPython3での実装)

Statechart このような記事を見つけました。 ステートマシン(state machine)実装のための本があることを初めて知りました。 ここで提案されている手法は、[* 状態変数を使うかわりに現在の状態を示す関数を使う]というものである。たとえば「あ」という状…

Python3でラズパイのIPアドレスを取得する

python上でifconfigコマンドを実行し、返ってきた結果にIPアドレスがあればそれを表示することを考えます。 "LANG=C ifconfig"とするとコマンド結果が全て英語で返ってきて、処理しやすくなります。 import subprocess subprocess.call(("LANG=C", "ifconfig…

Pythonのopen関数のencoding引数は必須でもいいんじゃない

たまにファイルの読み込み時(後?)にDecodeErrorする謎現象に遭いました。 どうやらファイルがShift-JISで書き込まれていたのをUTF-8で読み込もうとしていたのが原因。そういえばファイルをAtomで編集したときSJISで保存したかもしれない。うちのAtomは気…

python3.4.2のSSLContextのデフォルト引数はなんなのか

SSLContextのデフォルト引数 公式のリファレンスでは、3系ではpython3.5.3以降の情報しか掲載されていません。 ということで実際のソースを見ることにします。私の環境では以下のパスにありました。 /usr/lib/python3.4/ssl.py class SSLContext(_SSLContext…

utf-8とiso-2022-jpのencodeとdecodeのTips

半角英数字をUTF-8でencode >>> s = "aiueo012" >>> b = s.encode("utf-8") >>> b >>> b'aiueo012'これをdecodeする >>> b.decode("utf-8") 'aiueo012' >>> b.decode("iso-2022-jp") 'aiueo012'半角英数字をutf-8でエンコードしたものは、iso-2022-jpでデコ…

python3で文字列にlower()するとidが変わるという当たり前の話

文字列比較は is ではなくて == で比較しましょう、という話です。 >>> a = "hoge" >>> b = 'hoge' >>> a is b True >>> a.lower() 'hoge' >>> a.lower() is b False >>> a.lower() is a False …なぜ? どうやらlower()やupper()したらidが変わってしまう様…

python3でContent-Transfer-Encoding ヘッダを 変更するのに苦労した話

msg = MIMEText( main_text.encode("utf-8", "ignore"), 'plain', 'utf-8' ) 上のようなコードでメッセージを送信したとき、Content-Transfer-Encodingヘッダは7bitでした。 Content-Type: text/plain; charset="iso-2022-jp" MIME-Version: 1.0 Content-Tra…

python3では文字列中の部分文字列検索や辞書にキーが存在するかはin演算子を使おう

公式がそう言っているので、そうしましょう。 https://docs.python.jp/3/library/stdtypes.html 文字列中の部分文字列検索 注釈 find() メソッドは、 sub の位置を知りたいときにのみ使うべきです。 sub が部分文字列であるかどうかのみを調べるには、 in 演…

Pythonでclassの中にclassを作成する

class TemperatureHumidity: class Temperature: def __init__(self): self.value = None self.count = 0 def print(self): print("Temperature:", self.value, self.count) class Humidity: def __init__(self): self.value = None self.count = 0 def prin…

Pythonで親ディレクトリのファイルをインポート

実行スクリプトの親ディレクトリのファイルをインポートする - Pythonで遊ぶよ - pythonグループ長年これを探していました…!├hoge.py └tests/ └test_hoge.pytest_hoge.pyからhoge.pyをインポートします。test_hoge.py import os import sys sys.path.append…

anaconda4.3.0でfcntlのflock()が使えない

・Ubuntu14.04 LTS ・pyenvを使ってAnaconda4.3.0 (python3.6.0)をインストール で、fcntlモジュールのflock()等が使用できません。 " AttributeError: module 'fcntl'has no attribute "エラーが起きます。 $ python Python 3.6.0 |Anaconda 4.3.0 (32-bit)…