3

当我浏览 Python 代码并查看调用的函数时,我注意到类似

functionCall(argument='something') 

或者

someclass.functionCall(argument='something')

我已经玩过它,并注意到您必须使用与函数或类函数本身范围内的变量相同的名称来命名该变量。这只是一个约定(用于有用的命名)还是我缺少的更多?

4

4 回答 4

10

这些只是标准的关键字参数

它们主要在调用通常采用默认值的函数时很有用,但用户有兴趣在不影响其他默认值的情况下传递自定义值。例如:

def foo(a='a', b='b', c='c'):
    print a + b + c

然后:

>>> foo()
'abc'
>>> foo(c='x')  # don't know or care about a and b's value
'abx'
于 2012-06-21T13:02:08.843 回答
2

最好有命名参数,因为可以使用命名参数以任何顺序指定参数。

甚至可以命名必需的参数(如没有默认值的对象),并且命名参数可以以任何顺序出现。

另见此

Python 的参数传递机制非常灵活。

缺点:函数的参数太多。解决方案:拆分为多个函数,在字典或对象中一起传递一些 args。

缺点:变量名不好。解决方案:给变量起更具描述性的名称。

或者记住正确的顺序.. :)

class xyz:
    def __init__ (self, a='1', b='2'):
        print a,b

xyz(b=3,a=4)
xyz(a=5,b=6)

>>4 3
>>5 6
于 2012-06-21T13:02:36.540 回答
2

这称为关键字参数。关键字参数有几个明显的优点:

  1. 调用者可以按任何顺序指定它们。
  2. 它们具有默认值,这意味着如果默认值合理,调用者不必为每个参数提供值。
  3. 它们可以使代码更具可读性。例如,foo(width=100, height=200)比 更容易理解foo(100, 200)。它也更容易使用,因为您不必记住该函数是采用宽度、高度还是高度、宽度。
于 2012-06-21T13:10:03.500 回答
1

这些是关键字参数。它们使您能够以任何顺序传递参数(对于跳过可选参数很有用)

但请注意,以这种方式调用函数会带来一些开销:

def test(a,b,c):
    return a+b+c

def t1():
    return test(1,2,3)

def t2():
    return test(a=1, b=2, c=3)

timeit(t1)
    0.23918700218200684
timeit(t2)
    0.2716050148010254
于 2012-06-21T13:07:57.167 回答