python基础8-函数

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

内容简介: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-函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

TCP/IP网络管理

TCP/IP网络管理

亨特 / 电子工业 / 2006年3月1日 / 79.00元

本书是一本架设与维护TCP/IP网络的完整指南,无论你是在职的系统管理员,还是需要访问Internet的家用系统用户,都可从本书获得帮助。本书还讨论了高级路由协议(RIPv2、OSPF、BGP),以及实现这些协议的gated软件。对于各种重要的网络服务,如DNS,Apache,sendmail,Samba,PPP和DHCP,本书都提供了配置范例,以及相关的软件包与工具的语法参考。一起来看看 《TCP/IP网络管理》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具