4

このコードがあるとしましょう:

>>> import urlparse
>>> url = "http://google.com"
>>> s = urlparse.urlsplit(url)
>>> print s
SplitResult(scheme='http', netloc='google.com', path='', query='', fragment='')
>>> print 'scheme ',s.scheme    
scheme  http
>>> print 'netloc ',s.netloc
netloc  google.com

ご覧のとおり、アイテムを手動で反復処理できますが、これを自動的に行うにはどうすればよいでしょうか? 私はこのようなことをしたい:

# This doesn't work:
for k,v in s.items():
    print '%s : %s'%(k,v)
4

2 に答える 2

7

内部_asdictメソッドを使用できます:

>>> import urlparse
>>> url = "http://google.com"
>>> s = urlparse.urlsplit(url)
>>> s
SplitResult(scheme='http', netloc='google.com', path='', query='', fragment='')
>>> s._asdict()
OrderedDict([('scheme', 'http'), ('netloc', 'google.com'), ('path', ''), ('query', ''), ('fragment', '')])
>>> d = s._asdict()
>>> for k,v in d.items():
...     print k, repr(v)
... 
scheme 'http'
netloc 'google.com'
path ''
query ''
fragment ''

コメントで提起された点を明確にするために、_通常、パブリック インターフェイスの一部ではないメソッドを示す接頭辞 にもかかわらず、メソッドはパブリック インターフェイスです。namedtupleドキュメントで[リンク]が説明されているように、名前の競合を避けるためにプレフィックスが付けられています。

フィールド名との競合を避けるために、メソッド名と属性名はアンダースコアで始まります。

Python 3 では、実装が変更されたため、これははるかに簡単になりました。

>>> vars(urllib.parse.urlsplit("http://www.google.ca"))
OrderedDict([('scheme', 'http'), ('netloc', 'www.google.ca'), ('path', ''), ('query', ''), ('fragment', '')])
于 2012-10-11T17:33:45.830 に答える
1
>>> url = "http://google.com"
>>> s = urlparse.urlsplit(url)
>>> scheme, netloc, path, query, fragment = s
>>> scheme
'http'
>>> netloc
'google.com'
>>> path
''
>>> query
''
>>> fragment
''

上に示したように、SplitResult は本当に手の込んだタプルなので、標準の代入も使用できます。

>>> scheme, netloc, _, _, _ = s # I only want the scheme and netloc

楽しみ。

于 2012-10-11T17:38:56.497 に答える