Python学习之--函数/生成器/装饰器

Function,函数,主要是为了:1提高代码的复用程度,2将程序模块化。

定义函数

在Python中,使用def 用来定义函数,一般函数的定义如下:

def name(arg1,arg2,....):
      statements
      return value

其中,return 用来返回函数执行的结果

一个简单的sample如下:

>>> def times(x,y):
...     return x*y
...
>>> times(5,2)
10
>>>

函数执行的结果可以放入到一个变量中:

>>> result=times(5,2)
>>> result
10
>>>

Python 不需要定义参数的类型,函数结果的返回完全依赖于传入参数的类型,在上例中,Python自动识别传入的参数为两个数字,并作出返回值,当传入一个列表参数的时候,结果如下:

>>> li=[1,2,3]
>>> times(li,2)
[1, 2, 3, 1, 2, 3]
>>>

传入字符串的时候,结果如下:

>>> a='Hello'
>>> times(a,3)
'HelloHelloHello'
>>>

所以简单的Summary一下,传入的函数参数会被python自动识别,也就是在运算的时候'*'识别并对不同类型的参数变量作出了不同的应对。但是如果'*'不能识别或者不支持传入的参数,那么在函数运行的时候还是会报错的,如下:

>>> b='x'
>>> times(a,b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in times
TypeError: can't multiply sequence by non-int of type 'str'
>>>

所以,在不确定的情况下,可以先实验一下,传入的参数会不会造成error。

函数参数的类型

一般参数

关键字参数:通过参数名进行匹配

默认参数:没有传入值的参数定义的默认值

可变参数:*开头,可以是多个基于位置或者关键字的参数

具体,如下的函数定义中传入了不同的参数,代表了不同的含义:

def fun(*name)                    #传入不定量的参数,这些参数会被组成一个元祖
def func(name=value)              #定义了参数的默认值
def func(**name)                  #传入不定量的参数,这些参数会被组成一个字典
def func(name,*args)              #混合方式,多余的参数会被组成一个元祖传入
def func(name,**args)             #混合方式,多余的参数会被组成一个字典传入
def func(*,name=value)            #混合方式,后面的参数name必须通过关键字参数传入

生成器(generator)

生成器是用来创建python序列的对象。生成器是一种迭代器,使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列。

在python中,一个函数中如果使用了yield,那么这个函数就是一个生成器。

有关生成器内容点这里

装饰器(decorator)

有关装饰器的内容点这里

原文地址:https://www.cnblogs.com/cedrelaliu/p/5151817.html