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编程中的反模式实例分析
Dec 08 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
Python版名片管理系统
Nov 30 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
一行python实现树形结构的方法
Aug 09 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 Python
python解析json数据
Apr 29 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 $_SERVER详解
2009/01/16 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[00:16]热血竞技场
2019/03/06 DOTA
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
Python操作json的方法实例分析
2018/12/06 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
python实现学生通讯录管理系统
2021/02/25 Python
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
安全生产月活动总结
2014/05/04 职场文书
2015年学校管理工作总结
2015/07/20 职场文书