位置参数
    调用函数时,传入函数的参数,按照位置顺序依次赋值给函数的参数。
#计算乘方的函数       
        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
       
使用不可变对象能够减少由于修改数据导致的错误,由于对象不变,多任务环境下同时读取对象也不需要加锁,可以同时进行读动作。在编写程序时,如果可以设计为不变对象,就尽可能设计成不变对象。

Day5 - 03 函数的参数-位置参数和默认参数的更多相关文章

  1. python函数中的位置参数、默认参数、关键字参数、可变参数区别

    一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_d ...

  2. python函数参数类型:位置参数、默认参数、动态参数、关键字参数

    1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 ...

  3. python的位置参数、默认参数、关键字参数、可变参数区别

    一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_d ...

  4. Python虚拟机函数机制之位置参数的默认值(五)

    位置参数的默认值 在Python中,允许函数的参数有默认值.假如函数f的参数value的默认值是1,在我们调用函数时,如果传递了value参数,那么f调用时value的值即为我们传递的值,如果调用时没 ...

  5. [python][oldboy]关键字参数和位置参数,默认参数,可变长参数(无名,有名)

    关键字参数和位置参数是在函数调用的时候定义 关键字参数是以键-值对出现,无序,多一个不行,少一个不行 位置参数,有序,多一个不行,少一个不行 混搭:所有位置参数必须在关键字参数的左边 默认参数是在函数 ...

  6. python函数参数中带有默认参数list的坑

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 def f(x,l=[]): for i in range(x): l.append(i*i) print(l) print( ...

  7. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  8. python3 函数的形参、实参、位置参数、默认参数、关键字参数以及函数的递归

    python 版本 3.5 #Author by Andy#_*_ coding:utf-8 _*_def func(x,y=2): print('我是形参%s'%x) print('我是默认参y-- ...

  9. Python之在函数中使用列表作为默认参数

      本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数.   我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使 ...

随机推荐

  1. CSS属性(CSS盒子模型)

    1.CSS盒子模型 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&q ...

  2. 2020CCPC长春题解 I - Kawaii Courier

    2020CCPC长春题解 I - Kawaii Courier 题目大意:给一个树,让你求每个节点走到根节点的期望的d*x^d,d为走过的边个数.走法是每次随机等概率走到相邻的点. 题目分析: 相对于 ...

  3. 想要看懂鸿蒙OS源码?朱老师带你从框架分析开始

    HarmonyOS V2.0是面向轻量级设备的鸿蒙L0/L1级设备端操作系统,于2020.9开源至今已有2个多月,但是很多同学在学习鸿蒙源码时仍然感觉难以下手,找不到突破口. 2020.11.25(本 ...

  4. php 数据转储Excel文件

    1.下载PHPExcel文件 下载地址:https://www.php.cn/xiazai/leiku/1491 2.在php写入以下代码,执行即可 $arr = Db::name('user')-& ...

  5. cookie和session的关系和区别

    1.为什么会用到cookie和session 由于http请求是一种无状态的请求,一旦数据交换完毕便会关闭请求,再次交换数据则要再次发起请求,所以服务端无法通过连接追踪会话,确定用户身份,而cooki ...

  6. 软链接mongo

    ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo

  7. FL Studio附加快捷面板讲解

    在FL Studio功能面板中有一个类似于快捷面板功能的面板.你们看,它们连名字都很像,叫做附加快捷面板.该面板主要由撤销.另存为.转换为音频文件(导出).一键录音.查看工程信息和帮助.为了帮助大家知 ...

  8. Boom 3D支持的音乐都有什么格式

    Boom 3D作为一款专业的3D环绕音效软件,支持多种音频.视频播放格式,除了常用的MP3.WMA.WAV音频格式外,Boom 3D还支持FLAC.AAC这些比较高级的音频格式.同时,Boom 3D还 ...

  9. Centos7 安装python3 pip3

    Centos7 安装python3 pip3 安装python3.6 安装 python36   yum install python36 -y   查看版本 安装完成,查看一下python版本是否正 ...

  10. 6. Git工作流

    6.1 git工作流理解 在项目开发过程中使用 Git 的方式 6.2 git工作流分类 集中式工作流 像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体.所有修改都提交到 Maste ...