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 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
python时间整形转标准格式的示例分享
Feb 14 Python
python中Genarator函数用法分析
Apr 08 Python
使用Python的Django框架实现事务交易管理的教程
Apr 20 Python
python实现的简单抽奖系统实例
May 22 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
Python paramiko模块的使用示例
Apr 11 Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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日期时间运算汇总
2015/11/04 PHP
PHP CURL使用详解
2019/03/21 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
什么是Python变量作用域
2020/06/03 Python
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
精彩自我鉴定
2014/01/16 职场文书
保密工作实施方案
2014/02/24 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
业务内勤岗位职责
2014/04/30 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
2015年工程部工作总结
2015/04/30 职场文书
教师读书活动心得体会
2016/01/14 职场文书