zoukankan      html  css  js  c++  java
  • Day5

    位置参数
        调用函数时,传入函数的参数,按照位置顺序依次赋值给函数的参数。
    #计算乘方的函数       
            def power(x, n):
                s = 1
                while n > 0:
                    n = n - 1
                    s = s * x
                return s
            在使用power(1,2)时, 会根据位置顺序,将1赋值给x ,2 赋值给n。

    默认参数
        如果希望不指定指数时,默认按照平方进行计算,可以指定函数的默认参数。
    #计算乘方的函数,默认计算平方
            def power(x, n=2):
                s = 1
                while n > 0:
                    n = n - 1
                    s = s * x
                return s
            直接使用power(10) ,则计算10的平方。 如需计算5的3次方,则使用power(5, 3)。
           
        使用默认参数可以简化函数的调用,但是设置默认参数时有几点需要留意:
            1.必选参数在前,默认参数在后,否则会报错。
            2.当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面, 变化小的参数就可以作为默认参数。
            3.默认参数必须指定为不变对象!
    默认参数的使用
    #在这里对默认参数的几点留意进行一下详解。
        #首先定义一个函数,用来登记身份信息,使用4个参数:姓名,年龄,性别,国籍。
        #在这里,年龄、性别、国籍都可以从某一个维度上根据需要设定为默认参数,例如:班级学生大多数年龄一样大、足球队员性别大多数都是一样的、国籍更是有相当的一致性。
       
        def info(name,age,sex,intl):
            print(name,'来自于',intl,'是一个',age,'岁的',sex,'孩')
            return None
           
        >>> info('小A',10,'男','中国')
        小A 来自于 中国 是一个 10 岁的 男 孩
       
        #假设现在有10个人,都是中国籍的男孩子,其中有两个孩子分别是14岁和12岁,其他人都是10岁,那么这种录入操作就很适合做默认参数了。
       
        def info(name,age=10,sex='男',intl='中国'):
            print(name,'来自于',intl,'是一个',age,'岁的',sex,'孩')
            return None
           
        >>> info('小B')
        小B 来自于 中国 是一个 10 岁的 男 孩
        >>> info('小C')
        小C 来自于 中国 是一个 10 岁的 男 孩
        >>> info('小D',12)
        小D 来自于 中国 是一个 12 岁的 男 孩
        >>> info(age=14,name='小E')
        小E 来自于 中国 是一个 14 岁的 男 孩
       
        #可以看出,在使用默认参数的时候其实很灵活,可以根据顺序传入参数,也可以指定参数名赋值的方式不按照顺序提供参数。
       
    默认参数的坑:一定要设为不可变对象。
        先来试试将默认参数设置为可变对象的情况:
            >>> def nn(name,ext=[]):
            ...     ext.append('over')
            ...     print(name,ext)
            ...
            >>> nn('a')
            a ['over']
            >>> nn('a')
            a ['over', 'over']
        可以看到,list作为默认参数时,发生了意料之外的结果。
        函数在定义的时候,默认参数ext的值就被计算出来了,在这里是[],ext参数实际上是一个指向[]的变量,如果改变了ext参数( 就是 [] )的内容,则下次调用时默认参数的内容就变了,指向到了修改后的[]的位置,而不再是最先定义函数时的[]了。
       
        为了避免上面的情况,可以使用这种方式来解决:
            >>> def nn(name,ext=None):
            ...     if ext is None:
            ...             ext = []
            ...             ext.append('over')
            ...     print(name,ext)
            ...
            >>> nn('aa')
            aa ['over']
            >>> nn('aa')
            aa ['over']
            >>> nn('aa','bb')
            aa bb
           
    使用不可变对象能够减少由于修改数据导致的错误,由于对象不变,多任务环境下同时读取对象也不需要加锁,可以同时进行读动作。在编写程序时,如果可以设计为不变对象,就尽可能设计成不变对象。
  • 相关阅读:
    C# 读写Excel(NPOI库)
    sql server存储过程回滚事务
    sql server的循环语句
    NopCommerce的autofac的理解
    Django——django连接mysql
    bootstrap
    常用模块杂碎小知识
    常识小知识——(1)
    Django——用户注册并展示出注册信息表案例
    Django——orm概述及在django中使用
  • 原文地址:https://www.cnblogs.com/konggg/p/8989137.html
Copyright © 2011-2022 走看看