開発グループ / 植木 基博
このスライドは何?
・PyconJP 2017 にて発表させていただいたクイズ企画のスライドとなります。
・発表中に飛ばした問題は割愛しています。
また、スライドの意図等を、頭の方に持って来るなど、
今、お読みの方が少しでも楽しめるよう、工夫をさせていただきました。
・クイズの性質上、初心者向けの内容が多いですが、
中級者の方も「気付き」が得られるよう、解答内に豆知識がございます。
・ぜひ、お仲間で集まり、楽しみながらページをめくってください。
2
WHY?
なぜクイズをやったか
4
IEEE Spectrum で1位!
・Pythonは色んな所で活用されだしている
・特に最近では、抽象度の高いフレームワークが登場
・Web、データ分析、機械学習、システムプログラミング・・・
▶ 反面、プログラミングツール化してきているのではないか。
▶ もともとは、良い文法、良い文化、豊富な標準モジュール が評価されていた
▶ ツールとしてのPythonではなく、言語仕様や文化にも興味を持って欲しい
WHO?
自己紹介
■ 植木 基博
・
・自社サービス popinfoの責任者
■ popinfo
・O2O プラットフォーム (6,500万ユーザー)
・7年間開発し続けている
・Django, Flask, Celery …
・AWS (EC2, RDS, Lambda, Athena, Pipeline, ElastiCache/Search)
6
アイリッジのご紹介
7
インターネットを通じて、世の中に新しい価値を創造し続ける。
アイリッジのご紹介
8
・ユーザー数 6,500万の O2O サービス popinfo の企画、開発、運用
・金融業開初の電子通貨サービスの企画、開発、運用
・企業向けスマホアプリサービスの企画、開発、運用
アイリッジのご紹介
9
・主要な開発言語として、Pythonを採用
・製品、コードの品質を重視する文化
・AWS, GCP を積極的に取り入れたクラウドベースの開発
アイリッジのご紹介
10
・なによりも、「楽しく」
⇛
We are hiring
11
● Pythonが好きな方、楽しく仕事をしたい方
● Python + Lambda、Batch、DataPipeline、Glue
などサーバーレスな設計をしたい方
● 品質にこだわって、サービス開発をしたい方
● Pythonより
Go言語書きたい人
READY?
・最大4択形式の「勝ち抜き」 (間違えると次の問題の解答不可)
・事前配布した札を上げてください
・この文字が読みづらい人は、前に来てください
・制限時間は10秒程度です
・【お願い】間違えがあったら、あとでこっそり教えてください!
ルール
開
始
練
習
次のうち、標準ライブラリにないものはどれでしょうか。
A: httpサーバーのライブラリ
C: ftpサーバーのライブラリ
B: smtpサーバーのライブラリ
D: 全部ある
httpサーバー、smtpサーバーは、標準ライブラリで提供されています。
例えば、コマンドライン1行で、httpサーバーを立ち上げることができます。
$ python3 -m http.server
また、http, smtp, pop3, ftp など、よくあるプロトコルのライブラリは標準モジュールになっ
ています。
C: ftpサーバーのライブラリ
練
習
「無限」という数の扱いに関して正しい説明はどれでしょうか。
A: true は数値比較において、
無限と同じ意味である。
C: numpy などのサードパーティーモ
ジュールを利用する必要がある。
B: 「inf」 という無限を表す値がある
D: 取り扱うことはできない。
Pythonでは、言語標準で 無限を取り扱うことができます。
float型の値となります。
>>> float(‘inf’)
inf
>>> 9999 < float(‘inf’)
True
B: 「inf」 という無限を表す値がある
初
級
次のうち、if 文の書き方として正しいものはどっち?
A: if a == 1:
----
B: if ($a == 1) { ... }
----
python は波括弧の代わりに、インデントを使います。
ただし、複雑な if の条件式の場合、( )をよく使います。
よい if 文の書き方も PEP-8 に記載されています。
A: if a == 1:
次のうち、pythonの生みの親はどれでしょう。
A: 左
C: 右
B: 真ん中
D: ここにはいない
左から、セガール、セガール、セガール です。
D: ここにはいない
Python2系は、未だに色んな所で使われています。
2系の最初のバージョン( 2.0 )は、何年前にリリースされたでしょ
う。
A: 今年リリースされたばかり
----
B: 約 17年前
----
2.0は、2000年10月にリリースされています。
2010年 7月 3日 には、2.7.0がリリースされ、今でもメンテナンスされています。
Python は、言語の標準仕様がとても安定しています。
そのため、Python言語コアに詳しくなる事の価値がとても高いと思っています。
B: 約17年
python で関数を定義する時に使うものとして、正しくないものはど
れでしょうか。
A: def
C: class
B: lambda
----
python は “def” で関数を定義します。
lambda で、無名関数を定義することもできます。
ただし、lambdaに関しては、公式のコーディング規約にて、変数に
代入するような使い方はすべきでないと記載されています。
読みやすいプログラムを書きましょう。
C: class
現行で最新のstableなpythonのメジャーバージョンは?
A: 1系
C: 3系
B: 2系
D: 4系
最新は、3.6.2 で、2017-07-17 にリリースされました。
2.x は、2020年にサポート終了と言われています。
みなさん、早めに移行しましょう。
C: 3系
正しいロゴはどれでしょう。
A: 左
C: 中央右
B: 中央左
D: 右
C: 中央右
Pythonでは、こうあるべきという指標として、
「◯◯◯ of Python」という 20個の格言を定めています。
◯◯◯に当てはまるものはなんでしょうか。
A: Egg
C: Zen
B: Rule
D: Python
「Zen of Python」は、ソフトウェアはこう書くべき。という20個の格言です。
Pythonという名前が付いていますが、プログラムを書く上で、常に気を配るべき格言で
す。例えば、、
Special cases aren't special enough to break the rules.
特殊であることはルールを破る理由にならない。
弊社でも、コードレビュー等で、頼るべきバイブルとして、活用しています。
C: Zen
Pythonで整数型は、最大いくつまでの数を扱えるでしょうか。
A: 255
C: 約 20億
B: 65,535
D: もっとずっと多い
何の工夫もしなくても、メモリの限り、大きな数字を扱えます。
D: もっとずっと多い
pythonで予約語ではないものはどれでしょうか。
A: in
C: as
B: on
D: is
in は、シーケンス型に含まれるかどうかを検査する演算子。
as は、モジュールインポート時に別名を付けるためのワード。
is は、オブジェクトの同一性を判定する演算子です。
on は、予約語ではないです。
B: on
中
級
次のうち、Zen of Python に書かれていないものは、どれでしょう
か。
A: Beautiful is better than ugly.
C: If possible, make it shorter.
B: Explicit is better than implicit.
C: Readability counts.
Beautiful is better than ugly.
醜いより美しいほうが良い。
Explicit is better than implicit.
暗黙的ではなく、明示的にしたほうが良い。
Readability counts.
読みやすい事は、大切である。
C: If possible, make it shorter.
Pythonは、長くても気にしません。
長くても美しく書きましょう
長くても明示しましょう
短さより、読みやすさを選びましょう
Zen of Pythonは、コードレビューの
時に役立ちます
python で関数を定義する時に使うものとして、正しいものはどれ
でしょうか。
A: lambda
C: lamda
B: labmda
D: lamdba
python は “def” で関数を定義します。
lambda をつかって、無名関数を定義することもできます。
lambda は、sorted等の組み込み関数などで便利ですが、
よく使う演算は、operator モジュールにあります。
読みやすいプログラムを書きましょう。
A: lambda
次のうち、評価値が異なるものはどれでしょうか。
A: ( ) is ( )
C: “ “ is “ “
B: [ ] is [ ]
D: None is None
is は同一性の比較で、 == は等価性の比較です。
list型は、定義する度に別の物(アドレス空間)となります。
また、== は、 __eq__ でオーバーライドすることができますが、is はできません。
【PyconJP にて、ご指摘いただきました】
文字列は、特に長くなった場合、is の比較では「偽」の判定となります。
B: [ ] is [ ]
次の式を評価すると、どうなるでしょうか?
{1} + {2, 3} - {2}
A: (1, 3)
C: [1, 3]
B: {1, 3}
D: その他
pythonでは、 {1, 2, 3} など、波括弧を使うことで、「集合型」のリ
テラル表記が可能です。
しかし、「集合型」に対する加算、減算は定義されておらず、エラー
になります。
D: その他
Pythonでは、関数の説明に、docstring というコメントを書くことが
できます。
PEP-8 で、docstring の折り返しは、何文字以内にすべきと書か
れているでしょうか。
A: 64
C: 79
B: 72
D: 80
コメントやdocstringは 72文字。コードは、79文字までと書かれています。
また、チームで合意できる時は、コードは、最大99文字までなら良いとされていますが、
それでもコメントやdocstringは 72文字にすべきであると、念押しされています。
B: 72
次の式を評価すると、どうなるでしょうか?
float(" .320")
A: 0.32
C: 1.32
B: 320
D: SyntaxError
標準型の規則を知っておきましょう。
例えば、野球の打率データなど、外部CSVを読み込む時に、ドットから始まるケースで、
無駄なコードを書く必要が無くなります。
A: 0.32
Dict型のキーとして使えないのはどれでしょうか。
A: int
C: tuple
B: str
D: list
Pythonの公式チュートリアルに説明があります。
Dict型のキーには、「immutable (変更不能な型)」なオブジェクトを指定する必要がありま
す。
辞書は キー (key) でインデクス化されています。このキーは何らかの変更不能な型になります。文字列、数値
は常にキーにすることができます。タプルは、文字列、数値、その他のタプルのみを含む場合はキーにすること
ができます。直接、あるいは間接的に変更可能なオブジェクトを含むタプルはキーにできません。リストをキーと
して使うことはできません。これは、リストにスライスやインデクス指定の代入を行ったり、 append() や extend()
のようなメソッドを使うと、インプレースで変更することができるためです。
D: list
次の式を評価すると、どうなるでしょうか?
0.1 + 0.2 == 0.3
A: True
C: TypeError
B: False
D: SyntaxError
浮動小数点は、近似値のため、Falseになってしまいます。
Python3.5以降であれば、math.isclose()で 近似かどうかを判定できます。
math.isclose(0.1+0.2, 0.3) == True
B: False
変数 x の型が、整数であるかどうかを確かめる方法として、推奨さ
れる方法はどれでしょうか。
A: type(x) == int
C: isinstance(x, int)
B: type(x) == type(1)
D: issubclass(x, int)
type(x) は、変数x のクラスを返却します。
しかし、公式ドキュメントには、以下の記述があり、isinstance() を推奨しています。
オブジェクトの型の判定には、 isinstance() 組み込み関数を使うことが推奨さ
れます。これはサブクラスを考慮するからです。
C: isinstance(x, int)
上
級
次のうち、pythonの生みの親はどれでしょう。
A: 左
C: 右
B: 真ん中
D: ここにはいない
左から、Go, lisp, python です。
間違った人は、今日、選んでしまった言語をググろう!
C: 右
Ver 1.0 のリリースが、Pythonよりも古い言語はどれでしょうか。
A: PHP
C: Ruby
B: Java
D: ここにはない
Python: 1994年
PHP: 1995年
Java: 1996年
Ruby: 1995年
Pythonと同じ頃、多くの言語が生まれています。
Pythonよりも古い言語は、例えば Perl (1987) があります。
D: ここにはない
Pythonの標準モジュールで出来ることは?
A: 速く走る
C: 空を飛ぶ
B: 海を渡る
D: 何を言ってるかわからない
Pythonには、イースターエッグとして、「import antigravity」があります。
import すると、ブラウザが立ち上がり、xkcd のサイトにいきなり飛ばされ、Pythonで空を
飛ぶ漫画が表示されます。
海外のショートコミックサイトで有名なネタ。らしいです。
C: 空を飛ぶ
次の式を評価すると、何になるでしょうか。
True + False is True
A: True
C: TypeError
B: False
D: SyntaxError
ブール値は、int型のサブクラスで、True == 1 , False == 0 です。
そのため、以下に簡約されます。
(1 + 0) is True
1 is True
しかし、 1 とTrue は、等価ですが、同一ではありません。
is で比較しているため、Falseになります。
B: False
次のうち、Pythonの生みの親はどれでしょう。
A: 左
C: 右
B: 真ん中
D: ここにはいない
左から、PHP, Python, Go です。
間違った人は、髭をのばそう!
(女性の方は、髭の人とお付き合いしましょう)
A: 真ん中
楽しんでいただければ
幸いです。
ありがとうございました!

クイズ・Python勝ち抜きバトル pycon jp_2017