Python部分函数总结

函数的参数传递

  1. 参数定义与传递的基本顺序

    位置参数→关键字参数→可变数量参数
    举例如下:

def test_fun(a,b=6,*c,**d):#(*)是元组,(**)传入的是字典
    print("a = ",a,",b = ",b,",c = ",c,",d = ",d)
>>>test_fun(1,2)
a =  1 ,b =  2 ,c =  () ,d =  {}
>>>test_fun(1,2,3)#元组
a =  1 ,b =  2 ,c =  (3,) ,d =  {}
>>>test_fun(1,2,3,4)#因为字典有key,有value,在传入的参数中没有对应的格式,故输出字典为空
a =  1 ,b =  2 ,c =  (3, 4) ,d =  {}
>>>test_fun(a=1)
a =  1 ,b =  6 ,c =  () ,d =  {}
>>>test_fun(a=1,b=2)
a =  1 ,b =  2 ,c =  () ,d =  {}
>>>test_fun(a=1,b=2,c=3)#直接把c=3放进了**d中
a =  1 ,b =  2 ,c =  () ,d =  {'c': 3}
>>>test_fun(1,b=2)
a =  1 ,b =  2 ,c =  () ,d =  {}
>>>test_fun(1,2,3,4,x=1)
a =  1 ,b =  2 ,c =  (3, 4) ,d =  {'x': 1}
>>>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}
>>>test_fun(1,2,3,4,b=8)#这里对b进行二次赋值,所以会报错
----------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-d70e027b0821> in <module>()
     10 test_fun(1,2,3,4,x=1)
     11 test_fun(1,2,3,4,5,6,x=1,y=2,z=3)
---> 12 test_fun(1,2,3,4,b=8)

TypeError: test_fun() got multiple values for argument 'b'

函数文档

函数定义语法

def 函数名([参数列表]):
== ‘’’ 注释可以用来提示该函数的主要功能’’’==
函数体

Python部分函数总结
Python部分函数总结

lambda匿名函数

  1. lambda表达式
  • lambda表达式可以用来声明匿名函数,也就是没有函数名
    字的临时使用的小函数,尤其适合需要一个函数作为另一
    个函数参数的场合。也可以定义具名函数
  • lambda表达式只可以包含一个表达式,该表达式的计算结
    果可以看作是函数的返回值,不允许包含复合语句,但在
    表达式中可以调用其他函数。
  1. lambda函数定义
  • lambda函数返回函数名作为结果
  • lambda函数是一种匿名函数,即没有名字的函数
  • 使用Lambda保留字定义,函数名是返回结果
  • lambda函数用于定义简单的、能够在一行内表示的函数
    Python部分函数总结
>>> f = lambda x, y, z: x+y+z #可以给lambda表达式起名字
>>> f(1,2,3) #像函数一样调用
6
>>> g = lambda x, y=2, z=3: x+y+z #参数默认值
>>> g(1)
6
>>> g(2, z=4, y=5) #关键参数
11

  1. lambda函数的应用
  • 注意!!!谨慎使用lambda函数
  • lambda函数主要用作一些特定函数或方法的参数
  • lambda函数有一些固定使用方式,建议逐步掌握
  • 一般情况, 建议使用def定义的普通函数

map/filter/zip/reduce/enumerate等函数运用

range函数

