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获取文件扩展名的方法
Jul 06 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
Python进阶之尾递归的用法实例
Jan 31 Python
python如何读写json数据
Mar 21 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
Apr 03 Python
Python生成器next方法和send方法区别详解
May 30 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
python实现暗通道去雾算法的示例
Sep 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
什么是短波收听SWL
2021/03/01 无线电
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
javascript动画浅析
2012/08/30 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Android分包MultiDex策略详解
2017/10/30 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
django迁移数据库错误问题解决
2019/07/29 Python
python将音频进行变速的操作方法
2020/04/08 Python
Python新手学习函数默认参数设置
2020/06/03 Python
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
个人作风剖析材料
2014/02/02 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
市级文明单位申报材料
2014/05/07 职场文书
暑期学习心得体会
2014/09/02 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
十个Python自动化常用操作,即拿即用
2021/05/10 Python
如何使用PyCharm及常用配置详解
2021/06/03 Python
Go语言入门exec的基本使用
2022/05/20 Golang
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers