旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【WPF】 透明なウインドウの作り方

XAMLのWindowタグに下記3つを加えるだけです。作ってみると完全に透明なウインドウが作成され、ウインドウ右上部の×ボタンも消えてしまいました。そのため、例えばEscボタンを押したらWindowをCloseするような処理が必要でした。

  • WindowStyle=“None”
  • AllowsTransparency=“True”
  • Background=“Transparent”


参考にしたサイトは以下です。

www.atmarkit.co.jp

【Python】 動的なデフォルト引数を指定するときにはNoneとドキュメンテーション文字列を使う

書籍”Effective Python”項目15のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

Pythonはデフォルト引数をモジュールロード時の一回しか評価しないので、動的な値をデフォルト引数にはしないように、という話でした。

from datetime import datetime
import time

# 動的な型をデフォルト引数にしてみる
def bad_example(when=datetime.now()):
    print(when)

# 時刻が表示される
bad_example()
# 一秒待つ
time.sleep(1)
# 上と同じ時刻が表示される
bad_example()

書籍ではこのような時はデフォルト引数にNoneを指定してドキュメンテーション文字列で振る舞いを書いておくことを勧めています。

def good_example(when=None):
    """
    when: datetime of when the function is called.
          Defaults to the present time.
    """

    when = datetime.now() if when is None else when
    print(when)

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 クロージャ内外で変数を共有する

書籍”Effective Python”項目15のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

Pythonにはnonlocalというキーワードがあり、これによりクロージャ内外でデータを共有できるようです。

def outer_func1():
    found = False
    def inner_func():
        # outer_func1のfoundとは別の変数
        found = True
    inner_func()
    print(found)
# Falseと表示される
outer_func1()

def outer_func2():
    found = False
    def inner_func():
        # 変数foundを外と共有
        nonlocal found
        found = True
    inner_func()
    print(found)
# Trueと表示される
outer_func2()

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 サーバーの現在時刻を取得する

Raspberry PiからサーバーのMySQLデータベースにセンサデータを書き込む時に、センサデータ取得時刻も書き込んでいるのですが、Raspberry Pi側の現在時刻がやたらずれるため、サーバーの現在時刻を取得して補正しておくことにしました。サーバーの現在時刻を取得する方法は下記になります。

from datetime import datetime
import MySQLdb

# DBと接続
connection = MySQLdb.connect(ip_address, user, password, db_name)
cursor = connection.cursor()
# サーバーの現在時刻を取得
cursor.execute('SELECT NOW()')
date_time_on_server = cursor.fetchone()[0]

【Python】 enumerateのカウンタ初期値を設定する

書籍”Effective Python”項目10のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

enumerateは知っていたのですが、カウンタの初期値を第二引数で設定できることを知りませんでした。

numbers = [1, 2, 3]
# iは1から始まる
for i, number in enumerate(numbers, 1):
    print('%d: %d' % (i, number))

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 ジェネレータ式の生成

書籍”Effective Python”項目9のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

リスト内包表記は入力が大量な時に膨大な量のメモリを消費しかねない問題があるとのことで、代替としてジェネレータ式が紹介されていました(存在自体知りませんでした)。ジェネレータ式は周囲を[]ではなく()で括ることで生成できます。

# ジェネレータ式
iterator = (x for x in something)
next(iterator) # 評価
next(iterator) # 評価

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目