何かの理由があってtype関数を用いているのかも、と考えることはもちろん無駄ではありませんが、正直気にしてもしょうがない話だと思います。
python
1s = input()
2t = str
3for method in [t.isalnum, t.isalpha, t.isdigit, t.islower, t.isupper]:
4 print(any(method(c) for c in s))
と書いたって一緒ですが、このstr
がどこからでてきたのかというと「input()
の返り値がstr型である」からです。
このコードを読む人に対して「input()
の返り値がstr型であるという知識がある」ことを要求します。
もしくは、「input()
の返り値はstr型なんだろうな/str型でなければならないんだろうなという推測」を要求します。
python
1s = input()
2t = type(s)
3for method in [t.isalnum, t.isalpha, t.isdigit, t.islower, t.isupper]:
4 print(any(method(c) for c in s))
だと、「input()
の返り値はなんであれ、isalnum
、isalpha
、isdigit
、islower
、isupper
のメソッドを持つことを要求しているんだなという推測」を要求します。
その程度の違いです。input
ぐらいメジャーなライブラリ関数に関する限り、たいして違いはありません。
(追記)
[s.isalnum, s.isalpha, s.isdigit, s.islower, s.isupper]:
呼び出し方が変わるからです。そう聞いたということはTypeError: isalnum() takes no arguments (1 given)
のエラーが出ることは確認してますよね? そのエラーメッセージの通りです。
と等価な呼び出しは
pyhton
1str.isalnum("abc")
です。これを理解しないといけません。str.isalnum
は一つの引数を取りますが、"abc".isalnum
は引数を取りません。
[s.isalnum, s.isalpha, s.isdigit, s.islower, s.isupper]:
にしたら、この各要素は引数を取らないのです。
python
1for method in [s.isalnum, s.isalpha, s.isdigit, s.islower, s.isupper]:
2 print(any(method() for c in s))
と変えるととりあえずエラーなく動きます。が、やりたいこととは違う処理になります。
データの型を得た意味は何でしょうかという質問が、なぜこう書いたら駄目なのか、という意味なら、処理が変わるから、でしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/10/09 07:46
2017/10/09 08:09 編集
2017/10/09 08:08
退会済みユーザー
2017/10/09 08:37