我创建了一种打印一些东西的方法:
def my_print(*str1):
print '---------------'
print str1
print '---------------'
my_print('1fdsfd %s -- %s' % (12, 18))
这给了我
---------------
('1fdsfd 12 -- 18',)
---------------
为什么我有这些额外的(
,)
甚至,
还有我如何摆脱它们?
我创建了一种打印一些东西的方法:
def my_print(*str1):
print '---------------'
print str1
print '---------------'
my_print('1fdsfd %s -- %s' % (12, 18))
这给了我
---------------
('1fdsfd 12 -- 18',)
---------------
为什么我有这些额外的(
,)
甚至,
还有我如何摆脱它们?
原因是由于*
被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))
删除*
并str.format()
改用:
mytuple = (12, 18)
my_print('1fdsfd {0} -- {1}'.format(*mytuple)) # I've used the * here to unpack the tuple.
正如其他人指出的那样,它转换str1
为元组。
由于您使用 splat ( *
) 运算符解包给函数的所有参数,因此您将获得保存到str1
例如的参数元组。
>>> my_print('a', 'b')
---------------
('a', 'b')
---------------
然后你只是打印参数的元组,看起来你不需要splat,因为你只需要str1
删除它就可以了。