函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果。通过使用函数,可以提高代码的重复利用率。本文主要介绍Python函数的定义、调用和函数参数设置方法。

函数的定义

Python函数定义非常简单,使用关键字def定义。函数必须先定义后使用。Python函数定义的格式如下所示:

def函数名(参数1,参数2,...):

语句块return [表达式]

函数名可以是字母、数字或下划线组成的字符串,但是不能以数字开头。函数的参数放在一对圆括号中。参数的个数可以有一个或多个,参数之间用逗号隔开。括号后面以冒号结束,冒号下面就是函数的主体。函数的返回使用return语句,return [表达式]结束函数。如果return后面不带表达式,表示返回None。实例如下:

defpower(x, n):

s= 1

while n >0:

n= n - 1s= s *xreturn s

函数调用

函数调用采用函数名加一对圆括号的方式,圆括号内的参数是传递给函数的具体指。函数调用格式如下:

函数名(实参1,实参2...)

实际参数必须与形式参数一一对应,否则将报错。具有默认值的参数例外。上述power()函数的调用方法如下:

power(3,2)

函数的参数

函数定义的时参数名和位置就已经确定。使用函数时只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

(1)位置参数

位置参数指的是调用函数时根据函数定义的参数位置来传递参数。上述power()函数的x,n参数就表示参数。调用时可以直接通过传参嗲用。函数调用时传入参数个数必须与位置参数个数一致,否则会报错。实例如下:

#-*- coding:utf-8 -*-

defpower(x, n):

s= 1

while n >0:

n= n - 1s= s *xreturnsprint "power(3, 2) =", power(3, 2) #传入参数个数与定义的位置参数一致。

print "power(3) =", power(3) #传入参数个数与定义的位置参数不一致。报错"TypeError: power() takes exactly 2 arguments (1 given)"

(2)默认参数

函数的参数支持默认值。当某个参数没有传递实际的值时,函数将使用默认参数计算。特别注意的是,在函数定义和调用时,所有位置参数必须出现在默认参数前。修改power函数代码如下:

def power(x, n=2):

s= 1

while n >0:

n= n - 1s= s *xreturnsprint "power(3) =", power(3) #不带参数n调用函数,n赋默认值为2

print "power(3, 2) =", power(3, 2) #参数n指定值为2调用函数

print "power(3, 3) =", power(3, 3) #参数n指定值为3调用函数

代码运行结果如下:

power(3) = 9power(3, 2) = 9power(3, 3) = 27

(3)可变参数

可变参数就是值允许调用函数时传入参数个数是可变的,可以是1个,2个或者多个,这些可变参数在函数调用时自动组装为一个tuple。因此在函数内部获取可变参数时,参数接收到的是一个元组。可变参数在函数定义时的格式如下:

def 函数名(*args):

....return 变量或表达式

可变参数在函数定义时对形参前加一个星号*,如*args。实例如下:

def fun1(x,y,*args):print "x =", xprint "y =", yprint "type(*args) =", type(args) #可变参数args在函数内部获取到的类型print "args =", args #可变参数args获取的传入的值

sum=0for i inargs:

sum+=iprint "sum =", sum

fun1('A', 'B', 1, 2, 3, 4)

代码运行输出结果如下:

x =A

y=B

type(*args) = args= (1, 2, 3, 4)

sum= 10

通过上述实例,我们知道。可变参数args可以传入任意数量参数。函数内部获取可变参数的类型为tuple。

(4)关键参数

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。这是不同于可变参数的地方。函数定义时使用关键参数的格式如下:

def 函数名(**kw):

....return 变量或表达式

关键参数在函数定义时对形参前加两个星号**,如**kw。实例如下:

def fun1(x,y,**kw):print "x =", xprint "y =", yprint "type(**kw) =", type(kw)print "kw =", kwfor key, value inkw.items():printkey, value

fun1('A', 'B', num1=1, num2=2, num3=3, num4=4)

代码运行结果如下:

x =A

y=B

type(**kw) = kw= {'num4': 4, 'num1': 1, 'num2': 2, 'num3': 3}

num44num11num22num33

从上述结果可以知道,函数内部获取的关键参数的类型为字典(dict),使用时以字典形式操作即可。

函数的嵌套

函数的嵌套是指在函数的内部调用其他函数。C、C++只允许在函数体内部嵌套。而Python不仅支持函数体内嵌套,还支持函数定义的嵌套。通过2个实例分别查看,如下

(1)函数体内嵌套

defsum(a, b):return a +bdefsub(a, b):return a -bdeffun1():

x=1y=2m= 2n= 4

return sum(x, y) *sub(m, n)print fun1()

(2)函数定义的嵌套。不推荐使用,代码可读性、可维护都不好。

deffun1():

x=1y=2m= 2n= 4

defsum(a, b):return a +bdefsub(a, b):return a -breturn sum(x, y) *sub(m, n)print fun1()

匿名函数lambda

