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中from module import * 的一个坑
Jul 20 Python
Python制作爬虫采集小说
Oct 25 Python
微信跳一跳游戏python脚本
Apr 01 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
selenium+python实现自动化登录的方法
Sep 04 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
浅谈Python基础—判断和循环
Mar 22 Python
Python中如何导入类示例详解
Apr 17 Python
django框架模板语言使用方法详解
Jul 18 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
如何利用pycharm进行代码更新比较
Nov 04 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多种序列化与反序列化的方法
2013/06/06 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
实例讲解PHP表单
2020/06/10 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
理理Vue细节(推荐)
2019/04/16 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
python中去空格函数的用法
2014/08/21 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python爬虫之自制英汉字典
2019/06/24 Python
python关于变量名的基础知识点
2020/03/03 Python
Python装饰器用法与知识点小结
2020/03/09 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
python实现学生通讯录管理系统
2021/02/25 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
招聘单位介绍信
2014/01/14 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
英文自荐信范文
2015/03/25 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS