在Python中声明未知类型变量?

Aus*_*tin 2 python types

我有Python(咳嗽,家庭作业)的情况,我需要在给定的对象列表中将EACH ELEMENT乘以指定的次数并返回元素的输出.问题是给出的样本输入是不同类型的.例如,一种情况可以输入一个字符串列表,其元素我需要相乘而其他元素可能是整数.所以我的回归类型需要改变.我想这样做而不必测试每种类型的对象是什么.有没有办法做到这一点?我知道在C#中我可以使用"var",但我不知道Python中是否存在这样的东西?

我意识到变量不必声明,但在这种情况下,我无法看到任何解决方法.这是我做的功能:

def multiplyItemsByFour(argsList):

output = ????

for arg in argsList:
        output += arg * 4

return output
Run Code Online (Sandbox Code Playgroud)

看看我需要如何添加到输出变量.如果我只是试图取消第一行的输出分配,我得到一个错误,即未定义变量.但是,如果我为空字符串分配0或"",则可能抛出异常,因为您不能将3添加到字符串或"a"添加到整数等等...

以下是一些示例输入和输出:

Input:  ('a','b')  Output:  'aaaabbbb'
Input:  (2,3,4)    Output:  36
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ale*_*lli 6

def fivetimes(anylist):
  return anylist * 5
Run Code Online (Sandbox Code Playgroud)

如您所见,如果您获得了一个列表参数,则无需进行任何分配,以"将其乘以给定次数并返回输出".你谈谈一个给定的清单; 它是如何你的,如果不是(最自然的方式)作为你的功能的一个参数?并不重要 - 如果它是一个全局变量,对象的属性是你的论据,等等,这仍然不需要任何任务.

如果你被"家庭作业"禁止使用*列表操作符,并且只是需要自己实现它,这将需要赋值,但没有声明:

def multiply_the_hard_way(inputlist, multiplier):
    outputlist = []
    for i in range(multiplier):
        outputlist.extend(inputlist)
    return outputlist
Run Code Online (Sandbox Code Playgroud)

你可以简单地使空列表"魔术出现":没有必要"声明"它是任何东西,它是一个空列表,Python编译器和你或你的代码的任何读者都知道它.将它绑定到名称outputlist也不要求你执行任何特殊的仪式,只需要绑定(也就是赋值)本身:名称没有类型,只有对象有类型......那是Python! - )

编辑:OP现在说输出不能是列表,而是int,float或者字符串,并且没有给出任何指示.我已经要求澄清了 - 乘以一个列表总是返回一个列表,所以显然他必须表达与他原先说的不同的东西,他必须乘以一个列表.与此同时,这是另一种思维阅读的尝试.也许他必须返回一个列表,其中输入列表的每个ITEM乘以相同的因子(无论该项是int,float,string,list,......).好吧:

define multiply_each_item(somelist, multiplier):
  return [item * multiplier for item in somelist]
Run Code Online (Sandbox Code Playgroud)

看马,没有手^ H ^ H ^ H ^ H ^ H分配.(这被称为"列表理解",顺便说一句).

或许(不太可能,但是我的思维帽子可能会受到我的锡箔帽的干扰,需要去疯狂的帽子商店调整它们)他需要(比如说)将每个列表项目相乘,好像它们是相同的键入作为第一个项目,但将它们作为原始类型返回,以便例如

>>> mystic(['zap', 1, 23, 'goo'], 2)
['zapzap', 11, 2323, 'googoo']
>>> mystic([23, '12', 15, 2.5], 2)
[46, '24', 30, 4.0]
Run Code Online (Sandbox Code Playgroud)

甚至这个高度神秘的规范也可以容纳......:

>>> def mystic(alist, mul):
...   multyp = type(alist[0])
...   return [type(x)(mul*multyp(x)) for x in alist]
... 
Run Code Online (Sandbox Code Playgroud)

...虽然我非常怀疑这个规范实际上编码在家庭作业的神秘符文中.几乎任何精确的规范都可以实现或证明可能是不可能的(通过要求你解决停机问题或要求P == NP,说;-).这可能需要一些工作(例如,"证明四色定理"; - )......但仍然比神奇的实际规范IS,从一系列相互矛盾的观察,没有例子等神奇地划分神奇虽然在我们作为软件开发人员的日常工作中(对于我们所有人不得不面对的好时光啊!)我们当然会遇到很多这样的情况(并且必须解决这些问题才能获得我们的日常面包; - ).

EditEdit:最后看到一个精确的规范,我指出我已经实现了那个,无论如何,这里又一次:

def multiplyItemsByFour(argsList):
  return [item * 4 for item in argsList]
Run Code Online (Sandbox Code Playgroud)

EditEditEdit:终于/最终看到更精确的规格,(豪华! - )示例:

Input: ('a','b') Output: 'aaaabbbb' Input: (2,3,4) Output: 36
Run Code Online (Sandbox Code Playgroud)

那么所需要的是输入列表中项目的总和(并且你不能使用,sum因为它对字符串不起作用),每个项目乘以4.我的首选解决方案

def theFinalAndTrulyRealProblemAsPosed(argsList):
  items = iter(argsList)
  output = next(items, []) * 4
  for item in items:
    output += item * 4
  return output
Run Code Online (Sandbox Code Playgroud)

如果你正在使用一些结构,如内置插件的禁止itemsiter,还有许多其他的可能性(略逊一筹的),例如:

def theFinalAndTrulyRealProblemAsPosed(argsList):
  if not argsList: return None
  output = argsList[0] * 4
  for item in argsList[1:]:
    output += item * 4
  return output
Run Code Online (Sandbox Code Playgroud)

对于一个空的argsList,第一个版本返回[],第二个版本返回None- 无论如何不确定你应该在那个角落的情况下做什么.