python基础(二)

一、函数

1、用def定义函数

2、引入某个方法,如引入文件test.py文件中的method1方法:from test import method1

3、定义空函数,函数体就写pass就行,pass可以当作占位符

4、函数执行完毕也没有return语句时,自动return None

5、函数可以同时返回多个值,但其实就是一个tuple

6、 定义默认参数要牢记一点:默认参数必须指向不变对象!

7、定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号,可变参数在函数调用时自动组装为一个tuple。

8、Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去

9、关键字参数,参数格式:**参数名,关键字参数在函数内部自动组装为一个dict,注意关键字参数获得的是传入参数的一份拷贝,对关键字参数的改动不会影响到函数外的传入参数

10、命名关键字参数

(1)命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数

(2)函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*

(3)定义函数时,若命名关键字参数没有缺省值,调用函数时必须传入参数名

(4)对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的

11、递归函数

(1)如果一个函数在内部调用自身本身,这个函数就是递归函数

(2)使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。

(3)解决递归调用栈溢出的方法是通过尾递归优化,尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

 

二、高级特性

1、切片

(1)list和tuple都可以用切片操作

(2)L[0:3]表示,截取list的部分元素,从索引0开始,到索引3终止,即取L[0]、L[1]、L[2]。如果从所以0开始,也可以写成L[:3]

(3)L[-1]表示,取最后一个元素

(4)L[-10:]表示,取最后10个元素

(5)L[:10:2]表示,取前10个元素,每两个取一个

(6)L[::3]表示,所有元素每三个取一个

(7)L[:]表示复制一个list

(8)L[::-1]表示反向索引,获取list的反向排列

2、迭代

(1)可以用for循环来遍历一个list或tuple,这种遍历称为迭代

(2)判断一个对象是否可迭代对象

(3)可以用enumeration()把一个list变成索引-元素对

 3、列表生成式

函数原型:range(start, end, step):

参数含义: start:计数从start开始。默认是从0开始。例如range(5)等价于range(0, 5);

                end:技术到end结束,但不包括end。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

                step:每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

(1)生产一个list

(2)用列表生成式,生成[1×1,2×2,...,10×10]

(3)列表生成式,还可以加上if判断

(4)使用两层循环,可以生成全排列

3、生成器

(1)第一种方法:把一个列表生成式的[]改成(),就创建一个generator:g = (x * x for x in range(10))

  • 可以通过next()函数,计算出g的下一个元素,直到计算出最后一个元素,没有更多元素时,抛出StopIteration错误

  • 可以用for循环迭代生成器,并且不需要关心StopIteration错误

(2)第二种方法:如果一个函数定义中,包含关键字yield,那么这个函数就不是一个普通的函数,而是一个generator。

  • 变成generator的函数,遇到yield语句返回,再次执行时,从上次返回的yield语句处继续执行
  • 函数执行过程中,遇到yield就中断,下次又继续执行。需要给循环设置一个条件退出循环,否则会产生一个无限数列
  • 调用变成generator的函数,需要先生成一个generator对象,然后用next()函数不断获得下一个返回值
  • 使用for循环调用generator时,发现拿不到返回值。若要获取返回值,必须要捕获StopIteration错误,返回值包含在StopIteration的value中

 

三、函数式编程

1、高阶函数:一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

2、map函数:接收两个参数,一个是函数,一个是Interable。map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

3、reduce函数:reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数reduce把结果继续和序列的下一个元素做累积计算。效果是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

4、Python内建的filter()函数用于过滤序列,和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

5、Python内置的sorted()函数就可以对list进行排序,还可以接收一个key函数来实现自定义的排序

6、在函数A中又定义了函数B,并且,内部函数B可以引用外部函数A的参数和局部变量,当A返回函数B时,相关参数和变量都保存在返回的函数中,这种称为闭包

注:返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

转载于:https://www.cnblogs.com/abby-cheng/p/9937783.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值