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 相关文章推荐
Python 字符串定义
Sep 25 Python
Python内置的字符串处理函数整理
Jan 29 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
Python实现发送QQ邮件的封装
Jul 14 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
python调用API实现智能回复机器人
Apr 10 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 Python
Python代码实现双链表
May 25 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
转换中文日期的PHP程序
2006/10/09 PHP
php下过滤HTML代码的函数
2007/12/10 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
python分割文件的常用方法
2014/11/01 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
园林施工员岗位职责
2013/12/11 职场文书
伊索寓言教学反思
2014/05/01 职场文书
工会文体活动总结
2015/05/07 职场文书
老干部座谈会主持词
2015/07/03 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
python实现简易名片管理系统
2021/04/11 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python
css弧边选项卡的项目实践
2023/05/07 HTML / CSS