我创建了一个打印一些东西的方法:
def my_print(*str1):
print '---------------'
print str1
print '---------------'
my_print('1fdsfd %s -- %s' % (12, 18))
给了我
---------------
('1fdsfd 12 -- 18',)
---------------
为什么我有这些额外的(
和)
甚至,
以及如何摆脱它们?
答案 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
所以只需删除它就可以了。