1

いくつかのものを印刷するメソッドを作成します。

def my_print(*str1):
  print '---------------'
  print str1
  print '---------------'


my_print('1fdsfd %s -- %s' % (12, 18))

それは私に与えます

---------------
('1fdsfd 12 -- 18',)
---------------

(これらの余分な)偶数があるのはなぜ,ですか?どうすればそれらを取り除くことができますか?

4

3 に答える 3

2

その理由は*、が関数str1内でタプルに変換されるためです。my_printを削除する*か、 を使用できますprint str1[0]

a*が関数定義で使用されると、コレクターとして動作し、関数に渡されたすべての位置引数をタプルに収集します。

>>> def func(*a):
...     print type(a)
...     print a
...     
>>> func(1)
<type 'tuple'>
(1,)
>>> func(1,2,3)
<type 'tuple'>
(1, 2, 3)

コードの作業バージョン:

def my_print(str1):
  print '---------------'
  print str1
  print '---------------'


my_print('1fdsfd %s -- %s' % (12, 18))

また :

def my_print(*str1):
  print '---------------'
  print str1[0]
  print '---------------'


my_print('1fdsfd %s -- %s' % (12, 18))
于 2013-05-06T10:21:04.723 に答える
0

を削除して代わりに*使用します。str.format()

mytuple = (12, 18)
my_print('1fdsfd {0} -- {1}'.format(*mytuple)) # I've used the * here to unpack the tuple.

他の人が指摘したように、それstr1はタプルに変換されます。

于 2013-05-06T10:21:47.000 に答える
0

関数に与えられたすべての引数を splat() 演算子でアンパックしているので、eg*に保存された引数のタプルを取得しています。str1

>>> my_print('a', 'b')
---------------
('a', 'b')
---------------

次に、単に引数のタプルを出力しています。スプラットは必要ないようですstr1。それを削除するだけで問題なく動作するからです。

于 2013-05-06T10:21:55.230 に答える