函数

来源:互联网 发布:同比环比数据分析 编辑:程序博客网 时间:2024/05/29 17:26

定义一个函数使用def语句 依次是函数名、括号、括号中的参数和冒号:然后在缩进

块中编写函数体,函数返回用return返回。
eg: def tian(x):
if x>0:
return x
else:
return -x

注:如果函数体中没有return语句,则函数执行完后也会返回结果,结果为None,

如果你已经把tian()函数定义保存为tiansong.py文件了,那么可以在该文件目录下

启动python解释器,用from tiansong import tian来导入tian()函数

注意tiansong是文件名不含扩展.py 后面是函数名,

定义空函数: 定义空函数就可以直接使用pass语句
eg: def nop()
pass

pass语句就是什么也不做,实际pass可以用作占位符,pass可以用到其他  语句中,eg:if age>=18:               pass      缺少了pass,代码运行就会有语法错误,

整数类型检查用 isinstance()实现
if not isinstance(x ,(int ,float)):
ralse TypeError(“bad operand type”)

返回多个值:

函数可以返回多个值:return x,y

返回的多个值其实是一个tuple 但语法上可以去掉【】。多个变量可以接受一个
tuple x,y=tian();

小结

定义函数时,需要确定函数名和参数个数;

如果有必要,可以先对参数的数据类型做检查;

函数体内部可以用return随时返回函数结果;

函数执行完毕也没有return语句时,自动return None。

函数可以同时返回多个值,但其实就是一个tuple。

参数:

tian(x) tian(x,y):x,y都是位置参数,

都可以定义一个tian函数,但是调用是就会出现参数错误,所以我们定义函数的

的时候一般会设置默认函数 tian(x,y=2)  .

默认参数必须指向不变的对象,

可变参数:传入的参数个数可以改变的参数,

一般可变参数的函数定义与一般函数一致,区别为参数前面加*

  eg: tian(*x). 则x变量为可变参数。

区别:一般函数运行多个参数的变量,在调用前则先组装一个list或tuple在调用

函数,但可变参数,则是在函数中组装list

eg:一般函数: tian([1,2,3])    可变参数: tian(1,2,3)

关键字参数:

关键字参数和可变参数类似,但是关键字参数在函数内部形成的是dict,
eg:def person(name,age,**kw)
person(“tian”,12)——-name:tian age: 12 other:{}
person(“tian”,12,city=”beijing”)—-
name:tian age:12 other:{“city”:”beijing”}

**kw表示 把kw这个dict的所有key-value用关键字传入到函数**kw参数中

小结:

Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。

默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!

要注意定义可变参数和关键字参数的语法:

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

以及调用函数时如何传入可变参数和关键字参数的语法:

可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过args传入:func((1, 2, 3));

关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过kw传入:func({‘a’: 1, ‘b’: 2})。

使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。

定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。

高阶函数除了可以接收函数作为参数外,还可以把函数作为返回。

调用这个高阶函数时只能得到一个函数,再次调用这个得到的函数时才能得到结果
eg:

def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum

f = lazy_sum(1, 3, 5, 7, 9)
f

f()
25

装饰器: 函数也是一个对象,而且函数对象可以赋值给变量,一个通过变量来调用函数

def now():
… print ‘2013-12-25’

f = now
f()
2013-12-25

函数对象有一个name属性,可以得到函数的名字

now.name
‘now’
f.name
‘now’

高阶函数:

变量可以指向函数—abs(-10)

 f=abs  f就和abs同样的功能   f(-10)=10

注意:函数名不可以作为变量命名

传入函数:

一个变了可以是一个函数,函数的参数能接受变量,则一个函数就可以接受一个

 函数作为参数,这个函数就称为高阶函数,

map/reduce函数:

map接收两个参数,一个是函数一个是iterable,这里会把函数作用在list的

每一个元素上,即list中每一个都对通过函数来计算得到一个新的list, eg:def f(x):       return x*x    r=map(f,[1,2,3,4,5])    list(r)=====[1,2,9,25]

reduce函数也是两个参数,一个函数作用在一个list上,会对list中的元素

进行累加,最后得到的是一个元素
eg: def f(x,y):
return x+y
reduce(f,[1,2,3,4])====10

filter用于过滤序列,与map函数参数一致,

sorted排序函数, eg:sorted([36,5,-21,9,12])
==[-21 -12,5,9,36]
sorted([36,5,-12,9,-21],key=abs)
==[5,9,-12,-21 ,36]

返回函数:

高阶函数除了接收函数作为参数外,还可以把函数作为结果返回。
eg: def cal_sum(*arg):
def sum():
ax=0
for n in args:
ax=ax+n
return ax
return sum

这里cal_sum函数返回的是sum函数 f=cal_sum()  则f是一个函数,
0 0
原创粉丝点击