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 相关文章推荐
仅利用30行Python代码来展示X算法
Apr 01 Python
Python中的XML库4Suite Server的介绍
Apr 14 Python
Python 基础知识之字符串处理
Jan 06 Python
谈谈python中GUI的选择
Mar 01 Python
python中的json总结
Oct 11 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
Python基础之函数的定义与使用示例
Mar 23 Python
Python numpy线性代数用法实例解析
Nov 15 Python
python实现串口通信的示例代码
Feb 10 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
学python需要去培训机构吗
Jul 01 Python
scrapy头部修改的方法详解
Dec 06 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
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
小程序实现多个选项卡切换
2020/06/19 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
我爱我家教学反思
2014/05/01 职场文书
给校长的建议书100字
2014/05/16 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
MySQL 全文检索的使用示例
2021/06/07 MySQL
MySQL8.0.18配置多主一从
2021/06/21 MySQL
vue3中provide && inject的使用
2021/07/01 Vue.js
swagger如何返回map字段注释
2021/07/03 Java/Android