函数进阶

1.函数的参数传递

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

   位置函数 -> 关键字参数 -> 可变数量参数
         *args --> **args
对于*args**args在函数中我们称之为参数组,但是这两个还是有区别的
  1.*args的功能:接收N个位置参数,转换成元组tuple形式
  2.**args的功能:接收N个关键字参数,转换成字典dict形式
  3.位置参数一定要在关键字参数之前,也就是(*args,**args)

>>> def fun1(a,b=6,*c,**d):
        print("a =",a,",b = ",b,",c =",c,",d =",d)

>>> fun1(1)
a = 1 ,b =  6 ,c = () ,d = {}
>>> fun1(1,2)
a = 1 ,b =  2 ,c = () ,d = {}
>>> fun1(1,2,3)
a = 1 ,b =  2 ,c = (3,) ,d = {}
>>> fun1(1,2,3,4)
a = 1 ,b =  2 ,c = (3, 4) ,d = {}
>>> fun1(1,2,3,4,5)
a = 1 ,b =  2 ,c = (3, 4, 5) ,d = {}

>>> fun1(a=1)
a = 1 ,b =  6 ,c = () ,d = {}
>>> fun1(a=1,b=3)
a = 1 ,b =  3 ,c = () ,d = {}
>>> fun1(a=1,b=3,c=3)
a = 1 ,b =  3 ,c = () ,d = {'c': 3}
>>> fun1(a=1,b=3,d=3)
a = 1 ,b =  3 ,c = () ,d = {'d': 3}
>>> fun1(a=1,b=3,c=3,d=5)
a = 1 ,b =  3 ,c = () ,d = {'c': 3, 'd': 5}

>>> fun1(1,2,3,4,x=5)
a = 1 ,b =  2 ,c = (3, 4) ,d = {'x': 5}

>>> fun1(1,2,3,4,5,b=3,c=3)
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    fun1(1,2,3,4,5,b=3,c=3)
TypeError: fun1() got multiple values for argument 'b'
>>> fun1(1,2,3,4,5,b=3)
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    fun1(1,2,3,4,5,b=3)
TypeError: fun1() got multiple values for argument 'b'

#位置参数与关键字参数位置颠倒后的结果如下
>>> fun1(c=2,d=12,1,2,3)
SyntaxError: positional argument follows keyword argument

2.函数文档

  函数文档是用来查看当前函数相关信息介绍的一个特定格式。

定义函数文档方法:

def 函数名([参数列表]):
    '''注释'''
    函数体

查看函数文档方法:

help(函数名)
    此方法会直接输出函数文档的内容
 
函数名.__doc__
    直接输出显示函数文档的内容元字符串(可以使用print(函数名.__doc__)来解决无格式问题)

3.lambda匿名函数

lambda表达式

(1) lambda表达式可以用来声明匿名函数,也就是没有函数名称的临时使用的小函数,尤其适合需要一个函数作为另一个函数参数的场合。也可以定义具名函数
(2) lambda表达式只可以包含一个表达式,该表达式的计算结果可以看作是函数的返回值,不允许包含重复语句,但在表达式中可以调用其他函数。

lambda函数

lambda函数返回函数名作为结果
(1) lambda函数是一种匿名函数,即没有名字的函数。
(2) 使用lambda保留字定义,函数名是返回结果。
(3) lambda函数用于定义简单的、能够在一行内表示的函数。
语法形式如下:
     <函数名> = lambda <参数>:<表达式>
等价于

def <函数名>(<参数>):
    <函数体>
    return <返回值>

>>> f = lambda x,y,z:x+y+z        #可以给lambda表达式起名字
>>> f(2,5,8)                      #像函数一样调用
15
>>> g = lambda x,y=2,z=7:x+y+z    #参数默认值
>>> g(1)
10
>>> g(2,z=7,y=9)                  #关键参数
18

4.map 函数

map() 会根据提供的函数对指定序列做映射。
第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表。
语法为:map(function,iterable,...)
参数:function — 函数;iterable — 一个或多个序列
返回值:Python 2.x 返回列表
        Python 3.x 返回迭代器
例:

>>> def square(x):
	return x ** 2

>>> map(square,[1,2,3,4,5,6])
<map object at 0x03C0AC10>
>>> list(map(square,[1,2,3,4,5,6]))
[1, 4, 9, 16, 25, 36]

#使用lambda匿名函数
>>> map(lambda x:x ** 2,[1,2,3,4,5,6,])
<map object at 0x03C0AC10>
>>> list(map(lambda x:x ** 2,[1,2,3,4,5,6,]))
[1, 4, 9, 16, 25, 36]

#提供两个列表,对相同位置的列表数据进行相加
>>> list(map(lambda x,y:x + y,[1,3,5,7,9],[2,4,6,8,10]))
[3, 7, 11, 15, 19]

5.filter 函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
  该函数接收两个参数,第一个为函数,第二个为序列,序列中的每个元素作为参数传递给函数进行判断,然后返回 TrueFalse ,最后将返回 True 的元素放到新列表中。
语法为:filter(function,iterable)
参数:function — 函数,只能接收一个参数,且返回值是 TrueFalse
   iterable — 可迭代对象
返回值:Python 2.7 返回列表
        Python 3.x 返回迭代器对象
例:

>>> def is_odd(n):
	return n % 2 == 1

>>> newlist = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
>>> print(newlist)
<filter object at 0x03C0AF70>
>>> print(list(newlist))
[1, 3, 5, 7, 9]

6.zip 函数

zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。
语法为:zip([iterable,...])
参数:iterable — 一个或多个迭代器
返回值:返回元组、列表
例:

>>> a = [1,2,3] 
>>> b = [4,5,6]
>>> zip(a,b)
<zip object at 0x009A0698>
>>> list(zip(a,b))
[(1, 4), (2, 5), (3, 6)]

#与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
>>> a = [1,2,3]	 
>>> b = [4,5,6]
>>> zipped = zip(a,b)
>>> list(zip(*zipped))
[(1, 2, 3), (4, 5, 6)]

7.enumerate 函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环中。
Python 2.3.以上版本可用,Python2.6 添加 start 参数。
语法为: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, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

8.reduce 函数

reduce() 函数会对参数序列中元素进行积累。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:
  用传给 reduce 中的函数 function (有两个参数)先对集合中的第1、2个元素进行操作,得到的结果再与第3个数据用 function 函数运算,最后得到一个结果。
语法为:reduce(function,iterable[,initializer])
参数:function — 函数,有两个参数
   iterable — 可迭代对象
   initializer — 可选,初始参数
返回值:返回函数计算结果
*在Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果你想使用它,则需要通过引入 functools 模块来调用reduce() 函数:
      from functools import reduce
例:

>>> 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,100)))
4950

相关内容有来自于:1.python基础–参数组*args和**kwargs的区别
         2.python 函数文档

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值