创建以列表或整数作为参数的函数(Python)
我试图创建一个函数,它给出一个数字列表的平均值,或者只给出整数作为变量。到目前为止,我已经:创建以列表或整数作为参数的函数(Python),python,list,function,python-2.7,Python,List,Function,Python 2.7,我试图创建一个函数,它给出一个数字列表的平均值,或者只给出整数作为变量。到目前为止,我已经: def average(*args): if type(args) is list: for x in args: print sum(x) / float(len(x)) else: for x in args: args = list(args) print sum(x) / fl
def average(*args):
if type(args) is list:
for x in args:
print sum(x) / float(len(x))
else:
for x in args:
args = list(args)
print sum(x) / float(len(x))
当我输入一个列表时,比如
average([1, 3, 5, 2])
它工作得很好。但是当我进去的时候
average(1, 3, 5, 2)
它给出了“TypeError:'int'对象不可编辑”。
我检查了其他问题,但没有一个解决方案有效。我试图检查它是否是一个类型为()和isinstance()的列表,但每当我让其中一个工作时,另一个就会抛出一个错误。第二个打印和(x)/float(len(x))
调用x上的len()
,这是一个整数
我想你的意思是:
else:
print sum(args) / float(len(args))
演示
args是一个元组,因此检查
args[0]
是否是一个列表,如果在just sum args中传递了just int,则检查args[0]
的内容的总和:
def average(*args):
if isinstance(args[0],list):
print(sum(args[0]) / float(len(args[0])))
else:
print (sum(args) / float(len(args)))
In [2]: average(1, 3, 5, 2)
2.75
In [3]: average([1, 3, 5, 2])
2.75
如果要接受元组,请使用集合
from collections import Iterable
def average(*args):
if isinstance(args[0],Iterable):
print(sum(args[0]) / float(len(args[0])))
else:
print (sum(args) / float(len(args)))
In [5]: average([1, 3, 5, 2])
2.75
In [6]: average(1, 3, 5, 2)
2.75
In [7]: average((1, 3, 5, 2))
2.75
代码中的if部分,即
if类型(args)是list:
永远不会执行。因为,每当使用*args
将非关键字参数传递给函数时,作为args
接收的值始终是一个元组。所以类型(args)是list
总是False
。需要做的是迭代通过*args
传递的参数,并检查参数的类型,如果它是list,那么您已经传递了一个list,即average([1,3,5,7])
,否则传递整数时它将是整数即average(1,3,5,7)
。因此,以下代码将起作用:-
def average(*args):
for x in args:
if type(x) == list:
# List is passed
return sum(x) / float(len(x))
# Assuming inputs passed restricted to list and numbers
# Numbers are passed as argument
return sum(args) / float(len(args))
这将为您提供两种类型输入的输出:-
>>> average([1,3,5,7])
4.0
>>> average(1,3,5,7)
4.0
当我这样做时,它接受“average()”参数,但不接受“average([])”列表参数。尝试修改为:
如果类型(args)是tuple:
而不是,如果类型(args)是list:
:)@sfowler12-立即尝试。Lol现在它适用于“average([]),而不是“average()”。这是我过去四个小时的祸根。你为什么要尝试sum(x)
和len(x)
传递一个简单的int
?此外,尝试添加print(type(args))
时,您会发现这是一个元组
而不是列表
>>> average([1,3,5,7])
4.0
>>> average(1,3,5,7)
4.0