Help us understand the problem. What is going on with this article?

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

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ってめっちゃ並び綺麗っすね。

Raclett3
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした