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 常用string函数详解
May 30 Python
Python 迭代器与生成器实例详解
May 18 Python
python生成二维码的实例详解
Oct 29 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
python numpy存取文件的方式
Apr 01 Python
Django框架models使用group by详解
Mar 11 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
python中温度单位转换的实例方法
Dec 27 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 Python
如何用python识别滑块验证码中的缺口
Apr 01 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
ADODB类使用
2006/11/25 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
动态加载iframe
2006/06/16 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
python zip()函数的使用示例
2020/09/23 Python
个人应聘自我评价分享
2013/11/18 职场文书
好军嫂事迹材料
2014/01/15 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
土地租赁协议书
2015/01/29 职场文书
明确岗位职责
2015/02/14 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