函数

6 函数

6.1 简介

函数是被定义的完成指定功能的可被反复使用的代码段。比如我们想实现一个功能,想知道当前的时间,格式是:年-月-日 时:分:秒。我们就可以这么写:

import time

def getCurrentTime():

return time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))

然后调用它

print("当前系统时间是:\t"+getCurrentTime())

结果是:

2017-03-08 22:40:20

6.2 函数的定义

通过以上例子我们不难发现,函数一般有以下特征:

a) 函数要先定义再使用

b) 函数可以被反复调用

c) 函数一般都带有返回值,代表它完成的功能。返回的可以是个字符串、列表、字典当然也可是是空,也就是None。

函数定义时一般以def关键字开始,空格之后起个函数名字,然后紧跟个括号,括号里可以指定参数,然后是冒号,这个冒号后面的缩进行就是函数体(即函数真正的实现的功能)。函数一般是有返回值即要return的,如果不加则返回None。

6.3 函数的参数

关于函数的参数,一般我们按照形参和实参来区分。这里先定义一个取长方形面积的函数,然后我们再调用它,结合整个过程来说明下。

defgetRectangleArea(length,breadth):

return length*breadth

len = 6

width=4

print("当前长方形的面积是:\t"+str(getRectangleArea(len, width))+"平方米")

结果:

当前长方形的面积是: 24平方米

分析下代码:这里len和width是在函数外定义的变量也就是实参,即函数getRectangleArea被调用时传过来的值,而函数内部的length和breadth则是形参,当函数被调用时len和width分别将值拷贝给了length和breadth,这两个形参参与函数体里的乘运算,将length*breadth返回。函数执行后形参length、breadth将不复存在。而实参len和width还是保留原来的值。

形参、实参可以通俗的这么理解:实参是调用时参数的实际值而形参则是一种抽象的参数。比如这里我们抽象出两个参数长和宽,那么无论什么样的长方形都可以套用长乘以宽这个公式计算面积。即实参是可变的,而形参是固定的抽象值。

按照函数的使用情况,一般将将函数的参数分为以下几类:

Ø  必须参数

Ø  关键字参数

Ø  默认参数

Ø  不定长参数

6.3.1 必须参数

即参数必须得传的,如上例,如果我们像下面这样执行时会报缺少参数的错误。

print("当前长方形的面积是:\t"+str(getRectangleArea(len))+"平方米")

错误提示:

TypeError:getRectangleArea() missing 1 required positional argument: 'breadth'

原因很简单,这里我们定义函数getRectangleArea时指明了需要2个参数,但是我们调用时只给了1个参数,所以报错了。

6.3.2 关键字参数

关键字参数是函数调用时,在函数括号里对参数进行赋值时可以通过参数名自动匹配,而不需严格函数定义的参数顺序。这里需要实参和形参的名字要严格一致。所以getRectangleArea我们还可以这么调用:

#为了更好的说明关键字参数,这里新增我们打印出形参的值的功能。

def getRectangleArea(length,breadth):

return "形参里的长度是:"+str(length)+"\t形参里的宽度是"+str(breadth)+"\n当前长方形的面积是:"+str(length*breadth)

#注意这里的参数传递并不是严格按照函数定义的length在前,breadth在后。Python会自动通过参数名匹配到函数里的形参。

print(getRectangleArea(breadth=4,length=6))

结果:

 

内部的长度是:6  内部的长度是4

当前长方形的面积是:24

但是如果我们使用关键字函数时调用参数里的名字不跟形参一致则会不合法的关键字参数的报错。比如调用时这么写:

print(getRectangleArea(breadth1=4,length=6))

TypeError:getRectangleArea() got an unexpected keyword argument 'breadth1'

6.3.3 默认参数

函数被调用时,如果没对参数指定可以使用函数定义里的默认值。

#这里给宽度定义个默认值是2

defgetRectangleArea(length,breadth=2):

return "形参里的长度是:"+str(length)+"\t形参里的宽度是"+str(breadth)+"\n当前长方形的面积是:"+str(length*breadth)

来看下我们之前的调用:

print(getRectangleArea(breadth=4,length=6))

结果:

内部的长度是:6  内部的长度是4

当前长方形的面积是:24

再对比默认值的调用:

#这里没传宽度breadth,但会按照默认2参与面积的计算即5*2=10

print(getRectangleArea(length=5))

结果:

内部的长度是:5  内部的长度是2

当前长方形的面积是10

注:函数默认值定义有一个注意的地方:

如果一个函数的参数列表里有一个参数指定了默认值,那么它后面的参数必须得指定默认值。

比如;我们指定了长度的默认值是4,但是没有指定宽度的默认值。

defgetRectangleArea(length=4,breadth):

return "内部的长度是:"+str(length)+"\t内部的长度是"+str(breadth)+"\n当前长方形的面积是"+str(length*breadth)

 

那么我们调用时会报没有指定默认值的错,这是python的一个规定,大家要紧记。

print(getRectangleArea(length=5))

结果:

SyntaxError:non-default argument follows default argumentault argument

6.3.4 不定长参数

