3

私はPythonを初めて使用するので、素朴な質問に耐えてください。

数値のベクトルを取り、それらの平均値を計算する関数を書きたいと思います。だから私は小さな関数を次のように書きます

def my_mean(*args):
    if len(args) == 0:
        return None
    else:
        total = sum(args)
        ave = 1.0 * total / len(args)
        return ave

my_mean(1, 2, 3)
2.0

ただし、引数が数値のリストである場合、この関数は機能しません。例えば、

my_mean([1, 2, 3])
Traceback (most recent call last):
  File "/usr/lib/wingide-101-4.1/src/debug/tserver/_sandbox.py", line 1, in <module>
    # Used internally for debug sandbox under external interpreter
  File "/usr/lib/wingide-101-4.1/src/debug/tserver/_sandbox.py", line 21, in my_mean
TypeError: unsupported operand type(s) for +: 'int' and 'list'

引数としてリストを受け取る関数がありますが、数値のベクトルは取りませNumPyん。numpy.meanmy_mean

my_meanどちらの場合も仕事をする方法があるのだろうか?それで:

my_mean(1, 2, 3)
2.0
my_mean([1, 2, 3])
2.0

のようにminまたはmax機能しますか?

4

2 に答える 2

6

*arg次の構文を使用して、リストを渡すことができます。

my_mean(*[1, 2, 3])

argsまたは、渡された最初の引数がシーケンスであるかどうかを検出し、タプル全体の代わりにそれを使用することもできます。

import collections

def my_mean(*args):
    if not args:
        return None
    if len(args) == 1 and isinstance(args[0], collections.Container):
        args = args[0]
    total = sum(args)
    ave = 1.0 * total / len(args)
    return ave
于 2012-09-23T09:39:45.457 に答える
1

リストをタプルの形で渡してみませんか?使用するfunc(*[1, 2, 3])

于 2012-09-23T09:42:10.633 に答える