位置: 编程技术 - 正文

深入讲解Python函数中参数的使用及默认参数的陷阱(python函数入门)

编辑:rootadmin

推荐整理分享深入讲解Python函数中参数的使用及默认参数的陷阱(python函数入门),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python的函数和方法,python的函数和方法,python 函数,python函数csdn,python函数csdn,python函数详解,python函数csdn,python函数总结,内容如对您有帮助,希望把文章链接给更多的朋友!

C++里函数可以设置缺省参数,Java不可以,只能通过重载的方式来实现,python里也可以设置默认参数,最大的好处就是降低函数难度,函数的定义只有一个,并且python是动态语言,在同一名称空间里不能有想多名称的函数,如果出现了,那么后出现的会覆盖前面的函数。

看看结果:

注意: 必选参数在前,默认参数在后,否则Python的解释器会报错。建议:*当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。默认参数也有坑,看看下面的代码,先定义一个list,添加一个end再返回:

看看调用结果:

这里需要解释一下,Python函数在定义的时候,默认参数L的值就被计算出来了,即[]。此时L指向[]。所以如果L中的内容改变了,下次调用引用的内容也就不再是[]了。所以要牢记一点定义默认参数必须指向不可变对象!。

可变参数第一种方法,传入的参数为一个list或者tuple。

调用方式:

第二种方式,直接传入多个参数,函数内部会自动用一个tuple接收。

调用方式:

这个时候如果还想把一个list或者tuple里的数据传进去,可以这样:

关键字参数关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

调用示例:

参数组合在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。递归函数基本的也没什么可讲的,和Java/C++里一样,就是调用本身的一种。这里重点介绍一下尾递归优化。事实上尾递归和循环效果是一样的,很显然的一个优点那就是可以防止递归调用栈溢出。定义:在函数返回的时候调用自身,并且,return语句不能包含表达式。编译器或者解释器可以对其做优化,无论调用多少次,只占用一个栈帧,不会出现溢出的情况。举个简单的例子,以阶乘函数为例:

深入讲解Python函数中参数的使用及默认参数的陷阱(python函数入门)

如果传入的n很大,就可能会溢出,这是由于return n * fact(n - 1)引入了乘法表达式,就不是尾递归了。把代码改一下:

默认参数陷阱Python的函数定义提供了默认参数这个选择,使得函数的定义和使用更加的灵活,但是也会带来一些坑,例如之前的一个例子:函数定义:

调用函数的结果:

很明显这个与函数的定义初衷不符,用一句话解释就是:Default values are computed once, then re-used.为了深入研究这个问题,我们来看看另一个例子:

NOTE:稍微解释一下,所有默认值都存储在函数对象的__defaults__属性中,这是一个列表,每一个元素均为一个默认参数值。来看看输出结果:

简单分析一下输出结果:第1行在定义函数b(),即执行def语句,代码第7行def b(x=a()):的时候,这句话使用了默认参数,所以在定义的时候会计算默认参数x的值,这个时候会调用a(),所以打印出了a executed。第2~6行第一次执行循环,代码第行调用b()没有传递参数,使用默认参数,此时x=[],所以调用一次之后

输出结果为

第7~行第二次循环,代码第行调用b()没有传递参数,使用默认参数。注意:默认参数只会计算一次,也就是说那个内存区域就固定了,但是这个地址所指向的是一个list,内容可以改变,此时由于上一次调用x: [5],所以

输出结果为

第~行第二个循环语句,第一次循环,代码第行传入一个空的list,所以不使用默认参数,此时x=[],所以

输出结果为

第~行第二个循环语句,第二次循环,代码第行传入一个空的list,所以也不使用默认参数,此时仍然是x=[],所以

输出结果依然为

函数也是对象,因此定义的时候就被执行,默认参数是函数的属性,它的值可能会随着函数被调用而改变。其他对象不都是如此吗?牢记: 默认参数必须指向不变对象!代码改一下如下:

此时的输出结果看看是什么:

Python连接MySQL并使用fetchall()方法过滤特殊字符 来一个简单的例子,看Python如何操作数据库,相比Java的JDBC来说,确实非常简单,省去了很多复杂的重复工作,只关心数据的获取与操作。准备工作需要

