読者です 読者をやめる 読者になる 読者になる

「パラメータをソートし,URIエンコードした key=value の形にして & で繋げます」 の書き方


http://d.hatena.ne.jp/Yoshiori/20100929/1285727199
この記事で
僕が書いたコード

params_str = '&'.join(['%s=%s' % (urllib.quote(key, ''),urllib.quote(params[key], ''))
                           for key in sorted(params)])


で、いただいたブクマコメント

id:agricola Python, あれげ リスト内包の使い方に美がないなぁ……。辞書のキーと値を、キーで並べ替えて取り出して=で連結するなら

['='.join((k, v)) for k, v in sorted(d.items(), key = lambda x: x[0])]

とか書く気がする。

http://b.hatena.ne.jp/agricola/20100929#bookmark-25281496


id:nishiohirokazu がフォローをしてくれた記事がこれ
http://d.hatena.ne.jp/nishiohirokazu/20100929/1285762532


で、そこのブクマコメント

Python, あほか urllib.quote()でクォートした文字列を=で連結してるのに%使えば文字列以外もOKとは的外れな。元コードの意義は否定しないが、リスト内包で可読性を低下させて技巧に走ったのに美が無いのはいただけない。

http://b.hatena.ne.jp/agricola/20100930#bookmark-25295008


で、id:nishiohirokazu の該当するポイントを抜粋すると

挙動は100%イコールというわけではなくて、"%s=%s"の方は辞書の値がstrでなくてもエラーにならない。

http://d.hatena.ne.jp/nishiohirokazu/20100929/1285762532

"挙動の説明"をしてるだけだ。
もう一度言おう
"挙動の説明"をしてるだけだ。


なのに自分で urllib.quote() を省いたコードを書いておいて、
そのコードに反論されたら「あほか」ってタグまで付けて見当違いの反論をするのはどうなのかなぁ


ちなみに、最初の件も"僕の主観"で言えば

# パラメータをソートし,
for key in sorted(params)

#URIエンコードした
(urllib.quote(key, ''),urllib.quote(params[key], '')

#key=value の形にして
'%s=%s'

#  & で繋げます
'&'.join

という風にコメントの文章どおりに書いてるつもりなので、
技巧に走ったつもりもないんだけどなぁ……


むしろ、d.items() の 0 番目の要素をキーにするために lambda 使ってる方が技巧に走ってる気がするんだけどなぁ


まぁ、このへんは定性的なものなので、自転車置場の議論になりそうなのであんまり好きじゃないけど、
「美が無い」はまだしも「あほか」とか言われると、ちょっとそれは違うんじゃないかなぁと思って書いてみました。