python 默认参数相关知识详解


Posted in Python onSeptember 18, 2019

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

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

首先要理解可变对象与不可变对象可以参考http://blog.csdn.net/u014265088/article/details/52756442这篇文章

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

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

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

Python 相关文章推荐
Python中的ConfigParser模块使用详解
May 04 Python
Python中的自省(反射)详解
Jun 02 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
python实现多进程代码示例
Oct 31 Python
python爬取酷狗音乐排行榜
Feb 20 Python
Django如何使用jwt获取用户信息
Apr 21 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
基于Python正确读取资源文件
Sep 14 Python
pycharm配置QtDesigner的超详细方法
Jan 25 Python
python连接PostgreSQL数据库的过程详解
Sep 18 #Python
Python传递参数的多种方式(小结)
Sep 18 #Python
余弦相似性计算及python代码实现过程解析
Sep 18 #Python
python之yield和Generator深入解析
Sep 18 #Python
PyTorch预训练的实现
Sep 18 #Python
用python实现英文字母和相应序数转换的方法
Sep 18 #Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 #Python
You might like
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
PHP仿盗链代码
2012/06/03 PHP
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
Python 调用 zabbix api的方法示例
2019/01/06 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
python使用正则筛选信用卡
2019/01/27 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
python读写csv文件的方法
2019/08/13 Python
Pyqt5自适应布局实例
2019/12/13 Python
Python sep参数使用方法详解
2020/02/12 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
互动出版网:专业书籍
2017/03/21 全球购物
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
法律专业应届生自荐信范文
2014/01/06 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python