python默认参数调用方法解析


Posted in Python onFebruary 09, 2020

这篇文章主要介绍了python默认参数调用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

最常见的一种形式是的是为一个或者多个参数指定默认值,这会创建一个可以使用比定义时允许的参数更少的参数调用的函数,

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

假如默认参数是可变对象,函数内对参数的改变会影响原始对象,下次调用函数默认参数已经被更改

假如默认参数是不可变对象,函数内对参数赋值时,参数会引用内存其他地方,下次调用函数时还是会从定义时赋值的地方取值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
Python实现全角半角转换的方法
Aug 18 Python
pandas数据分组和聚合操作方法
Apr 11 Python
tensorflow 获取变量&amp;打印权值的实例讲解
Jun 14 Python
Python中修改字符串的四种方法
Nov 02 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
python pygame实现五子棋小游戏
Oct 26 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
python如何实现单链表的反转
Feb 10 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 Python
Python集合操作方法详解
Feb 09 #Python
Python字符编码转码之GBK,UTF8互转
Feb 09 #Python
Python基础之字符串操作常用函数集合
Feb 09 #Python
python连接PostgreSQL过程解析
Feb 09 #Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 #Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 #Python
python 爬取疫情数据的源码
Feb 09 #Python
You might like
sae使用smarty模板的方法
2013/12/17 PHP
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
python中如何打包用户自定义模块
2020/09/23 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
《商鞅南门立木》教学反思
2014/02/16 职场文书
可口可乐广告词
2014/03/20 职场文书
人事任命书怎么写
2014/06/05 职场文书
横幅标语大全
2014/06/17 职场文书
法制宣传标语
2014/06/23 职场文书
培训感想范文
2015/08/07 职场文书