開発部のにゃんです。主にバックエンドを弄っております。 Webアプリケーションではセキュリティ対策のためにランダムな文字列を使用する場面が多々あります。例えば CSRF対策のトークン OAuthやOpenID Connectで使用するnonce, state, code_verifier メールの到達確認用URLのトークン パスワードをhashする際に使用するsalt セッションID これらの値は単に衝突しなければOKというものではありません。十分なセキュリティ強度を確保するためには推測不可能なランダム値を使う必要があります。 以下は推測不可能なランダム値ではありません。セキュリティが求められる場面では使ってはいけません。 Math.randomなどの疑似乱数 日付やユーザ情報のハッシュ ではどのような値が適切なのでしょうか? /dev/randomと/dev/urandom Linuxに
はじめに pythonの関数に与える引数として特定の値のみを許容したいときはないでしょうか? そのようなときに、動的に引数の値をチェックして範囲外のものを除外するアサーションや、Enumを用いてとりうる値を絞ることが考えられます。 ですが、前者は動的な値検査しか行えず、後者についてはAPIの引数の型をEnumに変更する必要があり、Enumが既存のAPIをオーバーロードしたときの引数の型として使えるとは限らないです。1 このような引数の値のチェックに使える手段として、python3.8から使えるようになっているLiteral typesがあります。 Literal types は型として宣言することで、関数の引数等に対して特定の型を要求するのと同時に、特定の値を持つことも要求できます。 例 次のようなコードの例を考えてみます。 target_fruit = ['apple', 'banana
# 数値「12」を文字列「0012」に書式化 num = 12 # f文字列:Python 3.6以降 s = f'{num:04}' # 0埋めで4文字 print(s) # 0012 # formatメソッド:Python 2.6以降(3を含む) # formatメソッドに渡した位置引数が{0}、{1}、……に渡される s = '{0:04}'.format(num) # 第0引数:0埋めで4文字 print(s) # 0012 # format関数:Python 2.6以降(3を含む) s = format(num, '04') # 0埋めで4文字 print(s) # 0012 # %演算子 s = '%04d' % num # 0埋めで4文字、10進整数 print(s) # 0012 以下ではこれらの方法について簡単に解説をする。 f文字列 Python 3.6
はじめに データアナリティクス事業本部のkobayashiです。 Pythonを使って開発を行っていると、AWSのリソースを扱う際にはboto3でしたりデータ解析を行う場合はPnadas,Scipyなど様々なパッケージを使っているかと思います。 今回、その利用しているパッケージの依存関係やパッケージを調べる機会があったのでその方法をまとめたいと思います。 環境 Python 3.7.4 pipdeptree 1.0.0 pip-licenses 2.2.1 パッケージ依存関係とライセンスを調べるツール 今回使用したツールは以下になります。どちらのツールもきちんと継続的にメンテナンスされており、pipでインストールできるのでこれらを使いました。 パッケージ依存関係をツリーで表示するツール pipdeptree · PyPI pipでインストールしたPythonパッケージを依存関係ツリー形式で
訂正 昔から deprecate されているのにずっと生き残ってるヤツたちはクセモノのぞろいで、全然初心者向けではありませんでした。 代わりに、Docディレクトリを deprecated-removed:: で grep して、 3.10 で削除する予定になっているものを削除する方がずっと楽なので、そちらに挑戦してみてください。削除する手順は下の記事のままで大丈夫です。 Python 3.9 がベータに入り、masterブランチはPython 3.10の開発に入りました。 はっきりとした区分はないものの、Python 2.7との互換性のために長くdeprecated状態を維持していたメソッドの削除に踏み切るバージョンになりそうです。そこでこんなIssueを作ってみました。 Issue 41165: [Python 3.10] Remove APIs deprecated since Pyt
これまで定数クラスを作ってやり過ごすことが多かったのですが、enumが比較的使いやすかったので、 enum enumはPython 3.4から標準ライブラリに追加されたモジュールで、列挙型をサポートするものです。 docs.python.org 実装 最初にenumをインポートしておきます。Python 3.7.4を使っています。 import enum BTreeなどの木構造のノードを考えてみます。各ノードは根ノード (ROOT) 、中間ノード (INTERNAL) 、葉ノード (LEAF) の3種類のいずれかに分類されるものとします。 それをTreeNodeTypeという列挙型で表現すると、以下のようになります。Enumクラスを継承することで実装します。 列挙子 (ROOTなどの識別子) はnameとvalueとプロパティを持ってます 列挙子同士は比較可能ですが、列挙子と同じEnumオ
Python実践入門 ── 言語の力を引き出し、開発効率を高める (WEB+DB PRESS plusシリーズ) 目次 目次 はじめに 通常のclassとdataclassの比較 dataclassの良いところ データを格納する箱であることを明確にできる。 クラス定義を短くかける 型情報を書くことでデータ構造が見やすくなる。 Printしたときに、そのままオブジェクトの中身を表示できる。 asdict関数でdictに変換できる。(Dictから簡単にJSONにも変換できる) Dict(JSON)からdataclassを作ることもできる Frozen引数を使うことで、簡単にイミュータブルにもできる。 データが作られたときに、自動後処理機能を追加することができる。 dataclassの残念なところ コレクションの初期化 参考資料 MyEnigma Supporters はじめに C++ユーザやJ
Python 3.3 から __init__.py を省略して良いと思っている人が多いですが、 省略しないでください。 なぜ勘違いが起こったのか Python 3.3 から、 PEP 420 で Implicit namespace package が追加されました。 Namespace package とは普通の package ではありません。 特殊な用途のもので、ほとんどの人にとっては 知る必要すらない ものです。 どうしても知りたければ、上の PEP 420 と packaging guide を読んでください。 __init__.py を省略する弊害 普通の package で Implicit namespace package を乱用すると弊害があります。 import が遅くなる 通常の package とは違うので import が package 内のモジュールを探すの
連載目次 前回まで、ファイルのオープン、ファイルの読み書きとクローズ、pickleモジュールとshelveモジュールによるオブジェクトのファイルへの保存、urllib.requestモジュールによるWebページの取得とBeautiful Soup 4によるそのスクレイピング、osモジュールとos.pathモジュールやpathlib.Pathクラスによるパス操作、shutilモジュールを使った高水準なファイル/ディレクトリ操作など、ファイル操作に関連する話題を取り扱ってきた。今回はファイル操作の最後の話題として、ファイル操作と例外処理、それをラップするwith文について見ていこう。 ファイルの内容を取得する関数と例外処理 ファイル操作に例外処理は付きものだ。というのは、例えば、ユーザーが指定したファイルを読み取りモードでオープンして、その内容を読み込む関数やプログラムを作ったとする。それを使
はじめに Pythonの環境構築は僕にとって、戦争でした。 如何せんツールが多すぎます。 インターネットで調べるとざっと挙げるだけで 元から入っているpython3 元から入っているpython3 + venv pyenv pyenv + pyenv-virtualenv pyenv + venv anaconda docker + python docker + anaconda ... 以上のような組み合わせが山程出てきます。 よく最近のゲームのキャラメイキングの 「組み合わせは無限大!」を思い出します。 この記事では、それぞれの環境構築の概念をイラスト画像でまとめようと思います。 環境構築のコマンド自体は取り扱わないためご注意下さい。 追記 2019/11/07 本記事はPython初心者による「概念のみ」に関する説明のため、ベストな環境構築や、すべて正確かつ詳細な内容は含んでないで
urllib.request.urlopen関数はより多くのパラメーターを持つが、これらについてはPythonのドキュメントを参照されたい。 urlopen関数の基本的な使い方 この関数を使用して、指定したURLをオープンすると、http.clientモジュールで定義されているHTTPResponseクラスのオブジェクトが返送される。このクラスには、readメソッド、readlineメソッド、readlinesメソッドなど、取得したHTTPレスポンスから、そのボディー(内容)を読み出すためのメソッドがある。これらを使うことで、取得したレスポンスページの内容を、ファイルを操作するのと同様な手法で読み込めるようになっている。 この他にも取得したリソースの実際のURLを返送するgeturlメソッド、ページに関する情報を取得するinfoメソッド、urllib.request.urlopen関数によ
shelveモジュール shelveモジュールは名前/値の組という形で、Pythonのオブジェクトをファイルなどに保存するために使える。内部では前回に紹介したpickleモジュールを使用しているので、実際に保存できるものはpickleモジュールと同等だ。 shelveモジュールにはopen関数があり、これを使うことで新しくShelfオブジェクトが作成される*1。 *1 実際には、shelveモジュールで定義されているDbfilenameShelfクラスのインスタンスが生成される。このDbfilenameShelfクラスはShelfクラスから派生していることから、ここではShelfオブジェクトと表現している。なお「shelf」は「棚」という意味で、「shelve」は「棚に何かを置く」「ものごとを棚上げ(延期)する」といった意味だ。つまり、「shelve」モジュールとは、「棚に何かを置いて、そ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く