10 *args and **kwargs

*args**kwargs只是为了方便并没有强制使用它们.

当你不确定你的函数里将要传递多少参数时你可以用*args.例如,它可以传递任意数量的参数:

>>> def print_everything(*args):for count, thing in enumerate(args):
...         print '{0}. {1}'.format(count, thing)
...
>>> print_everything('apple', 'banana', 'cabbage')
0. apple
1. banana
2. cabbage

相似的,**kwargs允许你使用没有事先定义的参数名:

>>> def table_things(**kwargs):
...     for name, value in kwargs.items():
...         print '{0} = {1}'.format(name, value)
...
>>> table_things(apple = 'fruit', cabbage = 'vegetable')
cabbage = vegetable
apple = fruit

你也可以混着用.命名参数首先获得参数值然后所有的其他参数都传递给*args**kwargs.命名参数在列表的最前端.例如:

def table_things(titlestring, **kwargs)

*args**kwargs可以同时在函数的定义中,但是*args必须在**kwargs前面.

当调用函数时你也可以用***语法.例如:

>>> def print_three_things(a, b, c):
...     print 'a = {0}, b = {1}, c = {2}'.format(a,b,c)
...
>>> mylist = ['aardvark', 'baboon', 'cat']
>>> print_three_things(*mylist)a = aardvark, b = baboon, c = cat

就像你看到的一样,它可以传递列表(或者元组)的每一项并把它们解包.注意必须与它们在函数里的参数相吻合.当然,你也可以在函数定义或者函数调用时用*.

13 为什么 Python 不支持函数重载?而其他语言大都支持?

函数重载主要是为了解决两个问题。
1。可变参数类型。
2。可变参数个数。

另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。

好吧,那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。

那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。

好了,鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。

参考:https://www.zhihu.com/question/20053359

python相关基础相关推荐

  1. Python相关基础信息

    Python相关基础信息 python学习笔记 第一章 一.typora的安装与使用 1.常规使用:1.标题的使用--1.1鼠标点击段落手动操作 1.2使用#+空格(#数量和标题级别相关) 2.有序列 ...

  2. Python相关基础整理

    Python编程基础知识及语法 score=90 if score<60:print('不及格') elif score<70:print('中等') elif score<80:p ...

  3. python计算相关矩阵_Numpy使用大全(python矩阵相关运算大全)-Python数据分析基础2...

    //2019.07.10 python数据分析基础--numpy(数据结构基础) import numpy as np: 1.python数据分析主要的功能实现模块包含以下六个方面: (1)numpy ...

  4. Python培训基础教程都教哪些

    根据相关数据统计,目前学习Python技术的同学大多数是零基础,都是从其他行业转型来学习的,那么Python培训基础教程都教哪些呢?好不好学呢?来看看下面的详细介绍. Python培训基础教程都教哪些 ...

  5. python零基础入门教程视频下载-Python零基础入门学习视频教程全42集,资源教程下载...

    课程名称 Python零基础入门学习视频教程全42集,资源教程下载 课程目录 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小 ...

  6. python基础教程视频教程百度云-Python零基础入门学习视频教程全42集百度云网盘下载...

    课程简介 Python零基础入门学习视频教程全42集百度云网盘下载 课程目录 042魔法方法:算术运算 041魔法方法:构造和析构 040类和对象:一些相关的BIF 039类和对象拾遗 038类和对象 ...

  7. python编程基础与应用-有哪些适合零编程基础的人学习Python的书?

    筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. python现在的主流版本是3.7(有明显性能提升,强烈推荐) 3.6, 不基于这两个或者更新版本的书,慎重选择.很多库已经不提供py ...

  8. python从零基础到项目实战怎么样-2018完整Python零基础到项目精通的学习书籍

    Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏.Python编程语言的流行直线上升,如何学习好Py ...

  9. python绘图实例-Python matplotlib基础绘图函数示例

    原标题:Python matplotlib基础绘图函数示例 Pyplot基础图标函数: 函数 说明 plt.plot(x,y,fmt,-) 绘制一个坐标图 plt.boxplot(data,notch ...

最新文章

  1. Java项目:药店信息管理系统(java+SSM+JSP+layui+maven+mysql)
  2. 面试题:mysql 表删除一半数据,B+树索引文件会不会变小???
  3. 大年初五,Python、Go、C...你最爱用哪种语言?
  4. uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列
  5. 详解yarn的resource manager组件
  6. 列举学完Java开发后能做的一些事
  7. Python中的网络编程之TCP
  8. SuperSlide
  9. 丁香园在语义匹配任务上的探索与实践
  10. USACO-Section2.3 Money Systems
  11. sql limit 子句_具有并行性SQL Server TOP子句性能问题
  12. HDU2544 最短路【Dijkstra算法】
  13. 2022最全知识点——RF接口自动化框架项目实战
  14. Apizza在线接口调试文档工具如何方便的设置线上线下环境变量
  15. Golang Time互转秒、毫秒
  16. Modelica生态工具开发利器——MWorks.SDK 2.0
  17. 记一次虚拟机无妨访问网络的问题-Failed to start LSB:Bring up/down networking
  18. java如何开发视频软件_使用JAVA编写视频播放器
  19. 【Vivado那些事儿】强制修改打开Vivado工程使用的Vivado版本
  20. jQuery事件-鼠标事件

热门文章

  1. 《跟二师兄学Nacos吧》EXT-01篇 看看Nacos是怎么活学活用简单工厂模式的!
  2. 南京林业大学全国计算机二级,南京林业大学2017年3月全国计算机等级考试报名通知...
  3. php 获取时间 yyyyMMddHHmmssSSS
  4. 苹果手机静音还有快门声怎么解决?短短1分钟,轻松解决
  5. 小学一年级语文考试试题【22】
  6. 全球人才的纳斯达克SelfSell潜入英法、瑞士、新加坡“偷人”?
  7. {大揭秘}今天才知道亚马逊网店还可以这么玩
  8. qq炫舞摘经验秒级计算机,QQ炫舞秒升计划活动地址及活动奖励一览
  9. python 表情包下载器,轻松下载上万个表情包、斗图不用愁
  10. 学习java自我激励