8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

python基础8-函数

来源:本站原创 浏览:79次 时间:2022-08-28

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

函数定义和调用

在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__就是函数的文档字符串可以简单理解为注释内容。


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net