python基础8-函数

栏目: Python · 发布时间: 6年前

内容简介:python基础8-函数

函数的概念我估计每个人都不陌生,我们在学习 C语言 的时候就知道怎么定义一个函数了,那为什么要定义函数呢? 一般情况是第一你为了让主逻辑更清晰,第二是为了代码重用, 经常写 shell 脚本的人应该都有自己的函数库,在 Python 下也类似,很多功能可以复用,了解完这些我们来看看Python下的函数定义和调用。

1、函数定义和调用

在python下定义一个函数要以def开头,然后跟上函数名称和一个括号,最后加上冒号,然后回车空格来写代码块,我们来看一个最简单的函数:

>>> def show():
...     print 'ok'
... 
>>> show()
ok
>>>

这里定义了一个叫show的函数名称,函数体就包含了一个执行命令,调用方式是在函数名称后加小括号,在函数名称后的括号可以加入参数传给到函数体内,例如:

>>> def add(x,y):
...     print x + y
... 
>>> add(1,2)
3

这里我们定义了另一个add函数,传入2参数,然后打印两个数的和。

在函数体内除了用print打印我们需要看的内容,还有非常重要的return语句,这个是返回函数处理完的结果,例如我之前写的生成安全组Json格式的函数,完整代码请看这里:

def make_json(vmid,sgid):
    pdata = {}
    pdata["instanceId"] = vmid
    pdata["sgIds"] = sgid
    pjson = json.dumps(pdata)
    return pjson

这个函数功能就是将一个字典转成json格式的然后返回。

函数的参数除了上面我们说的基本参数外还有不定长参数,就是你的参数数量不确定,这是我们要在传入的参数前加一个“*”来表示,我们来个例子:

>>> def printnumber( arg1, *vartuple ):
...    print "Output is: "
...    print arg1
...    for var in vartuple:
...       print var
... 
>>> printnumber( 10 )                                 
Output is: 
10
>>> printnumber( 70, 60, 50 )                         
Output is: 
70
60
50

这里传入的*vartuple就是一个不定长的变量,可以没有,也可以是多个,如果多个在函数体内就做一个元组来处理,你要问你怎么知道是作为一个元组来处理呢,我们来测试下看看:

>>> def printnumber( arg1, *vartuple ):
...    print "Output is: "
...    print arg1
...    for var in vartuple:
...       print var
...    print type(vartuple)
... 
>>> printnumber( 70, 60, 50 ) 
Output is: 
70
60
50
<type 'tuple'>

代码没变,我只加了一句,最后输入的就是一个元组类型,也就说明不管你后传入多少参数,统一作为一个元组来处理,相当于传入一个元组。

除了元组可变长参数,还有一种是关键字参数(字典),j这种方式可以将一个Key=value作为参数传入函数中,参数的表示方式是在变量前加两个“**”,关键字参数应该是函数的最后一个参数,例子如下:

>>> def printme(arg1,**kw):
...     print arg1
...     for i in kw.keys():
...         print i + '=' + kw[i]
...     
>>> printme(1,name='xiaoming')
1
name=xiaoming
>>> printme(1,name='xiaoming',add='Bj')
1
add=Bj
name=xiaoming

最后说一下,我们说的这些参数并不是单一使用的,它们完全可以放到一个函数中,例如:

def printme(arg1,*args,**kargs):
    print arg1
    ....

函数要根据传入的参数进行对应的处理。

前面讲的都是我们需要定义名字的函数,在python里还有一种函数叫匿名函数lambda,它的格式非常简答,但它不太容易理解,它的用法格式如下:

lambda 参数:表达式

例如:

>>> f = lambda x, y : x + y
>>> f(1,1)
2

另一个有趣的例子:

>>> a = lambda x, y=2: x * y
>>> a(2)
4
>>> a(2,3)
6

当然除了这些python内置了很多有用的函数想map(),reduce(),filter()等,这个后续我们可以单独说这几个函数。

最后我们要说一下函数的变量作用域,变量分局部变量和全局变量,当python解释语句时,先从局部变量开始搜索,如果局部变量没有,就会在全局变量里找,在函数体内定义的是局部变量,函数外的变量是全局变量,那这里就有一个问题,如果全局变量跟函数体内定义的变量名称相同,那在执行时全局变量就会被覆盖,因为在局部变量找到了就不会再全局变量里找了,所以函数要引用一个全局变量就必须用global语句,例如:

>>> a = 2
>>> def p():   
...     global a
...     print a
... 
>>> p()
2

global语句的作用是让函数体直接使用全局变量,而无需在函数体内再定义个新局部变量了。

再说最后一个问题,那就是有时候我们经常会在python里看到以两个下划线(__)开头的和结束的名词,大家也不用觉得很奇怪,这些都是python自己保留的用法,所以我们在自定义的变量中是不能用的,例如function.__name__就是函数的名词,function.__doc__就是函数的文档字符串可以简单理解为注释内容。

函数部分就到这里,关于函数的内容真的非常多,我这里说的也基本是很入门的内容,一些高级的内容像闭包,装饰器等实在无法展开写,因为每个都够写几篇的,所以这些后续我们单独去详细讨论,当然如果是初学者,这两个东西搞不懂也不影响你学习,等你用到了在学都来得及,前期主要是把这些基本的打扎实,在此基础上去理解一些概念就会非常简单,最后感谢大家阅读本文章,喜欢的朋友请帮忙转发下吧~


以上所述就是小编给大家介绍的《python基础8-函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

缺失的终结

缺失的终结

【美】克尔•哈里斯 / 艾博 / 中国人民大学出版社 / 2017-6-15 / 39.00元

《缺失的终结》是一本反思互联网时代对普通人日常生活影响的书。作者认为,我们都曾渴望有一段远离现实生活烦扰的“瓦尔登湖”时光,悠闲地沉入自己的内心世界,从飞速变化的漩涡中暂时“缺失”。然而,互联网生活让我们每时每刻被互联网化,手环监测着我们的心跳和睡眠,微信、脸书、推特让我们人在床上就与世界链接起来,跑步了吗?走路了吗?英语单词背了吗?早餐的卡路里是否超标?坐在办公室,无数亟待处理的信息狂风暴雨般地......一起来看看 《缺失的终结》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具