以上的函数参数都是我们在函数定义时指定好的,也就是说参数的多少是固定的。如果有一个需求:灵活的给函数传递参数,换句话说函数的参数不固定。怎么做到呢?我们可以通过在参数前加个*来代表参数是可变的。还是赶紧上代码吧:

这里假设有个抽象的方法可以计算“多边形面积”的公式即是不定的参数的乘积。类似数学里的阶乘的概念。

defgetPolygonArea(area,*vars):

for var in vars:

area*=var

return "多边形的面积/体积是:"+str(area);

那么我们用这个函数计算长方形的面积时可以这样调用:

print(getPolygonArea(1,10,2))

结果:

多边形的面积/体积是:20

计算长方体的体积时以这样调用:

print(getPolygonArea(1,10,2,4))

结果:

多边形的面积/体积是:80

6.4 变量的作用域

6.4.1 全局变量

在函数外定义的变量一般叫做全局变量,它不会随函数的调用而改变。

6.4.2 局部变量

在函数内定义的变量一般叫做局部变量,它的生命周期仅限于函数内。

6.5 总结

本章我们学习了很多关于函数的基础知识,这里有函数的定义、函数的参数声明方式,变量的作用域等,当然一些函数的高级部分并没有涉及,但这些足以满足我们的基本使用。

Python基础概念_5_函数相关推荐

  1. python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....

    python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 函数,就是一个代码块,这个代码块是别人写好的.我们调用就可以. 函数也可以称为方法. 1.函数语法定义 ...

  2. Python基础day05【函数应用:学生管理系统、拆包、今日总结】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  3. Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  4. python什么元素为真_如何使用Python基础内置函数

    如何使用Python基础内置函数 发布时间:2020-08-05 13:46:59

  5. js基础--javascript基础概念之函数

    js基础--javascript基础概念之函数 引用w3c介绍: 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用 ...

  6. python中递归函数的基例_详谈Python基础之内置函数和递归 Python递归和循环的区别...

    Python 递归函数基例 2. 关于递归函数基例的说明,以下选项中错误的是 A 递归函数的基例决定所谓基例就是不需要递归就能求解的,一般来说是问题的最小规模下的解. 例如:斐波那契数列递归,f(n) ...

  7. 【Python基础】reduce函数详解

    转载请注明出处:[Python基础]reduce函数详解 reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中. reduce函数先从列表(或序列 ...

  8. Python训练营—Tesk3—Python基础进阶—从函数到高级魔方方法

                    Python基础进阶--从函数到高级魔方方法 目录 Python基础进阶--从函数到高级魔方方法 一.函数 1.函数的定义 2.函数的调用 3.函数参数 4.变量作用域 ...

  9. 原python基础概念整理_Python从头学之基础概念整理

    学程序真的是一个无法间断的过程,只要你懈怠,种种原因都是你的理由.然而造成的后果就是到目前位置,一个心目中的项目都没有完美的做出来: 归根结底,其实就是基础没有打好,因为每一个复杂的功能都是由很多简单 ...

最新文章

  1. matplotlib输出图形到网页_【Python】No.2 Numpy和Matplotlib初体验
  2. apkplug利用plugin.xml传递自定义属性
  3. 了解JavaScript
  4. Servlet架构初解析
  5. CAS 5.2.x 单点登录 - 实现原理及源码浅析
  6. FileUploadUtil
  7. winxp 安装apache php,WinXP-Apache-PHP5-MySQL-phpMyAdmin环境安装
  8. 在RHEL5下实现RAID5磁盘阵列
  9. 亚马逊出的平板电脑_亚马逊Fire HD 8 Plus评测:适合看视频和轻度游戏的廉价平板...
  10. GridView自动序号
  11. Asp服务器控件(HyperLink、Button) 绑定后台参数 DataBinder.Eval
  12. State_状态模式_PHP语言描述
  13. Java this添加窗口,如何使一个窗口,看起来像这样在Java中? (How to make a window look like this in Java?)...
  14. 【GitHub】Linux 内核揭秘:linux-insides-zh
  15. 字符设备驱动笔记——中断方式按键驱动之linux中断处理结构(五)
  16. pandas中read_csv的缺失值处理
  17. c# Quartz使用
  18. 西门子plc软件 linux,西门子PLC软件安装总结工程师们都在收藏
  19. c语言兵器谱,程序员兵器谱——那些男人们梦寐以求的终极键盘
  20. 《今日简史:人类命运大议题》的读后感范文3400字

热门文章

  1. VTK:vtkAxisActor用法实战
  2. wxWidgets:wxGenericProgressDialog类用法
  3. wxWidgets:wxApp概览
  4. boost::python::converter::arg_to_python相关的测试程序
  5. boost::multi_index模块实现复杂搜索和外键相关的测试程序
  6. boost::multi_array模块index_base 修改工具的测试
  7. boost::mp11::mp_replace_front相关用法的测试程序
  8. boost::mp11::mp_count_if_q相关用法的测试程序
  9. boost::function模块实现contains的测试程序
  10. GDCM:检索dicom文件中某个位置存在的Icon测试程序