python基础
Posted abby-cheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
2、迭代
(1)可以用for循环来遍历一个list或tuple,这种遍历称为迭代
(2)判断一个对象是否可迭代对象
(3)可以用enumeration()把一个list变成索引-元素对
3、列表生成式
(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中
以上是关于python基础的主要内容,如果未能解决你的问题,请参考以下文章