python 函数进阶笔记

一、函数的参数传递

**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


猜你喜欢

转载自blog.csdn.net/lqz1999/article/details/89278458