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类型强制转换long to int的代码
Feb 10 Python
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
python实现电子产品商店
Feb 26 Python
PyQt5 多窗口连接实例
Jun 19 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
Python使用mitmproxy工具监控手机 下载手机小视频
Apr 18 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
php对数组排序代码分享
2014/02/24 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
基于python实现雪花算法过程详解
2019/11/16 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
Python join()函数原理及使用方法
2020/11/14 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
django中ImageField的使用详解
2020/12/21 Python
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
编写strcpy函数
2014/06/24 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
趣味活动策划方案
2014/02/08 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python