百度一下 藏锋者 就能快速找到本站! 每日资讯归档 下载藏锋者到桌面一键访问

当前位置:主页 > 编程 > python > Python函数 -- 参数

Python函数 -- 参数

所在栏目:python 时间:12-22 20:54 分享:

Python 允许函数函数有默认值。如果函数被调用的时候没有指定参数,那么参数将使用默认值。不仅如此,通过使用命名参数还可以按照任何顺序指定参数。

让我们再看一下 approximate_size() 函数的声明:

def approximate_size(size, a_kilobyte_is_1024_bytes=True):

第二个参数 a_kilobyte_is_1024_bytes 指定了一个默认值 True。 意思是这个参数是 optional (可选的),你可以在调用的时候不指定它,Python 将看成你调用的时候使用了 True 作为第二个参数。

现在看一下这个脚本的底部:


if __name__ == '__main__':
    print(approximate_size(1000000000000, False))  
    print(approximate_size(1000000000000))         

这个对 approximate_size() 函数的调用指定了两个参数。在 approximate_size() 函数里面,a_kilobyte_is_1024_bytes 的值将为 False,因为你显式的传入了 False 作为第二个参数。
这个对 approximate_size() 函数的调用只指定了一个参数。但这是可以的,因为第二个参数是可选的!由于调用者没有指定,第二个参数就会使用在函数声明的时候定义的默认值 True

你也可以通过名称将值传入一个函数。

>>> from humansize import approximate_size
>>> approximate_size(4000, a_kilobyte_is_1024_bytes=False)       
'4.0 KB'
>>> approximate_size(size=4000, a_kilobyte_is_1024_bytes=False)  
'4.0 KB'
>>> approximate_size(a_kilobyte_is_1024_bytes=False, size=4000)  
'4.0 KB'
>>> approximate_size(a_kilobyte_is_1024_bytes=False, 4000)       
  File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg
>>> approximate_size(size=4000, False)                           
  File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg

这个对 approximate_size() 函数的调用给第一个参数((size)指定了值 4000,并且给名为 a_kilobyte_is_1024_bytes 的参数指定了值 False。(那碰巧是第二个参数,但这没有关系,马上你就会了解到。)
这个对 approximate_size() 函数的调用给名为 size 参数指定了值 4000,并为名为 a_kilobyte_is_1024_bytes 的参数指定了值 False。(这些命名参数碰巧和函数声明时列出的参数顺序一样,但同样不要紧。)
这个对 approximate_size() 函数的调用给名为 a_kilobyte_is_1024_bytes 的参数指定了值 False,然后给名为 size 的参数指定了值 4000。(看到了没?我告诉过你顺序没有关系。)
这个调用会失败,因为你在命名参数后面紧跟了一个非命名(位置的)的参数,这个一定不会工作。从左到右的读取参数列表,一旦你有一个命名的参数,剩下的参数也必须是命名的。
这个调用也会失败,和前面一个调用同样的原因。 是不是很惊讶?别忘了,你给名为 size 的参数传入了值 4000,那么“显然的” False 这个值意味着对应了 a_kilobyte_is_1024_bytes 参数。但是 Python 不按照这种方式工作。只要你有一个命名参数,它右边的所有参数也都需要是命名参数。
Python函数 -- 参数 免费邮件订阅: 邮件订阅

图片推荐

热点排行榜

CopyRight? 2013 www.cangfengzhe.com All rights reserved