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 ( *) 运算符解包给函数的所有参数,因此您将获得保存到str1例如的参数元组。

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

然后你只是打印参数的元组,看起来你不需要splat,因为你只需要str1删除它就可以了。

于 2013-05-06T10:21:55.230 回答