首页 > 解决方案 > 为函数变量分配动态默认值?

问题描述

我有一个函数,它根据用户想要输入字符串的次数创建复合字符串:

def string_maker(string_list, repeat_list):
  final_string = ''
  for i in range(len(string_list)):
    for _ in range(repeat_list[i]):
      final_string += string_list[i]
  return final_string

因此,例如,string_maker(['a', 'b', 'c'], [1, 2, 1])输出abbc

我想这样做,如果用户没有为repeat_list参数输入列表,它默认为全 1。这就是我尝试这样做的方式:

def string_maker(string_list, repeat_list = None):
  if repeat_list == None:
    repeat_list = [1] * len(string_list)
  final_string = ''
  for i in range(len(string_list)):
    for _ in repeat_list[i]:
      final_string += str
  return final_string

print(string_maker(['a', 'b', 'c']))

但是,我收到一条错误消息'int' object is not iterable,即使我包含的新代码段返回了适当的列表[1, 1, 1]。有没有更好的方法来做到这一点?

标签: pythonarguments

解决方案


join方法是构建此列表的一种更有效的方法。

from itertools import repeat


def string_maker(string_list, repeat_list=repeat(1)):
    return ''.join([x*n for x, n in zip(string_list, repeat_list)])

repeat(1)提供无限的 1 流;zip只使用与 . 的元素配对所需的数量string_listx*n创建一个由n重复出现的组成的字符串x

>>> string_maker(list("abc"))
'abc'
>>> string_maker(list("abc"), [1,2,1])
'abbc'

推荐阅读