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 FTP操作类代码分享
May 13 Python
python入门之语句(if语句、while语句、for语句)
Jan 19 Python
python通过索引遍历列表的方法
May 04 Python
深入理解Python对Json的解析
Feb 14 Python
Django与JS交互的示例代码
Aug 23 Python
Django中的ajax请求
Oct 19 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
python基础梳理(一)(推荐)
Apr 06 Python
python多线程下信号处理程序示例
May 31 Python
使用django实现一个代码发布系统
Jul 18 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 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
用mysql内存表来代替php session的类
2009/02/01 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
webpack打包js的方法
2018/03/12 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
一个超级简单的python web程序
2014/09/11 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
python中使用while循环的实例
2019/08/05 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
python自动化办公操作PPT的实现
2021/02/05 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
linux面试题参考答案(1)
2016/01/22 面试题
作弊检讨书1000字
2014/02/01 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
小学生思想品德评语
2014/12/31 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis