打印打印一些额外的标志

时间:2013-05-06 10:18:08

标签: python python-2.7

我创建了一个打印一些东西的方法:

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


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

给了我

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

为什么我有这些额外的()甚至,以及如何摆脱它们?

3 个答案:

答案 0 :(得分:2)

原因是由* str1转换为my_print函数内的元组,您可以删除*或使用print str1[0]

当在函数定义中使用*时,它表现为收集器,并收集传递给元组中的函数的所有位置参数。

>>> 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))

答案 1 :(得分:0)

删除*并改为使用str.format()

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

正如其他人所指出的,它将str1转换为元组。

答案 2 :(得分:0)

由于您正在使用splat(*)运算符解包为函数提供的所有参数,因此您将获得保存到str1的参数元组,例如

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

然后你只是打印参数元组,似乎你不需要splat,因为你只有str1所以只需删除它就可以了。