Python函数默认值参数的2个坑

在定义函数时,Python支持默认值参数,在定义函数时可以为形参设置默认值。在调用带有默认值参数的函数时,可以不用为设置了默认值的形参进行传值,此时函数将会直接使用函数定义时设置的默认值,当然也可以通过显式赋值来替换其默认值。也就是说,在调用函数时是否为默认值参数传递实参是可选的,具有较大的灵活性。例如:

>>> def say( message, times =1 ): print((message+' ') * times)

>>> say('hello') hello >>> say('hello', 3) hello hello hello

好了,下面重点介绍默认值参数的坑,虽然说是两个坑,但实际上是一个意思。

(1)默认值参数的值是在函数定义时确定的

>>> i = 3 >>> def f(n=i): #参数n的值仅取决于i的当前值 print(n) >>> f() 3 >>> i = 5 #函数定义后修改i的值不影响参数n的默认值 >>> f() 3 >>> i = 7 >>> f() 3 >>> def f(n=i): #重新定义函数 print(n) >>> f() 7

(2)默认值参数只初始化一次

如果参数的默认值是数字、字符串、元组或其他不可变类型的数据,并不会有什么影响,但是如果参数的默认值是列表、字典、集合等可变类型数据的话,这里有个大坑。

>>> def demo(newitem, old_list=[]): old_list.append(newitem) return old_list

>>> print(demo('5', [1, 2, 3, 4])) [1, 2, 3, 4, '5'] >>> print(demo('aaa', ['a', 'b'])) ['a', 'b', 'aaa'] >>> print(demo('a')) ['a'] >>> print(demo('b')) #注意这里的输出结果 ['a', 'b']

如果想得到正确结果,建议把函数写成下面的样子:

def demo(newitem, old_list=None): if old_list is None: old_list = [] old_list.append(newitem) return old_list

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WD学习记录

C#学习笔记(三)

隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。

1161
来自专栏程序员的知识天地

20分钟搞定Python 函数基础知识

简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行。Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语...

1373
来自专栏Python爬虫与数据挖掘

Python正则表达式初识(二)

前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”、“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享P...

1335
来自专栏老司机的技术博客

宝宝都能学会的python编程教程15:高级特性2

生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费...

2763
来自专栏开源优测

[快学Python3]类基础

概述 Python从设计之初就是面向对象的编程语言,所以在Python中创建一个类和对象是轻而易举的。 本文就Python的面向对象编程进行分享。 几个基本的概...

3286
来自专栏Vamei实验室

Java基础01 从HelloWorld到面向对象

Java是完全面向对象的语言。Java通过虚拟机的运行机制,实现“跨平台”的理念。我在这里想要呈现一个适合初学者的教程,希望对大家有用。 "Hello Worl...

1896
来自专栏python3

python 内置函数

基本的数据操作基本都是一些数学运算(当然除了加减乘除)、逻辑操作、集合操作、基本IO操作,然后就是对于语言自身的反射操作,还有就是字符串操作。

1152
来自专栏小二的折腾日记

day5(面向对象2)

注意:千万不要为了获取其他类的功能,简化代码而继承。 必须是类与类之间有所属关系才可以继承,所属关系 is a。

862
来自专栏java一日一条

深入浅出JavaScript之this

JavaScript中的this比较灵活,根据在不同环境下,或者同一个函数在不同方式调用下,this都有可能是不同的。但是有一个总的原则,那就是this指的是,...

612
来自专栏锦小年的博客

Python学习笔记3.2-python内置函数大全

学习python不可避免的首先要了解python的内置函数,熟悉了这些以后可以给编程带来很大的方便。 1、数学运算类 函数名 函数功能 备注 abs...

2539

扫码关注云+社区

领取腾讯云代金券