美文网首页ITS·黑客
python学习笔记4-函数的默认参数值

python学习笔记4-函数的默认参数值

作者: lucky07 | 来源:发表于2017-04-07 23:22 被阅读0次

    经验:一定要仔细看讲义,讲的很清楚。要多次看看啊。

    def addList(L=['a']):

    L.append('END')

    return L

    以上调用多次,会出现多个END!!!

    以下所有的调用,都正常显示!!

    def sst(s="aa"):

    s=s + "b"

    return s


    def ssr(s=""):

    s=s + "b"

    return s


    def num_test(s=1):

    s=s+1

    return s


    def saar(s=''):

    s=s + 'b'

    return s

    总结:

    Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

    这个函数defadd_end(L=[]):

    L.append('END')

    return L

    在定义的时候,L的值被指向了对象[],

    我们第一次调用函数的时候,>>>add_end()

    ['END']

    因为没有给参数,默认L=[]

    就是L的值被指向了对象[],(可以理解为赋值)

    定义函数的时候,括号里的不是变量类型,是定义了类型,并赋值了。

    而且这赋值只有在第一次引用的时候有用。因为这是可变对象。如果是不变对象,那么第二次引用的时候,继续赋值。

    上面这句话尽量不要这样理解。请按照下面理解:

    def函数的时候,L已经被分配了内存空间,这才是需要重视的地方。即使你调用再多次,L就是指向一个内存空间。

    而String和int不一样,是不变对象,def函数的时候,指向了一个空间。一旦再次调用,马上指向了新的空间,如下图。

    总结就是:函数定义默认参数要牢记一点:默认参数必须指向不变对象!

    不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)

    可变(mutable):字典型(dicti)、列表型(list)

    上图中=['a']在第二次调用时已经没有意义了,可以这样理解。L对象已经被建立了。确实没有意义。有意义的是函数定义的一开始。L对象建立。

    函数定义默认值,首先指出了变量类型,其次指出了默认参数。再理解到函数定义的一开始。默认参数L对象建立。最后理解不可变对象和可变对象。把那几个程序都敲敲,就可以了。

    关于测试的时候一些小错误

    num和num()的区别,一个是函数调用,一个是函数名

    如果直接打函数名,就会出现下面的内容,这是因为返回的是函数num所在的内存地址

    相关文章

      网友评论

        本文标题:python学习笔记4-函数的默认参数值

        本文链接:https://www.haomeiwen.com/subject/czmkattx.html