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读取环境变量的方法和自定义类分享
Nov 22 Python
Python合并字符串的3种方法
May 21 Python
python线程、进程和协程详解
Jul 19 Python
python Crypto模块的安装与使用方法
Dec 21 Python
python爬取各类文档方法归类汇总
Mar 22 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
浅谈Python的list中的选取范围
Nov 12 Python
Python Pillow Image Invert
Jan 22 Python
对python中UDP,socket的使用详解
Aug 22 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 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
收音机指标测试方法及仪器
2021/03/01 无线电
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php实现数字补零的方法总结
2018/09/12 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
python正则表达式re模块详解
2014/06/25 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
金讯Java笔试题目
2013/06/18 面试题
酒店服务与管理毕业生求职信
2013/11/02 职场文书
小学生开学感言
2014/02/28 职场文书
就业协议书怎么填
2014/04/11 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
招股说明书范本
2014/05/06 职场文书
教师职位说明书
2014/07/29 职场文书
介绍信的写法
2015/01/31 职场文书
Elasticsearch 数据类型及管理
2022/04/19 Python