Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建以列表或整数作为参数的函数(Python)_Python_List_Function_Python 2.7 - Fatal编程技术网

创建以列表或整数作为参数的函数(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