lambda函数用于创建一个匿名函数,函数名未和标识符进行绑定。使用lambda函数可以返回一些简单的运算结果。lambda函数的格式如下所示:

lambda 变量1,变量2,...: 表达式

其中,变量列表用于表达式的计算。lambda属于函数,因此变量列表后需要一个冒号。通常把lambda赋值给一个变量,变量就可以作为函数使用。另外,lambda中只能使用表达式,不能使用判断、循环等多重语句。常用实例如下:

>>> list1 = [3,5,-4,-1,0,-2,-6]>>> sorted(list1, key=lambda x: abs(x))

python系统提供构造函数传入参数_[ Python入门教程 ] Python函数定义和使用相关推荐

  1. python系统提供构造函数传入参数_python类变量与构造函数的使用

    类变量:可在类的所有实例之间共享的变量 实例类对象:类的实例是调用类对象来创建的.如:par = Parent(),par就是类Parent的一个实例类对象. 实例变量(成员变量):同一个类对象可以创 ...

  2. go 协程回调函数 传入参数_ECMAScript 6 入门教程—Generator 函数的异步应用

    作者 | 阮一峰异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是"单线程"的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Gener ...

  3. python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路

    原标题:你所不知道的Python|函数参数的演进之路 函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的 ...

  4. python从外部传入参数_从另一个Python脚本运行一个Python脚本,并传入参数 - python...

    我想从另一个Python脚本运行一个Python脚本.我想像使用命令行一样传递变量. 例如,我将运行我的第一个脚本,该脚本将遍历值列表(0.1.2.3),并将其传递给第二个脚本,依次为script2. ...

  5. python调用exe程序 传入参数_关于使用c#调用python脚本文件,脚本文件需要传递参数...

    最近工作中需要干这个事,网上搜了搜资料,改了改,基本是这样 建立一个控制台应用程序: 比如 加入我在命令行直接调用python脚本,命令为 y安装python后,添加环境变量,path下面,加入路径. ...

  6. python黑科技自动p图_大神级Python工程师是怎么P图的,带你用Python玩转P图

    群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流 1.PIL:Python影像库 PIL或者Python Imaging Library ...

  7. keil obj 文件 结构_【Python】数据分析前的入门教程 Python For Everybody P2:数据结构...

    这是密歇根大学课程Python For Everybody总结的P2部分.课程总结P1部分的地址如下: P1: 零基础程序设计(Python 入门) carolinezhq:[Python]数据分析前 ...

  8. 视频教程-Python零基础入门教程-Python

    Python零基础入门教程 从2012年从事互联网至今有7年软件编程经验,曾任职国内北京互联网公司,中南林业大学授课Python 现任逻辑教育Python课程负责人,精通Python语言,精通人工智能 ...

  9. [入门教程](python numpy入门)

    [入门教程](python numpy入门) NumPy NumPy是一个开源的Python科学计算基础库,包含 •一个强大的N维数组对象ndarray •广播功能函数 •整合C/C++/Fortra ...

最新文章

  1. 如何用 OpenCV、Python 和深度学习实现面部识别?
  2. 为了给你们讲清楚数据库中间件有哪些,我也是拼了!
  3. [学习笔记]Segment Tree Beats!九老师线段树
  4. 操作系统 :银行家算法的实现(C++)
  5. python学习之路 一 :编程语言介绍
  6. Jquery 常用总结
  7. 博客杂志CMS模板,wpdx3.6破解版源码WordPress主题
  8. Scikit-learn 秘籍 翻译完成
  9. Kali Linux 无线渗透测试入门指南 第九章 无线渗透测试方法论
  10. mock()java,关于java:@ Mock,@ MockBean和Mockito.mock()之间的区别
  11. 单次目标检测器之YOLO I
  12. 最流行的 6 款 Python 解释器
  13. 关于数位板怎么用,电脑绘画入门篇
  14. cad图形不见了怎么办_CAD软件常见问题解答,CAD中的工具栏不见了怎么办?如何清理图形...
  15. mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  16. 发那科syst178_发那科系统报警大全
  17. EXCEL 快捷键集合
  18. 58同城一面【前端】
  19. 国际高性能计算和人工智能咨询委员会公布第五届亚太区 HPC-AI竞赛结果
  20. ELK Stack在多项目情况下filebeat与logstash的多文件配置

热门文章

  1. 清华团队曝光「新冠病毒」3D高清结构照!这个恶魔已感染1亿地球人
  2. 《Linux 命令行大全》. pdf 正式发布啦!
  3. CPU上跑到 100 fps 的高精度PyTorch人脸特征点检测库
  4. 表单提交、页面注册案例
  5. Linux之绝对路径和相对路径
  6. OpenCV卡尔曼滤波介绍与代码演示
  7. 计算机视觉以及它在商业中是如何应用的?
  8. 基于相机和激光传感器的车顶视觉检测系统
  9. vivado 2018与modelsim的联合仿真
  10. 下载、安装、配置 java jdk1.8