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列表(list)常用操作方法小结
Feb 02 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
深入理解Django的自定义过滤器
Oct 17 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
对python使用http、https代理的实例讲解
May 07 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
自定义django admin model表单提交的例子
Aug 23 Python
python中return如何写
Jun 18 Python
PyQt实现计数器的方法示例
Jan 18 Python
python 实现德洛内三角剖分的操作
Apr 22 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
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php学习之function的用法
2012/07/14 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
destoon数据库表说明汇总
2014/07/15 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
Python编码爬坑指南(必看)
2016/06/10 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
卖房协议书
2014/04/11 职场文书
煤矿安全承诺书
2014/05/22 职场文书
环境保护标语
2014/06/20 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
书法社团活动总结
2015/05/07 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python