Ubuntu下安装PyV8 这几天需要在使用PyV8来进行python与javascript的交互。之前在window下安装过,直接使用的exe安装的,也没有遇到什么问题。结果这次在Ubuntu安装遇到了不少

jupyter安装小结 前段时间一直使用pycharm写pandas程序,对于大数据开发而言,开发一般是走一步想一步,pycharm不适合。网上推荐使用jupyternotebook,它是一个web版的编辑器

标签: python函数入门

本文链接地址:https://www.jiuchutong.com/biancheng/384358.html 转载请保留说明!

上一篇:编写Python小程序来统计测试脚本的关键字(python入门小程序编写)

下一篇:Python连接MySQL并使用fetchall()方法过滤特殊字符

  • 固定资产的进项税额不允许抵扣的增值税属于
  • 增值税发票管理办法及细则
  • 企业一般纳税人是什么意思
  • 赔偿支出需要纳税调整吗
  • 税控减免税结转怎么操作
  • 收到应收的货款的会计分录
  • 付出的房屋押金可以退吗
  • 金融工具包括哪些及其法律特征
  • 分包挂靠认定依据
  • 每月交的社保什么时候到账
  • 一般纳税人增值税怎么做账务处理
  • 预支差旅费的会计科目
  • 产品研发的规则
  • 转回给挂靠单位的钱怎么做分录
  • 作业成本法的成本对象包括哪几个层次
  • 公司税务风险怎么解决
  • 企业其他应付款增加说明什么
  • 服务业成本会计分析
  • win7绝地求生帧数不稳定
  • 结转工资结算中各种代扣款项
  • 损益类科目在期末均需转入什么科目
  • 购买的房屋如何过户
  • 法人车无偿给公司使用合法吗
  • 汽车行业返利账务处理
  • 评估增值资产如何记账
  • 详解php比较操作过程
  • 电脑启用aero
  • 购进的包装物怎么入库
  • 认缴出资没到位违法吗
  • 房地产企业用开发产品对外投资涉及税收
  • php curd
  • 委托银行收款属于什么科目
  • 财政补助收入的支付制度包括
  • 不能运行windows10的设备有哪些
  • 海康工业相机彩色改黑白设置
  • 怎么开通公众号微信公众平台
  • 工程完工后的质保金怎么入账
  • 公司每年都有什么费用
  • 碧峰峡熊猫基地门票
  • 小程序开发必备的东西有哪些
  • php gzip压缩
  • php对接第三方支付教程
  • Selenium.Webdriver最新语法教程(附Chrome实例演示)
  • MS Excel: COUNTIF Function (WS)
  • 应纳税所得额100-300万税率
  • 属于长期险种的是
  • 收到的赠品怎么做分录
  • 如何理解ps中的黑透白不透
  • 百度编辑器使用方法
  • 电脑word怎么学
  • 投资性房地产由成本模式转为公允价值模式
  • 出货后90天付款
  • 少数股东权益贷方表示什么意思
  • 我国现行资源税主要采用什么税率
  • 个体户办营业执照网上怎么申请
  • 公司老板个人卡收支公司业务属于什么行为
  • 坏账准备的计提分录
  • 汽车以租代购可靠吗
  • 收到跨月的费用发票怎么入账
  • 注册资金多少对公司有什么影响
  • 汽车折旧年限及残值率是多少
  • 原始凭证填制要点在原始凭证上书写阿拉伯数字正确的有
  • sqlserver2008r2创建实例
  • macbookair numbers
  • linux中使用mkdir命令创建新的目录时
  • xp administrator隐藏如何找回解决方案
  • dghm.exe是什么程序
  • win7系统怎么更改存储位置
  • windows 打开文件命令
  • 常用的linux发行版本有哪些
  • win7系统怎么加入工作组
  • linux安装有哪几种方式
  • bat 批处理文件
  • 批处理基础知识
  • 增值税纳税申报操作流程
  • 主管税务机构
  • 股权转让查账重点查什么
  • 淄博市地方税务局
  • 地方税务局发票管理所
  • 印花税票有什么用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设