Python 中使用 def 来定义函数。依次是 def 函数名、括号、括号中的参数及结尾的冒号,另起一行缩进写函数体,函数的返回值用 return 语句返回。

如:

def func(参数):

函数体

return

调用函数时会对传入的参数进行自动检查,包括参数的类型及参数的数量,如果不符合要求会抛出 TypeError 异常。

参数的类型可分为:

1、必选参数

2、默认参数

3、可变参数

4、关键字参数

函数中的参数顺序一定要按以上顺序排列。

下面通过示例来更好的理解函数的各类参数:

定义函数:

>>> def func(hostname,os='CentOS',*role,**other):

... print('Hostname : %s\nOS : %s\nRole : %s\nOther : %s'%(hostname,os,role,other))

...

>>>

其中 hostname 为必选参数,os为默认参数,role为可变参数,other为关键字参数。

*和**分别为可变参数和关键字参数前缀,可变参数类型为列表或元组,关键字参数类型为字典。

演示:

1、

>>> func('web1')

Hostname : web1

OS : CentOS

Role : ()

Other : {}

>>>

调用之前定义的 func 函数,并传入'web1'必选参数。在输出的结构中 OS 显示为默认的 CentOS。

2、

>>> func('web2','ubuntu')

Hostname : web2

OS : ubuntu

Role : ()

Other : {}

>>>

调用之前定义的 func 函数,并传入'web2'必选参数,默认参数用 'ubuntu' 替换。

3、

>>> func('db-1','redhat','MySQL','Redis')

Hostname : db-1

OS : redhat

Role : ('MySQL', 'Redis')

Other : {}

>>>

调用之前定义的 func 函数,并传入必选参数,默认参数,以及两个可变参数。可变参数类型可以为列表或元组,如下:

>>> func('db-1','redhat',*['MySQL','Redis'])

Hostname : db-1

OS : redhat

Role : ('MySQL', 'Redis')

Other : {}

>>>

>>> func('db-1', 'redhat',*('MySQL', 'Redis'))

Hostname : db-1

OS : redhat

Role : ('MySQL', 'Redis')

Other : {}

>>>

当传入的可变参数是列表或元组时要在前加上*,对应的结果输出为元组。

4、

>>> func('db-3', 'redhat','MySQL', 'Redis', ip='172.16.100.3')

Hostname : db-3

OS : redhat

Role : ('MySQL', 'Redis')

Other : {'ip': '172.16.100.3'}

>>>

>>> func('db-3', 'redhat','MySQL', 'Redis', ip='172.16.100.3', m_port=3307)

Hostname : db-3

OS : redhat

Role : ('MySQL', 'Redis')

Other : {'ip': '172.16.100.3', 'm_port': 3307}

>>>

>>> func('db-3', 'redhat','MySQL', 'Redis', **{'ip' : '172.16.100.3', 'm_port' : 3307})

Hostname : db-3

OS : redhat

Role : ('MySQL', 'Redis')

Other : {'ip': '172.16.100.3', 'm_port': 3307}

>>>

调用之前定义的 func 函数,并传入必选参数,默认参数,两个可变参数及关键字参数。

当传入的关键字参数是字典时要在前加上**,对应的结果输出为字典。

当然以上测试中的列表、元组及字典可以先定义再引用:

>>> db_3_o={'ip' : '172.16.100.3', 'm_port' : 3307}

>>> db_3_r=['MySQL', 'Redis']

>>> func('db-3', 'redhat',*db_3_r, **db_3_o)

Hostname : db-3

OS : redhat

Role : ('MySQL', 'Redis')

Other : {'ip': '172.16.100.3', 'm_port': 3307}

>>>

