[英]Multiplication with int and str
对于这个看似简单的问题,我完全感到困惑。 我想定义一个将接受输入的函数,可以是str或int并将其加倍。 例如,如果输入为'foo'
,则输出将为'foofoo'
。 同样,如果输入为(9),则输出为18。有人可以将我指向正确的方向吗?
这是我到目前为止的内容:
def double(x):
"""returns two times a number if input is a number, returns double the size of the string inputted, if input is a string
str -> str; int -> int"""
if x is :
return x*2
if x is :
return x*2
关于什么:
def double(x):
return x+x
要么
def double(x):
return x*2
两者都应作为:
+
运算符会重载以执行串联; *
运算符将重载为“重复”。 由于Python是动态类型的,因此将在运行时根据操作数的类型来选择执行的实际操作。
更正式地,引用文档 :
*
(乘法)运算符产生其自变量的乘积。 参数必须都是数字,或者一个参数必须是整数,另一个参数必须是序列 。 在前一种情况下,数字将转换为通用类型,然后相乘。 在后一种情况下,将执行序列重复。 负的重复因子会产生一个空序列。[...]
+
(加法)运算符产生其参数之和。 参数必须都是数字,或者都是相同类型的序列 。 在前一种情况下,数字将转换为通用类型,然后加在一起。 在后一种情况下,序列是串联的。
如果您感到好奇,请从源代码或Python3.3.6/Objects/abstract.c
( PyNumber_Mul
的代码相当):
PyObject *
PyNumber_Add(PyObject *v, PyObject *w)
{
PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
if (result == Py_NotImplemented) {
PySequenceMethods *m = v->ob_type->tp_as_sequence;
Py_DECREF(result);
if (m && m->sq_concat) {
return (*m->sq_concat)(v, w);
}
result = binop_type_error(v, w, "+");
}
return result;
}
如您所见,解释器将首先尝试使用为左操作数定义的特殊方法__add__
进行加法。 如果此返回NotImplemented
,它将尝试将左操作数解释为一个序列并执行连接。
只需将输入乘以2。 如果是字符串,它将连接两次。 如果是数字,它将翻倍。
user = raw_input('Enter input: ')
print user * 2
查看Python文档。 这是直接从中获取的。
可以使用
+
运算符将字符串连接(粘合在一起),并使用*
重复:
>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.