Python:这是一个传递参数约定吗?

时间:2012-06-21 12:59:29

标签: python

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

之类的内容
functionCall(argument='something') 

someclass.functionCall(argument='something')

我玩过它并注意到你必须将该变量命名为与函数或类函数本身范围内的变量同名。这只是一个约定(对于有用的命名)还是我缺少的更多?

4 个答案:

答案 0 :(得分:10)

这些只是标准keyword arguments

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

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'

答案 1 :(得分:2)

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

甚至可以命名必需的参数(如object,它没有默认值),命名参数可以按任何顺序出现。

Also see This

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

答案 2 :(得分:2)

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

  1. 可以由来电者以任何顺序指定。
  2. 它们具有默认值,这意味着如果默认值合理,调用者不必为每个参数提供值。
  3. 他们可以使代码更具可读性。例如,foo(width=100, height=200)foo(100, 200)更容易理解。它也更容易使用,因为您不必记住该函数是否采用宽度,高度或高度,宽度。

答案 3 :(得分: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