SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
PEP8 を読んでみよう
Python東海 第24回勉強会
2014年5月24日
@2box2bo
自己紹介
• 名前:坪内 由孝

@2box2bo

• ブログ:http://www.zumwalt.info/blog
• お仕事:地方えすあいあーのインフラ屋
• 所属:(☝ ՞ਊ ՞)☝ウィーンなユーザー会

Python東海
• 最近のあれ:榛名は大丈夫です!

(´;ω;`)ブワッ

PEP
PEP とはなんぞ?
• 「Python Enhancement Proposal」の略

日本語訳すると「Python拡張提案」
• Python コミュニティに情報提供や新機能・

プロセス・環境等を説明するための設計書
• 技術的な仕様とその機能が必要な論理的な

理由を提供する
PEP8
PEP8 とはなんぞ?
• PEPの8番目 

タイトルは「Style Guide for Python Code」
• 内容はコーディングスタイルのガイド
• 日々、時代にあった物に変わっていく
• 自分が所属している組織のコーディングスタイルと
競合したら自組織のコーディングスタイルを優先
"A Foolish Consistency is
the Hobgoblin of Little
Minds"
愚かな一貫性は狭い心が化けた
ものである
• コードは書かれるよりもずっと多く読まれる
• スタイルガイドは一貫性のためにある
• 一番重要な事は、一貫性を諦める、スタイル
ガイドを適用しない タイミングを知る事
• PEP8 に従うために後方互換性を壊すことは絶
対にしない
Code lay-out
Indentation
インデント1
• 1 段階のインデントには 4 つのスペースを使う
• 継続行のインデントはその次のインデントと
区別できるようにする
def long_function_name(	
var_one, var_two, var_three,	
var_four):	
print(var_one)
インデント2
• カッコによる暗黙の行継続を使っている場合、
縦に えるか「吊り下げインデント」を使う
• 「吊り下げインデント」を使っている場合は
最初の行に引数を置かないこと。
foo = long_function_name(var_one, var_two,	
var_three, var_four)	
foo = long_function_name(	
var_one, var_two,	
var_three, var_four)
インデント3
• 複数行に渡るカッコの閉じカッコはその行の

最初の空白でない文字のインデントに える
• もしくは、その複数行の要素が開始した

インデントに える
my_list = [	
1, 2, 3,	
4, 5, 6,	
]	
result = some_function_that_takes_arguments(	
'a', 'b', 'c',	
'd', 'e', 'f',	
)
インデント4
# NG 1	
foo = long_function_name(var_one, var_two,	
var_three, var_four)	
!
# NG 2	
def long_function_name(	
var_one, var_two, var_three,	
var_four):	
print(var_one)
「吊り下げインデント」を使う場合は
最初の行に引数を書いてはいけない
次のインデントと区別できるようにする
Tabs or Spaces?
タブかスペースか?
• インデントにはスペースを推奨
• タブを使っていいのは既にタブでインデントさ
れているコードと一貫性を保つ場合のみ
• Python3 ではインデントにタブとスペース

両方使うことを許可しない
• Python2 用のコードで両方使われている場合は

スペースのみに変換する
Maximum Line Length
行の長さの最大値1
• 全ての行は79文字以内
• docstring やコメントは72文字
• チームで合意が取れれば99文字まで増やしても良い
‘’’	
最大72文字	
!
‘’’	
!
# 最大72文字	
!
def aaa():	
print “標準的には79文字、最大99文字”
行の長さの最大値2
• 行が長い場合はカッコでの暗黙的な行継続かバッ
クスラッシュを使って書く
• カッコでの行継続を優先して書く
• with、assertではバックスラッシュを使用する
with open('/path/to/some/file/you/want/to/read') as file_1, 	
open('/path/to/some/file/being/written', 'w') as file_2:	
file_2.write(file_1.read())
行の長さの最大値3
• 継続行を適切にインデントする
• 2項演算子で改行する場合は演算子の後ろで

改行するのが推奨
class Rectangle(Blob):	
!
def __init__(self, width, height,	
color='black', emphasis=None, highlight=0):	
if (width == 0 and height == 0 and	
color == 'red' and emphasis == 'strong' or	
highlight > 100):	
raise ValueError("sorry, you lose")	
if width == 0 and height == 0 and (color == 'red' or	
emphasis is None):	
raise ValueError("I don't think so -- values are %s, %s" %	
(width, height))	
Blob.__init__(self, width, height,	
color, emphasis, highlight)
Blank Lines
空行
• トップレベルの関数定義とクラス定義は空白行2つで
区切る
• クラス内のメソッド定義は空白行1つ
• 論理的なグループを分ける為に空白行を使うことも可能
class foo(object):	
# contents of foo	
!
!
class bar(object):	
# contents of bar
Source File Encoding
ソースファイルのエンコーディング
• Python配布物のコードは常に

Python3はutf8、Python2はASCIIであること
• 基本的には英語で書く
• 詳細はPEP3131 参照
import
インポート1
• import文は1行づつに分けること
• ただしクラス名等をまとめてimportは可能
import os	
import sys	
!
from sabprocess import Popen, PIPE
インポート2
• import文はコードの先頭に書く
• import文は次の順番でグループ化する

1. 標準ライブラリの import

2. サードパーティライブラリのimport

3. ローカルアプリ/ライブラリ独自のimport
• 各importのグループは空白行で区切る
Whitespace in
Expressions and Statements
Pet Peeves
いつもの文句のタネ1
• 以下のような余計なスペースを使わない

- カッコの内側



- カンマ、セミコロン、コロンの手前



- 丸カッコや角カッコの手前
# OK	
spam(ham[1], {eggs: 2})	
# NG	
spam( ham[ 1 ], { eggs: 2 } )
# OK	
if x == 4: print x, y; x, y = y, x	
# NG	
if x == 4 : print x , y ; x , y = y , x
# OK	
dict[‘key’] = spam(list[index])	
# NG	
dict [‘key’] = spam (list [index])
いつもの文句のタネ2
- 他の行と えるために2つ以上のスペース

# OK	
x = 1	
y = 2	
long_variable = 3	
!
#NG	
x = 1	
y = 2	

long_variable = 3
※ この記述方法には賛否両論あり
Other Recommendations
その他の推奨1
• 以下の2項演算子の左右には必ずスペース

代入 (=)・複合代入 (+=, -= etc.)

比較 (==, <, >, !=, <>, <=, >=, in, not in, is, is not)

論理 (and, or, not)
# OK	
a = i + 1	
b = x*2 - y*y	
c = (a+b) * (a-b)	
!
# NG	
a = i+1	
b = x * 2 - y * y	
c = (a + b) * (a - b)
その他の推奨2
• キーワード引数や引数のデフォルト値の場合

=には前後のスペースを入れない
# OK	
def complex(real, imag=0.0):	
return magic(r=real, i=imag)	
!
# NG	
def complex(real, imag = 0.0):	
return magic(r = real, i = imag)
その他の推奨3
• 複数の文を1つの行に書くことは非推奨
• 小さい文であれば許される場合もある
# OK	
if foo == 'blah':	
do_blah_thing()	
do_one()	
do_two()	
do_three()	
!
# Rather not	
if foo == 'blah': do_blah_thing()	
do_one(); do_two(); do_three()	
!
# NG	
do_one(); do_two(); do_three(long, argument,	
list, like, this)
Comments
コメント
• コードと矛盾しているコメントはコメントがない
よりも悪い。常に最新に保つ
• コメントが文の場合、最初の文字は大文字にする
• 英語を書く場合「The Elements of Style」に従う
• 120% 他言語圏の人がコードを読まないと確信が

無い限り英語でコメントを書く
Block Comments
ブロックコメント
• ブロックコメントは同じレベルのインデントの
コードに対するコメント
• ブロックコメントは#と1つのスペースで始まる
Inlines Commnets
インラインコメント
• インラインコメントはコードと同じ行に書かれる
コメント
• コードとインラインコメントの間は少なくとも

2つのスペースで区切り、インラインコメントは

#と1つのスペースで始まる
Documentation Strings
ドキュメント文字列
• 良いドキュメント文字列(docstring)の書き方は

PEP257に書かれている
• 全てのモジュール、クラス、関数、メソッドに書く
• 末尾につく”""は独立した行として書き、空白行を

末尾の前に入れるのは推奨される
• 1行のscstringは、末尾の"""を同じ行に書ける
まとめ
まとめ
• 読みやすいコードを書きましょう
• たまにはPEPを読んでみると面白い
• ただし、英語力がいる
• Python東海の発表で初めてPythonのコードを発
表した
参考URL
• http://www.tdoc.info/PEP-ja/
• https://dl.dropboxusercontent.com/u/555254/
pep-0008.ja.html
• http://www.lifewithpython.com/2013/01/pep-8-style-guide-
for-python-code.html
• http://legacy.python.org/dev/peps/pep-0008/
• http://sphinx-users.jp/articles/pep1.html
最後に
• 意訳、端折った文・内容が多々があります。
• PEP8にはバージョン管理と命名規則がありますが
端折りました。
• 間違ってたらごめんなさい。
• azusaテンプレートを使いました。

http://memo.sanographix.net/post/82160791768
おまけ

Contenu connexe

Tendances

Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 
データサイエンティストのつくり方
データサイエンティストのつくり方データサイエンティストのつくり方
データサイエンティストのつくり方Shohei Hido
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」Ken'ichi Matsui
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介Kenta IDA
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」直久 住川
 
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38horihorio
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
実践で学ぶネットワーク分析
実践で学ぶネットワーク分析実践で学ぶネットワーク分析
実践で学ぶネットワーク分析Mitsunori Sato
 
SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料ttt_miura
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術Shinnosuke Takamichi
 
Project Facilitation From Hiranabe
Project Facilitation From HiranabeProject Facilitation From Hiranabe
Project Facilitation From HiranabeYasui Tsutomu
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋智啓 出川
 
深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点Taiji Suzuki
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 

Tendances (20)

Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
データサイエンティストのつくり方
データサイエンティストのつくり方データサイエンティストのつくり方
データサイエンティストのつくり方
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
 
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
 
深層強化学習と実装例
深層強化学習と実装例深層強化学習と実装例
深層強化学習と実装例
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
実践で学ぶネットワーク分析
実践で学ぶネットワーク分析実践で学ぶネットワーク分析
実践で学ぶネットワーク分析
 
SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術
 
Project Facilitation From Hiranabe
Project Facilitation From HiranabeProject Facilitation From Hiranabe
Project Facilitation From Hiranabe
 
深層強化学習を用いた複合機の搬送制御
深層強化学習を用いた複合機の搬送制御深層強化学習を用いた複合機の搬送制御
深層強化学習を用いた複合機の搬送制御
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
 
深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 

Similaire à PEP8を読んでみよう

「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
Hello World Python featuring GAE
Hello World Python featuring GAEHello World Python featuring GAE
Hello World Python featuring GAEMaito Kuwahara
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
Perlで初めてWebアプリを作った話
Perlで初めてWebアプリを作った話Perlで初めてWebアプリを作った話
Perlで初めてWebアプリを作った話Yuzo Iwasaki
 
Boost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼうBoost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼうnvsofts
 
20170131 python3 6 PEP526
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526 masahitojp
 
ぁ単語のお仕事 基本編
ぁ単語のお仕事 基本編ぁ単語のお仕事 基本編
ぁ単語のお仕事 基本編kuhaku
 
PerlのTwitterモジュールの紹介 #twtr_hack
PerlのTwitterモジュールの紹介 #twtr_hackPerlのTwitterモジュールの紹介 #twtr_hack
PerlのTwitterモジュールの紹介 #twtr_hack鉄次 尾形
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementationsmasahitojp
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46civicpg
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) kunihikokaneko1
 
PHP Source Code Search with PHP
PHP Source Code Search with PHPPHP Source Code Search with PHP
PHP Source Code Search with PHPSotaro Karasawa
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版Katsuhiro Morishita
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyYuya Takeyama
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介Shoken Fujisaki
 

Similaire à PEP8を読んでみよう (20)

「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
Django_fukuoka
Django_fukuokaDjango_fukuoka
Django_fukuoka
 
Django_Fukuoka
Django_FukuokaDjango_Fukuoka
Django_Fukuoka
 
Hello World Python featuring GAE
Hello World Python featuring GAEHello World Python featuring GAE
Hello World Python featuring GAE
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Pythonのすすめ
PythonのすすめPythonのすすめ
Pythonのすすめ
 
Perlで初めてWebアプリを作った話
Perlで初めてWebアプリを作った話Perlで初めてWebアプリを作った話
Perlで初めてWebアプリを作った話
 
Boost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼうBoost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼう
 
20170131 python3 6 PEP526
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526
 
ぁ単語のお仕事 基本編
ぁ単語のお仕事 基本編ぁ単語のお仕事 基本編
ぁ単語のお仕事 基本編
 
PerlのTwitterモジュールの紹介 #twtr_hack
PerlのTwitterモジュールの紹介 #twtr_hackPerlのTwitterモジュールの紹介 #twtr_hack
PerlのTwitterモジュールの紹介 #twtr_hack
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
 
PHP Source Code Search with PHP
PHP Source Code Search with PHPPHP Source Code Search with PHP
PHP Source Code Search with PHP
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
 

Plus de 2bo 2bo

PyScriptの紹介
PyScriptの紹介PyScriptの紹介
PyScriptの紹介2bo 2bo
 
結婚式のエンドロールを「Pythonで」当日作った話
結婚式のエンドロールを「Pythonで」当日作った話結婚式のエンドロールを「Pythonで」当日作った話
結婚式のエンドロールを「Pythonで」当日作った話2bo 2bo
 
あひる焼きの歴史 ver0.1
あひる焼きの歴史 ver0.1あひる焼きの歴史 ver0.1
あひる焼きの歴史 ver0.12bo 2bo
 
Pyenvで幸せになろう.py
Pyenvで幸せになろう.pyPyenvで幸せになろう.py
Pyenvで幸せになろう.py2bo 2bo
 
Python東海の紹介.py
Python東海の紹介.pyPython東海の紹介.py
Python東海の紹介.py2bo 2bo
 
Pythonでzabbix apiを使ってみる
Pythonでzabbix apiを使ってみるPythonでzabbix apiを使ってみる
Pythonでzabbix apiを使ってみる2bo 2bo
 
自宅仮想マシンをConohaに移行してみた
自宅仮想マシンをConohaに移行してみた自宅仮想マシンをConohaに移行してみた
自宅仮想マシンをConohaに移行してみた2bo 2bo
 
Pillowの使い方
Pillowの使い方Pillowの使い方
Pillowの使い方2bo 2bo
 
Raspberry p ionzabbixproxy
Raspberry p ionzabbixproxyRaspberry p ionzabbixproxy
Raspberry p ionzabbixproxy2bo 2bo
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
Raspberry piの紹介
Raspberry piの紹介Raspberry piの紹介
Raspberry piの紹介2bo 2bo
 
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみようCent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう2bo 2bo
 

Plus de 2bo 2bo (12)

PyScriptの紹介
PyScriptの紹介PyScriptの紹介
PyScriptの紹介
 
結婚式のエンドロールを「Pythonで」当日作った話
結婚式のエンドロールを「Pythonで」当日作った話結婚式のエンドロールを「Pythonで」当日作った話
結婚式のエンドロールを「Pythonで」当日作った話
 
あひる焼きの歴史 ver0.1
あひる焼きの歴史 ver0.1あひる焼きの歴史 ver0.1
あひる焼きの歴史 ver0.1
 
Pyenvで幸せになろう.py
Pyenvで幸せになろう.pyPyenvで幸せになろう.py
Pyenvで幸せになろう.py
 
Python東海の紹介.py
Python東海の紹介.pyPython東海の紹介.py
Python東海の紹介.py
 
Pythonでzabbix apiを使ってみる
Pythonでzabbix apiを使ってみるPythonでzabbix apiを使ってみる
Pythonでzabbix apiを使ってみる
 
自宅仮想マシンをConohaに移行してみた
自宅仮想マシンをConohaに移行してみた自宅仮想マシンをConohaに移行してみた
自宅仮想マシンをConohaに移行してみた
 
Pillowの使い方
Pillowの使い方Pillowの使い方
Pillowの使い方
 
Raspberry p ionzabbixproxy
Raspberry p ionzabbixproxyRaspberry p ionzabbixproxy
Raspberry p ionzabbixproxy
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
Raspberry piの紹介
Raspberry piの紹介Raspberry piの紹介
Raspberry piの紹介
 
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみようCent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
 

PEP8を読んでみよう