一、函数的参数传递
**python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值。
Python中函数传递参数的形式主要有以下几种:位置传递,关键字传递,默认值传递,不定参数传递(包裹传递)*****
1.位置传递实例:
def fun(a,b,c)
return a+b+c
print(f(1,2,3))
2.关键字传递
关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。
def fun(a,b,c)
return a+b+c
print(f(1,c=3,b=2))
3.参数默认值
在定义函数的时候,使用形如c=10的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值。
def f(a,b,c=10):
return a+b+c
print(f(3,2))
print(f(3,2,1))
在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.第二次调用函数的时候,c被赋值为1,不再使用默认值。
4.包裹传递
在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。
下面是包裹位置传递的例子:
def test_fun(a, b=6, *c, **d):
print("a =",a,",b =",b,",c = ",d =“,d)
test_fun(1, 2, 3, 4)
#a = 1, b = 2, c = (3, 4), d = {}
test_fun(a = 1, b = 2, c = 3)
#a = 1, b = 6, c = () , d = {'c':3}
test_fun(1, 2 , 3, 4, 5, 6, x = 1,y = 2, z = 3)
#a = 1, b = 2, c = (3, 4, 5, 6) , d = {'x':1, 'y':2, 'z':3}
二、函数文档
def 函数名([参数列表]):
'''注释'''
函数体
print() #打印
help() #查看函数或模块用途的详细说明
三、lambda匿名函数
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda表达式可以用来声明匿名函数,也就是没有函数名字的临时使用的小函数,尤其适合需要一个函数作为另一个函数参数的场合。也可以定义具名函数。
lambda表达式只可以包含一个表达式,该表达式的计算结果可以看作是函数的返回值,不允许包含复合语句,但在表达式中可以调用其他函数。
例:
>>>add = lambda x, y : x+y
>>>add(1,2)
3
>>> g = lambda x, y = 2, z = 3: x+y+z #默认参数值
>>> g(1)
6
>>> g(2, z = 4, y = 5) #关键参数
11
四、range/map/filter/reduce/zip/enumerate函数
1.range函数
参考链接:https://blog.csdn.net/chiclewu/article/details/50592368
语法:
range(stop)
range(start, stop[, step])
range函数是一个用来创建算数级数序列的通用函数,返回一个[start, start + step, start + 2 * step, …]结构的整
数序列;range函数具有一些特性:
1.如果step参数缺省,默认1;如果start参数缺省,默认0。
2.如果step是正整数,则最后一个元素(start + i * step)小于stop。
3.如果step是负整数,则最后一个元素(start + i * step)大于stop。
4.step参数必须是非零整数,否则抛出VauleError异常。
注意:range函数返回一个左闭右开([left,right))的序列数
例:
>>> range(1,10,1)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(0,-10,-1)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(1,0)
[]
2.map函数
参考链接:http://www.runoob.com/python/python-func-map.html
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
语法
map(function, iterable, ...)
#function -- 函数
#iterable -- 一个或多个序列
!!!注意:返回值是返回迭代器!!!
例:
def square(x):
return x *** 2
map(square, [1,2,3,4,5])
#<map at 0x5815240>
def square(x):
return x *** 2
list(map(square, [1,2,3,4,5]))
#[1,4,9,16,25]
def add(x,y, z):
return x+y+z
list1 = [1,2,3]
list2 = [1,2,3, 4]
list3 = [1,2,3, 4,5]
res = map(add, list1, list2, list3)
print (list (res))
[3,6, 9]
3.filter函数
参考链接:http://www.runoob.com/python/python-func-filter.html
描述
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
!!!注意: Pyhton2.7 返回列表,Python3.x 返回迭代器对象!!!
语法
filter(function, iterable)
参数
function – 判断函数。
iterable – 可迭代对象。
返回值
返回列表。
实例
>>> seq = [ 'foo' ,'x41’, '?!', '***']
>>>> def func(x):
return x. isalnum() #测试是否为字母或数字
>>> filter(func, seq) #返回filter对象
<filter object at 0000000000305D898>
>>> list(filter(func, seq)) #把filter对象转换为列表
['foo', 'x41']
4.zip函数
参考链接:http://www.runoob.com/python/python-func-zip.html
描述
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
!!!注意:zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。!!!
语法
zip 语法:
zip([iterable, ...])
#iterabl -- 一个或多个迭代器;
返回值
返回元组列表。
实例
a = [1,2,3]
b=[4,5, 6]
zip(a, b)
#<zip at 0x5a1 fa08>
a= [1,2,3]
b = [4,5,6]
list(zip(a, b))
#[(1, 4), (2, 5), (3, 6)]
a = [1,2,3]
b = [4,5,6]
zipped = zip(a, b)
list (zip(*zipped) )
#[(1, 2, 3),(4, 5, 6)]
#与zip相反,*zipped 可理解为解压,返回二维矩阵式
5.enumerate函数
参考链接:http://www.runoob.com/python/python-func-enumerate.html
描述
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
Python 2.3. 以上版本可用,2.6 添加 start 参数。
语法
以下是 enumerate() 方法的语法:
enumerate(sequence, [start=0])
参数
sequence – 一个序列、迭代器或其他支持迭代对象。
start – 下标起始位置。
返回值
返回 enumerate(枚举) 对象。
实例
seasons = [' Spring', ' Summer' ,'Fall', 'Winter']
list (enumerate (seasons))
[(0, Spring ), (1, , Summer'), (2, 'Fall'), (3, ' Winter')]
list (enumerate (seasons, start=1))#从下标1开始
[(1, ’Spring' ), (2, 'Summer' ), (3, 'Fall'), (4, 'Winter' )]
i=0
seq = ['Tom' ,' Jerry, ' Bob']
for element in seq:
print(i, seq[i])
i +=1
0 Tom
1 Jerry
2 Bob
seq = ['Tom' ,' Jerry, ' Bob']
for i, element in enumerate(seq):
print(i, element)
0 Tom
1 Jerry
2 Bob
6.reduce函数
参考链接:http://www.runoob.com/python/python-func-reduce.html
描述
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
语法
reduce() 函数语法:
reduce(function, iterable[, initializer])
参数
function – 函数,有两个参数
iterable – 可迭代对象
initializer – 可选,初始参数
返回值
返回函数计算结果。
实例
from functools import reduce
def add(x, y):
return x+ y
reduce(add, [1,2,3, 4, 5])
>15
from functools import reduce
reduce(lambda x, y: x+y, [1,2,3, 4,5])
>15
from functools import reduce
def add(x,y):
return x+y
print (reduce(add, range(1, 101)))
>5050