python - 为函数变量分配动态默认值?
问题描述
我有一个函数,它根据用户想要输入字符串的次数创建复合字符串:
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]
。有没有更好的方法来做到这一点?
解决方案
该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_list
。x*n
创建一个由n
重复出现的组成的字符串x
。
>>> string_maker(list("abc"))
'abc'
>>> string_maker(list("abc"), [1,2,1])
'abbc'
推荐阅读
- compilation - 编译后 LLVM IR 到可执行段错误
- schedule - 如何根据 Anylogic 中的火车到达时间表将行人从等候区释放?
- node.js - TypeScript 内存错误未终止 Docker 构建
- sql - 在另一个查询的 WHERE 子句中使用一个 PostGIS SQL 查询的结果
- python - 将数组的偶数索引元素乘以 2,数组的奇数索引元素乘以 3
- python - x 和 y 的大小必须相同
- css - 工具提示被 div 纯 CSS 截断
- email - 是否有可能知道我从哪里发送电子邮件?
- javascript - 如何(可能)获得 0 到 255 之间的所有均匀分布的浮点值
- java - 在eclipselink / JPA中使用唯一约束时如何避免在一对多关系中重复插入“许多”实体