python 主函数传参_Python函数传参详解相关推荐

  1. python字符串处理编程实例_Python字符串处理实例详解

    干货大礼包!21天带你轻松学Python(文末领取更多福利) 点击查看课程视频地址 本课程来自于千锋教育在阿里云开发者社区学习中心上线课程<Python入门2020最新大课>,主讲人姜伟. ...

  2. python成员变量和全局变量_python 全局变量和局部变量详解笔记

    python,数据分析,有相关问题欢迎留言交流. 一.问题引入 在写爬虫进行批量命名时,比如说常用的解析网页时 url这个变量就是跨函数的.涉及到全局变量和局部变量的设置. 二.全局变量与局部变量的区 ...

  3. python定时任务每月1号_Python 定时任务框架 APScheduler 详解

    APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...

  4. 以python程序调用的系统_python 系统调用的实例详解

    python 系统调用的实例详解 本文将通过两种方法对python 系统调用进行讲解,包括python使用CreateProcess函数运行其他程序和ctypes模块的实例, 一 python使用Cr ...

  5. python全栈之巅_Python 迭代器、生成器详解 - Python全栈之巅

    迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 使用迭代器的优点 对于 ...

  6. python代码缩进和冒号_Python缩进和冒号详解

    对于Python而言代码缩进是一种语法,Python没有像其他语言一样采用{}或者begin...end分隔代码块,而是采用代码缩进和冒号来区分代码之间的层次. 缩进的空白数量是可变的,但是所有代码块 ...

  7. python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业

    作者:Ben,著有<Python数据科学:技术详解与商业实践>.<用商业案例学R语言数据挖掘>.<胸有成竹-数据分析的SAS EG进阶>作者.2005年进入数据科学 ...

  8. python处理excel实例编程_python读取Excel实例详解

    本文实例为大家分享了python读取Excel实例的具体代码,供大家参考,具体内容如下 1.操作步骤: (1)安装python官方Excel库-->xlrd (2)获取Excel文件位置并读取 ...

  9. python语言案例教程 单元测试_python单元测试unittest实例详解

    本文实例讲述了python单元测试unittest用法.分享给大家供大家参考.具体分析如下: 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情 ...

  10. python外部库是什么_Python 常用外部模块详解

    RabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统,他遵循Mozilla Public License开源协议,MQ全称为Message Queue,消息队列(MQ) ...

最新文章

  1. (已解决)AttributeError: ‘PrecisionRecallDisplay‘ has no attribute ‘from_predictions‘以及查看sklearn版本
  2. Gulp 自动化的项目构建工具
  3. [分享]极富挑战性的大公司面试的智力题
  4. MongoDB学习笔记~地图坐标的支持与附近点的查找
  5. 核心期刊 CA JST CSCD 含金量_期刊评介|《仪表技术与传感器》科技期刊的阿玛尼,只管投就对了!...
  6. iOS----------The app's Info.plist must contain an NSPhotoLibraryUsageDescription key
  7. hive 语句总结_Hive常用命令总结
  8. Python 学习笔记 - 作用域小知识
  9. android列表项点击事件,Android 开发 tips(2):监听 Listview 列表项点击事件
  10. eclipse 添加jar (servlet api)
  11. [20150228]Delayed Block Cleanout 2.txt
  12. SWFUpload批量上传插件
  13. 百度地图绘制自定义区域
  14. CSS3 filter滤镜详解
  15. Java地位无可动摇的12个原因
  16. 【编程题】构造两两相邻数之和为奇数的矩阵
  17. For 循环优化,提升效率
  18. 高清视频文件丢了怎么恢复丨电脑下载好的缓存数据
  19. LeetCode 1278. 分割回文串 III
  20. CSS+DIV-设置图片效果

热门文章

  1. 【锐捷】DHCP配置
  2. SYN6288语音合成模块
  3. Flash游戏开发性能优化
  4. 打开计算机 访问不到d盘,电脑无法访问d盘的解决方法
  5. Android事件机制深入探讨(一)
  6. Idea查看 破解码
  7. Git使用小记(Windows)
  8. 项目管理 - 变更控制流程
  9. 虚拟机中无法使用鼠标滚轮(罗技鼠标)
  10. 在互联网大厂,产品经理需要做的具体流程