Python递归变量状态

Python递归变量状态,python,Python,我正试图编写一个Python函数来获取一个字符串和一个数字,并返回一个包含字符串重复的列表。比如说 print func(3, 'aaa') 返回 ['aaa', 'aaa', 'aaa'] 这就是我到目前为止所做的: def func(times, data): if times > 0: return data.split() + func(times-1, data) 但是,它给了我一个类型错误: can only concatenate list (n

我正试图编写一个Python函数来获取一个字符串和一个数字,并返回一个包含字符串重复的列表。比如说

print func(3, 'aaa')
返回

['aaa', 'aaa', 'aaa']
这就是我到目前为止所做的:

def func(times, data):
    if times > 0:
        return data.split() + func(times-1, data)
但是,它给了我一个类型错误:

can only concatenate list (not "NoneType") to list.
我还是个新手,我刚刚读过递归


我还想知道如何从连续的函数调用中“继承”变量的状态,而不必定义全局变量。救命啊

您需要一个基本情况,其中时间为0,您只需返回一个空列表:

def func(times, data):
    if times == 0:
        return []
    # no need for split, just wrap data in a list.
    return [data] + func(times-1, data)

在代码中,当times==0时,函数隐式返回None,因此尝试将递归调用的结果添加到None。我们也应该使用,而@Padraic Cunningham有一个很好的答案,这里有一个简单的方法:

def func(number, content):
    return [content] * number
或列表理解:

def func(number, content):
    return [content for _ in range(number)]

那么当
次==0时会发生什么呢?在这种情况下,您不会返回任何内容。虽然这可以通过递归来完成,但这个问题似乎很简单,没有它也可以完成。
['aaa']*3
有什么问题吗?我认为他正在尝试使用递归进行一些练习,没有什么问题。是的,
[data]*times
可能是最好的方法。好的:只要
def func(nb,s):返回[s]*nb print(func(3,'aaa'))
def func(number, content):
    return [content for _ in range(number)]