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+selenium实现京东自动登录及秒杀功能
Nov 18 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
Python grpc超时机制代码示例
Sep 14 Python
搭建pypi私有仓库实现过程详解
Nov 25 Python
python编写扎金花小程序的实例代码
Feb 23 Python
教你利用Selenium+python自动化来解决pip使用异常
May 20 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 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读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
PHP实现变色验证码实例
2014/01/06 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
opencv+python实现均值滤波
2020/02/19 Python
Python unittest框架操作实例解析
2020/04/13 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
汉森批发:Hansen Wholesale
2018/05/24 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
《再见了,亲人》教学反思
2014/02/26 职场文书
教学质量评估实施方案
2014/03/17 职场文书
初中英语演讲稿
2014/04/29 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
Python爬虫基础初探selenium
2021/05/31 Python
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers