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



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

functionCall(argument='something') 

someclass.functionCall(argument='something')

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

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

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

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. 它们具有默认值,这意味着如果默认值合理,则调用方不必为每个参数提供值。
  3. 它们可以使代码更具可读性。例如,foo(width=100, height=200)foo(100, 200)更容易理解。它也更容易使用,因为您不必记住函数是宽度,高度还是高度,宽度。
最好

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

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

另请参阅此

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

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

缺点: 错误的变量名称。解决方案:为变量提供更具描述性的名称。

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

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

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

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

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

最新更新