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 os模块学习笔记
Jun 21 Python
python在不同层级目录import模块的方法
Jan 31 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
详解Python sys.argv使用方法
May 10 Python
pandas取出重复数据的方法
Jul 04 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
pandas apply多线程实现代码
Aug 17 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
PyMongo 查询数据的实现
Jun 28 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
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
JavaScript事件列表解说
2006/12/22 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
详解Python进程间通信之命名管道
2017/08/28 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
python梯度下降法的简单示例
2018/08/31 Python
python矩阵的转置和逆转实例
2018/12/12 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
物流管理应届生求职信
2013/11/07 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