python默认参数调用方法解析


Posted in Python onFebruary 09, 2020

这篇文章主要介绍了python默认参数调用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

最常见的一种形式是的是为一个或者多个参数指定默认值,这会创建一个可以使用比定义时允许的参数更少的参数调用的函数,

def ask_ok(prompt, retries=4, reminder='Please try again!'):
  while True:
    ok = input(prompt)
    if ok in ('y', 'ye', 'yes'):
      return True
    if ok in ('n', 'no', 'nop', 'nope'):
      return False
    retries = retries - 1
    if retries < 0:
      raise ValueError('invalid user response')
    print(reminder)

可以用以下三种调用方式:

  • ask_ok('Do you really want to quit?')
  • ask_ok('OK to overwrite the file?', 2)
  • ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

默认值在函数定义作用域有效,因此:

i = 5
def f(arg=i):
  print(arg)
i = 6
f()

打印为5

重要提醒:默认参数在定义时赋值,且仅仅赋值一次,当函数多次被调用,且并没有提供默认的参数值,就会从定义时赋值的地方取得值。即使函数中给默认参数重新赋值了,下次调用还是会从定义赋值的地方取得值!当默认参数为可变类型的list/dict等类型时,需要注意。

def f(a, L=[]):
  L.append(a)
  return L

print(f(1))
print(f(2,[]))
print(f(3))

输出为:

[1]
[2]
[1,3]

如果不想让默认值咋后续调用中累积,可以用如下写法:

def f(a, L=None):
  if L is None:
    L = []
  L.append(a)
  return L

假如默认参数是可变对象,函数内对参数的改变会影响原始对象,下次调用函数默认参数已经被更改

假如默认参数是不可变对象,函数内对参数赋值时,参数会引用内存其他地方,下次调用函数时还是会从定义时赋值的地方取值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍Python中利用生成器实现的并发编程
May 04 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
详解Python的循环结构知识点
May 20 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
使用pth文件添加Python环境变量方式
May 26 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 Python
Python中的 Set 与 dict
Mar 13 Python
Python集合操作方法详解
Feb 09 #Python
Python字符编码转码之GBK,UTF8互转
Feb 09 #Python
Python基础之字符串操作常用函数集合
Feb 09 #Python
python连接PostgreSQL过程解析
Feb 09 #Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 #Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 #Python
python 爬取疫情数据的源码
Feb 09 #Python
You might like
第十一节 重载 [11]
2006/10/09 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
js实现在字符串中提取数字
2013/11/05 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
python中二维阵列的变换实例
2014/10/09 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
Python上下文管理器全实例详解
2019/11/12 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Python range与enumerate函数区别解析
2020/02/28 Python
如何基于python实现不邻接植花
2020/05/01 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
招商经理岗位职责
2013/11/16 职场文书
先进集体获奖感言
2014/02/13 职场文书
人力资源作业细则
2014/03/03 职场文书
骨干教师培训方案
2014/05/06 职场文书
小学数学课题方案
2014/06/15 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
表彰大会新闻稿
2015/07/17 职场文书