1
0

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 1 year has passed since last update.

Pythonで間違えて変数名にビルトイン関数を使ってしまったのに動いてしまったことについて

Posted at

なんでそんなことしたの

某プログラミングスキルチェックサイトで問題を解いていたのですが、2桁の数字を0埋めで表示させたい場面がありました。
この問題はPythonで挑みました。恐らくPythonに慣れ親しんでいる方であれば、文字列型の.format関数を使うというのがパッと思い浮かぶのではないかと思われます。特にこの問題は2つ2桁の数字を並べるものだったので、後でそれが最適解だったことに気付きました。
ただ、私は普段JavaScriptやTypeScriptに慣れ親しんでいたので、そこで使いがちな手法を使うことにしました。

def to2digit(num):
  return ('0' + str(num))[-2::]
// ...

hoge = to2digit(hour)+to2digit(min)

…おわかりいただけたでしょうか。
もう既にタイトルでネタバレになっていますが。

これどうなるの

この動作を括弧の内側の方から追っていきます。
minは数字だと思って使ってしまったビルトイン関数ですが、str(min)はエラーにならず、文字列になるようでした。この値は<built-in function min>になるようでした。
これに対して頭に文字列0を付けた上で後ろの2文字を取ると、n>になります。
そういうことで、上記のhogeは、23n>とかそんな感じの値になります。
もう言ってしまうと、変数名から察せるように時刻を扱っていた訳ですが、そんな珍妙な値が完成してしまっていました。なんということでしょう。

終わりに

  • 予約語や定数的なものになってしまいそうな命名には気をつけたい
  • 便利な機能は覚えてどんどん使っていきたい

と思ったのでした。

1
0
2

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?