python 函数进阶笔记

函数的参数传递

1.必选参数

必选参数也叫位置参数,定义:就是在给函数传参数时,按照顺序,依次传值。

举一个简单例子

def sum(a,b):
    return a+b
sum(2,3)

函数sum(a,b)中有两个参数,a和b,这两个参数都是位置参数,调用的时候,传入的两个值按照顺序,依次赋值给a和b。

2.默认参数

定义:就是在写函数的时候直接给参数传默认的值,调用的时候,默认参数已经有值,就不用再传值了。
作用:最大的好处就是降低调用函数的难度。也可以传值给函数。但如果没有传参,一律采用的是默认值。

def sum_1(a,b=2):
    return a+b
sum_1(3)#调用函数,只传入一个值,没有传进去的那个按默认值
#5
sum_1(3,3)#调用函数,传入两个值,都是按传进去的值计算
#6
设置默认参数注意事项

第一:必选参数在前,默认参数在后,否则python解释器会报错。
第二:默认参数一定要指向不变对象!指向不变对象!指向不变对象!
(注意:python中的字符串,数字,元组都可以看做对象。)
为什么要设计str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象

3.可变参数

简单来说,就是没有设置传入参数的多少,可以传进去多个值也可以一个值
表示方法: *arges

我们常用的求和函数就是这样设置的。

def sum_2(*b):
    sum =0
    for i in b:
        sum +=i
    return sum
sum_2(1,2,3,4,5,6,7,8,9,10)
# 55

很多函数都用到了可变参数,比如max()和min()函数,这样的很多,我们以后要记得设置函数可变参数记得用‘*’号来标记。

关键字参数(字典)

定义:可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。在调用函数时,可以只传入必选参数:
作用:扩展函数的功能
特征:**kw

如果直接传值给它会报错,我们看下面一个例子。

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
person(2,3,x=3)
#name: 2 age: 3 other: {'x': 3}

多个参数结合的用法

在这里插入图片描述
这个图片讲解了常用的传参和几种参数结合,各种传参方法可能出现的结果。
最后我们对函数参数进行一个总结

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

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

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

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

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

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

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

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

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

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

函数文档

这里我借鉴老师的课件,有兴趣的可以看一下,作为一个程序员还是应该多写注释。
在这里插入图片描述
在这里插入图片描述

匿名函数

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

在这里插入图片描述
下面我们来看几个简单例子
在这里插入图片描述
通过这几个例子,我们也大致掌握了lambda函数的用法了。
最后让我们看一下几个常用的比较牛逼的函数。

常用复杂函数

1.range() 函数
语法我就不过多强调了,可以看一下这张图片。
在这里插入图片描述
在这里插入图片描述
2.map()函数
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
在这里插入图片描述
3.zip()函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
在这里插入图片描述
4.enumerate函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
在这里插入图片描述
5.reduce函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

def add(x, y) :            # 两数相加
   return x + y
reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
15

6.filter函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
注意: Pyhton2.7 返回列表,Python3.x 返回迭代器对象。
在这里插入图片描述
这几个函数大概就介绍这么多了,有兴趣的可以自己去网上看一下相关的资料。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值