python 默认参数相关知识详解


Posted in Python onSeptember 18, 2019

最常见的一种形式是的是为一个或者多个参数指定默认值,这会创建一个可以使用比定义时允许的参数更少的参数调用的函数,

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

首先要理解可变对象与不可变对象可以参考http://blog.csdn.net/u014265088/article/details/52756442这篇文章

假如默认参数是可变对象,函数内对参数的改变会影响原始对象,下次调用函数默认参数已经被更改

假如默认参数是不可变对象,函数内对参数赋值时,参数会引用内存其他地方,下次调用函数时还是会从定义时赋值的地方取值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 多线程抓取图片效率对比
Feb 27 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
Python如何生成树形图案
Jan 03 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
django 信号调度机制详解
Jul 19 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
python进程间通信Queue工作过程详解
Nov 01 Python
Python算法中的时间复杂度问题
Nov 19 Python
Python中使用gflags实例及原理解析
Dec 13 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
python日期与时间戳的各种转换示例
Feb 12 Python
python如何设置静态变量
Sep 07 Python
python连接PostgreSQL数据库的过程详解
Sep 18 #Python
Python传递参数的多种方式(小结)
Sep 18 #Python
余弦相似性计算及python代码实现过程解析
Sep 18 #Python
python之yield和Generator深入解析
Sep 18 #Python
PyTorch预训练的实现
Sep 18 #Python
用python实现英文字母和相应序数转换的方法
Sep 18 #Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 #Python
You might like
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
PDO::_construct讲解
2019/01/27 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
vue实现扫码功能
2020/01/17 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
初步解析Python中的yield函数的用法
2015/04/03 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
python实现简单登陆系统
2018/10/18 Python
python三方库之requests的快速上手
2019/03/04 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
Python tkinter模版代码实例
2020/02/05 Python
Django 再谈一谈json序列化
2020/03/16 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
教堂婚礼主持词
2014/03/14 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
金砖之国观后感
2015/06/11 职场文书
2016新年致辞
2015/08/01 职场文书
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS