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基础教程之面向对象的一些概念
Aug 29 Python
python自定义解析简单xml格式文件的方法
May 11 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
Python如何判断数独是否合法
Sep 08 Python
Python Socket编程详细介绍
Mar 23 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 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 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
详解vue中axios的封装
2018/07/18 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python 备份程序代码实现
2017/03/06 Python
python的变量与赋值详细分析
2017/11/08 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
python怎么判断模块安装完成
2020/06/19 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
外贸业务员的岗位职责
2013/11/23 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
党员年度个人总结
2015/02/14 职场文书
出生证明范本
2015/06/15 职场文书
团队执行力培训心得体会
2015/08/15 职场文书