4 回答
TA贡献2039条经验 获得超7个赞
您将 'purplecat' 作为字符串传递,因此当循环通过时,它会将字符串的每个元素视为要迭代的一件事。尝试将其放入单元素列表中:
validate_users(['purplecat'])
TA贡献1795条经验 获得超7个赞
问题是你在这里迭代一个字符串:for user in users
但是users == "purplecat"
。
尝试这样调用您的函数:validate_users(["purplecat"])
TA贡献1852条经验 获得超1个赞
在此示例中,您将字符串“purplecat”作为函数 validate_users 的参数传递。所以,用户=“紫猫”
在 validate_users 函数中,您使用了迭代参数用户的 for 循环。在python中,如果对字符串类型的变量使用for循环,那么for循环会遍历字符串中的所有字符。
如果你想得到像“purplecat is valid”这样的输出,那么你需要使用“validate_users(["purplecat"])”。
在这种情况下,您传递了一个字符串列表,因此 validate_users 中的 for 循环将迭代列表中的所有字符串(在这种情况下,它只会迭代一次,因为列表只有 1 个元素)。
TA贡献1873条经验 获得超9个赞
正如其他人所指出的那样,如果您想制作一个包含字符串的单元素列表,您可以使用字符串对象[my_string]在哪里,例如。my_string"purplecat"
如果在参数中传递字符串,则有几个备选方案可以让您的函数更优雅地执行操作users。
一种选择是接受字符串作为列表的替代,users如果变量不是列表,则将其重新分配给单元素列表:
def validate_users(users):
if not isinstance(users, list):
users = [users]
# then carry on as before
另一种选择是以更可预测的方式失败:
def validate_users(users):
if not isinstance(users, list):
raise ValueError("users must be a list")
# then carry on as before
然后,您可以编写函数的其余部分,而不必担心是否向您传递了列表以外的内容。在后一种情况下,由调用者确保它传入列表或处理任何ValueError.
为简单起见,我在这里不考虑元组,尽管您可能希望接受元组作为列表的替代方案,例如
if not isinstance(users, list):
你可以有
if not isinstance(users, (list, tuple)):
添加回答
举报