103
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

文字列と数値と真理値のリテラルに親を殺されたPythonプログラミング

Last updated at Posted at 2020-02-16

image.png

Python3(以下Python)は平易で読みやすい文法を特徴とします。(本当にそうなのかは議論の余地があると思いますが、少なくとも上記ツイートのソースよりは読みやすいと思われます。)

しかしながら、Pythonには重大な欠点があります。さまざまな値を表現するのにリテラルを使用するため、もしあなたが文字列と数値と真理値のリテラルアレルギーになってしまったときにPythonが使用できなくなってしまうのです。

しかしご安心ください。以下のテクニックを駆使することで、それらのリテラルが使用できなくなっても値を表現することが出来ます。

真理値

TrueFalseを表現する方法は比較的簡単です。

not()  # True
not[()]  # False

not演算子はFalsyな値をTrueに、Truthyな値をFalseにします。何がFalsyであるかは公式ドキュメントにあります。

空タプルはFalsyであるため、notで否定することでTrueを得られます。対して、空タプルのリストはTruthyであるため、否定することでFalseを得られます。

小さな数値

比較的小さな数値は、str(), int()と各種組み込みクラスで作った文字列やタプル等の長さをlen()で取得することで作ることが出来ます。

int()  # 0
len([()])  # 1
len(((),())) # 2
len(hex(not()))  # 3
len(str(not()))  # 4
len(str(not[()]))  # 5
len(str(complex(not(),int()))) # 6
len(str(bytes(len(((),)))))  # 7
len(str(((),())))  # 8
len(str(([int()],[])))  # 9

int()こちらstr()こちらで詳しい仕様を知ることが出来ます。

さらに、これらを文字列として結合したあとint()で数値に変換したり、算術したりすることであらゆる数値を作成できます。

文字

数値があれば、文字列リテラルがなくともすでにある文字列から添字で値を借りることが出来ます。スライスで目当ての文字列をそのまま引っ張ってくることも出来ます。

str(not[()])[not()]  # a
str(bool)[len(str(((),())))]  # b
str(complex)[len(str(((),())))]  # c
...

全ての文字について書くと長くなりすぎるのでやめておきます。君だけの文字の生成法を見つけてくれよな!

番外編: ifアレルギーを発症してしまったときに

人によってはifアレルギーを発症してしまうことがあるかもしれません。そんなときには、以下の回避法があります。

andとorによる回避法

andorは、短絡評価という、結果が確定したらそれ以上評価を行わない(左辺が、andならFalseorならTrueであれば右辺を評価しない)という特徴があります。(公式ドキュメント)

これを利用することで、

condition and truthy or falsy  # or以降は省略可能

#  condition = 条件, truthy = Trueの場合, falsy = Falseの場合

と記述することが出来ます。

whileによる回避法

上記の方法ではtryやwhileといった構文を含めることが出来ません。そこで、whileを使った回避法もご紹介します。

while condition:
    ...
    break

まとめ

これらのテクニックを用いることで、文字列と数値と真理値のリテラルを使用せずにPythonのコードを書くことが出来ます。最初のツイートもおおよそこれらのテクニックで記述されているため、だいたい何を書いているかもわかるようになったことかと思います。

もしあなたがそれらのアレルギーであれば、この記事が助けになれば幸いです。あなたがそれらのアレルギーを発症した日には、またこの記事を見て、対策への第一歩となれば嬉しいです。

追記(2020/02/20)

こちらの記事@ikanamazuさんに解説して頂きました。本当にありがとうございます!

ところで2020/02/20ってめっちゃ並び綺麗っすね。

103
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
103
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?