Python3 range()函数返回的是一个可迭代对象(类型是对象) ,而不是列表类型,所以打印的时候不会打印列表。
Python3 list()函数是对象迭代器,可以把range(返回的可迭代对象转为一个列表,返回的变量类型为列表。
Python2 range()函数返回的是列表。

  • 函数语法
    >>>range(stop) >>>range(start,stop[,step])

  • 参数说明:
    start: 计数从start开始。默认是从0开始。例如range (5)等价于range(0, 5);
    stop: 计数到stop结束,但不包括stop。例如: range(0, 5)是[0, 1,2, 3, 4]没有5
    step: 步长,默认为1。例如: range(0, 5)等价于range(0, 5, 1)

  • 举例说明:

>>>range(5)
range(0, 5)
>>>for i in range(5):
    	print(i)
0
1
2
3
4
>>>list(range(5))
[0, 1, 2, 3, 4]
>>>list(range(0))
[]
>>>list(range(0,30,5))
[0, 5, 10, 15, 20, 25]
>>>list(range(0,10,2))
[0, 2, 4, 6, 8]
>>>list(range(0,-10,-1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>>list(range(1,0))
[]

map函数

  1. 定义:
    map()会根据提供的函数对指定序列做映射。
    第一个参数function以参数序列中的每一个元素调用 function函数,返回包含每次function函数返回值的新列表。
  2. 语法:
    map函数语法:
map(function,iterable)
  1. 参数:
  • function: 函数
  • iterable :个或多个序列
  1. 返回值:
  • Python 2.x返回列表。
  • Python 3.x返回迭代器。
def square(x):#计算平方数
    return x ** 2
>>>map(square,[1,2,3,4,5])#这个输出的是“迭代器”
<map at 0x276529aa6d8>
>>>list(map(square,[1,2,3,4,5]))#只有我们告诉它想生成列表的时候,它才会返回这5个数的平方数
[1, 4, 9, 16, 25]
>>>list(map(lambda x:x**2,[1,2,3,4,5]))
[1, 4, 9, 16, 25]
def add(x,y,z):
    return x+y+z
>>>l =[1,2,3]
>>>l2 = [1,2,3,4]
>>>l3 = [1,2,3,4,5]
>>>res = map(add,l,l2,l3)#当三个列表长度不够时,map有截断作用,以最短的列表为基准进行加减
>>>print(list(res))
[3, 6, 9]

filter函数

  1. 定义
  • filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
  • 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False ,最后将返回True的元素放到新列表中。
  1. 语法
    以下是fiter()方法的语法:
>>>filter(function, iterable)
  1. 参数
  • function 判断函数。
  • iterable 可迭代对象。
  1. 举例
  • 内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None ,则返回序列中等价于True的元素。
>>> seq = ['foo', 'x41', '?!', '***']
>>>def func(x):
			return x.isalnum()            #测试是否为字母或数字
>>> filter(func, seq) #返回filter对象
<filter object at 0x000000000305D898>
>>> list(filter(func, seq)) #把filter对象转换为列表
['foo', 'x41']
def is_odd(n):
    return n % 2 == 1
>>>newlist = filter(is_odd,[1,2,3,4,5,6,7,8,9])
>>>print(newlist)#这里输出的是一个迭代器
<filter object at 0x0000022E766DB160>
>>>print(list(newlist))#这里输出的才是列表
[1, 3, 5, 7, 9]
>>>list(filter(lambda x:x>2,[0,1,2,3,0,0]))
[3]
>>>list(filter(None,[0,1,2,3,0,0]))
[1, 2, 3]

zip函数

  1. 描述
  • zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组 ,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。

    注: zip方法在Python 2和Python 3中的不同:在Python 3.x中为了减少内存, zip() 返回的是一个对象。如需展示列表,需手动list()转换。
    zip(seq[,seq…]): zip()函数可把两个或多个序列中的相应项合并在一起,并以元组的格式返回它们,在处理完最短序列中的所有项后就停止。

Python部分函数总结

  1. 语法
    zip语法:
>>>zip([iterable, ...])
  1. 参数说明
  • iterabl 一个或多个迭代器;
  1. 返回值
    返回元组列表。
  2. 举例
>>>a = [1,2,3]
>>>b = [4,5,6]
>>>zipped = zip(a,b)
>>>list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>>a = [1,2,3]
>>>b = [4,5,6]
>>>zipped = zip(a,b)
>>>list(zip(*zipped))#与zip相反,zipped相当于解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
>>>a = ['name','age','sex']
>>>b = ['Dong',38,'Male']
#可以用一个语句将列表内容转换为字典
>>>c = dict(zip(a,b))
>>>c
{'age': 38, 'name': 'Dong', 'sex': 'Male'}

enumerate函数

  1. 描述
    enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。
  • Python 2.3.以上版本可用, 2.6添加start参数。
  1. 语法
    以下是enumerate()方法的语法:
>>>enumerate( sequence, [start=0])
  1. 参数
    sequence :一个序列、迭代器或其他支持迭代对象。
    start: 下标起始位置。返回值
    返回enumerate(枚举)对象。

  2. 举例

>>>seasons = ['Spring','Summer','Fall','Winter']
>>>list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>>seasons = ['Spring','Summer','Fall','Winter']
>>>list(enumerate(seasons,start = 1 ))#下标从1开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

reduce函数

  1. 描述
    reduce()函数会对参数序列中元素进行累积。
    函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:
    用传给reduce中的函数function (有两个参数)先对集合中的第1、2个元素进行操作,得到的结果再与第三个数据用function函数运算,最后得到一个结果。

注: 在Python3中, reduce()函数已经被从全局名字空间里移除了,它现在被放置在functools模块里,如果想要使用它,则需要通过引入functools模块来调用reduce() 函数:

		from functools import reduce
  1. 语法
    reduce()函数语法:
>>>reduce(function, iterable[,initializer])
  1. 参数
  • function: 函数,有两个参数
  • iterable :可迭代对象
  • itilizer: 可选,初始参数
  1. 返回值
    返回函数计算结果。
  2. 举例
>>>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