非同期ジェネレータ 現在のPythonでは、ジェネレータを使って、とてもお手軽にイテレータを作成できる。例えば、奇数列を生成するジェネレータは、次のように書ける。 def odds(): i = 1 while True: yield i i += 2 しかし、ジェネレータが存在しなかった頃のPythonでは、わざわざ__iter__メソッドなどの特殊メソッドを実装したクラスを定義し、 class Odds: def __init__(self): self._cur = 1 def __iter__(self): return self def next(self): ret = self._cur self._cur += 2 return ret などと書かなければならなかった。 Python3.5で導入された コルーチン は、イテレータと同様な概念として 非同期イテレータ をサポー
クラス定義のカスタマイズ これまで、Pythonのクラス定義をカスタマイズする手段として、メタクラスが使われてきた。しかし、メタクラスを利用したカスタマイズは、Pythonのオブジェクトモデルや型システムの知識が必要で実装が難しく、また複数のメタクラスを同時に使用するのが難しい、などの問題点があった。そこで、PEP 487 -- Simpler customisation of class creation では、メタクラスを使わずにクラスをカスタマイズする手段を提供している init_subclass() メソッド クラスのサブクラスが作成されたときに呼び出され、引数として、派生クラスと、クラス定義の引数が渡される。__init_subclass__()メソッドは、自動的にクラスメソッドとなる。 class Spam: def __init_subclass__(cls, **kwarg
ファイルシステムパス プロトコル pathlib はPython3.4で導入されたが、pathlibで表現されるファイルパスは、 open() やos.path.* などの、既存のファイル操作関連関数では使用できないため、あまり便利には使えていなかった。 Python3.6からは、pathlib.Path などのファイルパスをあらわすオブジェクトに特殊メソッド __fspath__() が実装された。ファイル名を引数として受け取る、open() などの関数は、__fspath__()を呼び出して、ファイルパスを取得するように変更された。 >>> import pathlib >>> spam = pathlib.Path('./spam') >>> spam.__fspath__() 'spam' >>> open(spam, 'w') <_io.TextIOWrapper name='s
f文字列 これまで、Pythonで文字列に変数を埋め込む方式にはいくつかあったが、ついに式を文字列中に直接記述できるようになった。 (PEP 498 -- Literal String Interpolation) 式を埋め込んだ文字列はf文字列(formatted string:フォーマット済み文字列)と呼ばれ、raw文字列の r と同じように、先頭に f を指定する f文字列は通常の文字列と同じようも使えるが、文字列内の {} で囲まれた部分は、Pythonの式として評価し、その結果を文字列として出力する。 >>> f'hello' # 式を含まないf文字列 'hello' >>> f'100+1={100+1}' # 式を評価 '100+1=101' >>> order={'spam':100, 'ham':200} >>> f'spam: {order["spam"]}, ham:
変数アノテーション PEP 484 -- Type Hintsで導入された型ヒントが、モジュールのグローバル変数や、クラスのインスタンス変数などにも指定できるようになった。PEP 526 -- Syntax for Variable Annotations 変数の型アノテーションは、mypy などではコメントとして指定するようになっていたが、Python3.6以降では、正式なPythonの構文で指定できるようになった。 >>> SPAM:str = 'global spam string' # SPAM は str型グローバル変数 >>> class Ham: ... EGG: int = 100 # EGGはint型クラス変数 この例では、代入文で変数を作成するのと同時に型を宣言しているが、変数の値を指定せずに、変数の型だけでも宣言できる。この場合は代入文では使用せずに、 >>> SPA
Compile-time type checking Static typing makes it easier to find bugs with less debugging. Easier maintenance Type declarations act as machine-checked documentation. Static typing makes your code easier to understand and easier to modify without introducing bugs. Grow your programs from dynamic to static typing You can develop programs with dynamic typing and add static typing after your code has
Herokuで30秒以上かかるプログラム(メール送信、Push通知の送信 etc…)を実行させる場合はプログラムをバックグラウンドで実行させる必要があるのですが、APSchedulerというライブラリを使うと簡単に実装ができたので自分のためにメモしておきます。 Install まずは、APSchedulerをインストールします。 $ pip install apscheduler $ pip freeze > requirements.txt Coding 次にclock.pyを作成します。 例として平日はdo_workメソッドを呼び出して、休日はdo_restメソッドを日本時間の9時30分に定期的に実行するプログラムを書いてみます。 clock.py from apscheduler.schedulers.blocking import BlockingScheduler import
Pythonのイテレータ(iterator)とジェネレータ(generator)についてまとめてみます。 (追記2018.12.25: Python3の文法に全面的に置き換えました) イテレータ: 要素を反復して取り出すことのできるインタフェース ジェネレータ: イテレータの一種であり、1要素を取り出そうとする度に処理を行い、要素をジェネレートするタイプのもの。Pythonではyield文を使った実装を指すことが多いと思われる Python組み込みのコレクション(list, tuple, set, dictなど)はどれもイテレーション可能ですが、組み込みのコレクションを使った繰り返し処理ではあらかじめコレクションに値を入れておく必要があるため、以下のようなケースではイテレータやジェネレータを自分で実装したいというケースがあると思います。 無限に繰り返すイテレーション 要素すべてをあらかじめ
Free software, open standards, and web services for interactive computing across all programming languages JupyterLab: A Next-Generation Notebook Interface JupyterLab is the latest web-based interactive development environment for notebooks, code, and data. Its flexible interface allows users to configure and arrange workflows in data science, scientific computing, computational journalism, and ma
# !/usr/bin/env python # -*- coding: utf-8 -*- import time import os from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer BASEDIR = os.path.abspath(os.path.dirname(__file__)) def getext(filename): return os.path.splitext(filename)[-1].lower() class ChangeHandler(FileSystemEventHandler): def on_created(self, event): if event.is_directory: return if getext(event
Pythonのモジュールの基本を押さえる:特集:Visual Studioで始めるPythonプログラミング(1/3 ページ) 本稿ではモジュールの作成、インポート、グローバル変数__name__、コマンドラインからのモジュールの実行など、Pythonのモジュールの基礎を取り上げる。 連載目次 前回はPythonのクラスについて解説した。例外処理など、まだ説明していない要素も多いが、基本的な構文要素や関数、クラスなどについては前回までにおおよその紹介が終わったので、今回はこれらをコードの再利用を促すためのキーパーツである「モジュール」について見ていこう。 モジュールとは Pythonにおける「モジュール」とは「独立したファイルに収められたPythonスクリプト」のことだ。そういうわけで、前回まではPython Tools for Visual Studio(以下、PTVS)が提供する[In
view-source:https://munchery.com/menus/sf/#/0/dinnerNotice that the data is wrapped by a <script> tag? That data is in JSON format and is rendered to HTML upon loading. We have the option to parse the JSON data, but let’s say we want to extract based on what we see or generated. Let’s write the steps on how we’d do that: Go to www.munchery.com. (be sure to check their robots.txt and terms before p
概要 自分の復習用のメモですが、誰かの役に立つかも・・・と思い、投稿しました。 読者はPythonプログラミング初学者を想定しております。 Pythonの環境構築は、古い情報も多く、ネットで調べると色々な情報が混在しているため、 初学者にとっては最初に躓く壁です。 Python環境構築あるある Pythonの2系と3系の違いがわからない。どちらをいれるべき? 環境構築に関してググると、"virtualenv"・"pyenv"・"easyinstall"・"setuptools"など、色々検索に引っかかるがどれを使えばいい?時代遅れはどれ? 結局、初学者でも簡単に導入でき、Pythonのバージョンアップにも楽に対応できる拡張性・汎用性のある方法は? Python環境構築するにあたり 他の記事を見て、混乱しないよう簡潔にオススメの環境構築の結論を述べます。 今後のことを考え、Python3の開
2018/5/8 北米で公開されたCGアニメーション劇場用映画: 全作品リスト(1995-2017)より [メジャースタジオと独立系] 前回ご紹介したデータから、製作・配給体制別のシェアを算出してみました。一般的にメジャースタジオと呼ばれるのは、ウォルト・ディズニー・スタジオ、タイム・ワーナー(ワーナー・ブラザーズ)、コムキャスト(ユニバーサル・スタジオ... 2018/5/7 北米で公開されたCGアニメーション劇場用映画: 全作品リスト(1995-2017) CG部 海外事業開発担当の鈴木です。今回は趣向を変えて、CGの市場について当社が行っている調査をご紹介します。過去23年間(1995~2017年)に北米(アメリカ合衆国およびカナダ)で劇場公開された、CGアニメーション映...
Budou is in maintenance mode. The development team is focusing on developing its successor, BudouX English text has many clues, like spacing and hyphenation, that enable beautiful and legible line breaks. Some CJK languages lack these clues, and so are notoriously more difficult to process. Without a more careful approach, breaks can occur randomly and usually in the middle of a word. This is a lo
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く