多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
我们知道,在调用函数时如果不指定某个参数,Python解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。这样的话,即便调用函数时没有给拥有默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值。 Python 定义带有默认值参数的函数,其语法格式如下: def 函数名(...,形参名,形参名=默认值):     代码块 注意,在使用此格式定义函数时,指定有默认值的形式参数必须在所有没默认值参数的最后,否则会产生语法错误。 下面程序演示了如何定义和调用有默认参数的函数: ``` #str1没有默认参数,str2有默认参数 def dis_str(str1,str2 = "http://x.linyiwang.cn/python/"): print("str1:",str1) print("str2:",str2) dis_str("http://x.linyiwang.cn/shell/") dis_str("http://x.linyiwang.cn/java/","http://x.linyiwang.cn/golang/") ``` 运行结果为: ``` str1: http://x.linyiwang.cn/shell/ str2: http://x.linyiwang.cn/python/ str1: http://x.linyiwang.cn/java/ str2: http://x.linyiwang.cn/golang/ ``` 上面程序中,dis_str() 函数有 2 个参数,其中第 2 个设有默认参数。这意味着,在调用 dis_str() 函数时,我们可以仅传入 1 个参数,此时该参数会传给 str1 参数,而 str2 会使用默认的参数,如程序中第 6 行代码所示。 当然在调用 dis_str() 函数时,也可以给所有的参数传值(如第 7 行代码所示),这时即便 str2 有默认值,它也会优先使用传递给它的新值。 同时,结合关键字参数,以下 3 种调用 dis_str() 函数的方式也是可以的: ``` dis_str(str1 = "http://x.linyiwang.cn/shell/") dis_str("http://x.linyiwang.cn/java/",str2 = "http://x.linyiwang.cn/golang/") dis_str(str1 = "http://x.linyiwang.cn/java/",str2 = "http://x.linyiwang.cn/golang/") ``` >再次强调,当定义一个有默认值参数的函数时,有默认值的参数必须位于所有没默认值参数的后面。因此,下面例子中定义的函数是不正确的: ``` #语法错误 def dis_str(str1="http://x.linyiwang.cn/python/",str2,str3): pass ``` 显然,str1 设有默认值,而 str2 和 str3 没有默认值,因此 str1 必须位于 str2 和 str3 之后。 有读者可能会问,对于自己自定义的函数,可以轻易知道哪个参数有默认值,但如果使用 Python 提供的内置函数,又或者其它第三方提供的函数,怎么知道哪些参数有默认值呢? Pyhton 中,可以使用“函数名.\_\_defaults\_\_”查看函数的默认值参数的当前值,其返回值是一个元组。以本节中的 dis\_str() 函数为例,在其基础上,执行如下代码: ``` print(dis_str.__defaults__) ``` 程序执行结果为: ``` ('http://x.linyiwang.cn/python/',) ```