3

関数入力をリストにエレガントにキャストする方法はありますか? 入力がすでにリストである場合、それがトップレベルのリストに保持されていることを確認しますか?

例えば:

def pprint(input):
    for i in input:
        print(i)

a = ['Hey!']
pprint(a) # >>>>'Hey!'

b = 'Hey!'
pprint(b) # >>>> 'H', 'e', 'y', '!'  # NOT WANTED BEHAVIOR

これを回避する私の現在の方法は、型チェックを行うことですが、これはあまりpythonicでもエレガントでもありません。より良い解決策はありますか?

# possible solution 1
def pprint2(input):
    if type(input) not in [list, tuple]:
        input = [input]
    for i in input:
        print(i)

# possible solution 2
      # but I would really really like to keep the argument named! (because I have other named arguments in my actual function), but it does have the correct functionality!
def pprint3(*args):
    for i in input:
        print(i)
4

2 に答える 2

-2

assert と isinstance を利用する

>>> inp = "String to test"
>>> try:
...     assert not isinstance(inp, basestring)
...     for i in inp:
...        print i
... except AssertionError:
...     print inp
... 
String to test
于 2013-09-18T06:23:07.800 に答える