Intermediate Python学习

来源:互联网 发布:软件安装包制作工具 编辑:程序博客网 时间:2024/04/29 04:42

  • args 和 kwargs
  • Debugging
  • 迭代器与生成器
  • mapfilterreduce
    • 1map
    • 2filter
    • 3reduce
  • 推导式
  • 7捕获异常

1. args 和 kwargs

不是非要用命名为args和kwargs,只是前面的***,有点类似于C语言的指针,*可以取一维数组的数据,**可以取二维数组的数据
*args:类似一个列表
**kwargs:类似一个字典

def test_args(*args):    for i in args:        print(i)test_args("q",'w','e','r')def test_kwargs(**kwargs):    for i in kwargs.keys():        print('{0}:{1}'.format(i,kwargs.get(i)))test_kwargs(a=1,b=2,c=3)def test_args_kwargs(fargs,*args,**kwargs):    print(fargs)    print("start print args ")    for i in args:        print(i)    print("start print kwargs")        for i in kwargs:        print('{0}-{1}'.format(i,kwargs.get(i)))test_args_kwargs('a','1','b','2',{'c':'3','d':'4'})输出结果:qwera:1c:3b:2astart print args 1b2{'d': '4', 'c': '3'}start print kwargs

2.Debugging

python自带的代码调试包,但是感觉没有IDE中的好用

  • c: 继续执行
  • w: 显示当前正在执行的代码行的上下文信息
  • a: 打印当前函数的参数列表
  • s: 执行当前代码行,并停在第一个能停的地方(相当于单步进入)
  • n: 继续执行到当前函数的下一行,或者当前行直接返回(单步跳过)
import pdbdef make_bread():    print("111")    pdb.set_trace()    print("222")    return "I don't have time"print(make_bread())python pdb_debug.py,然后输入上述的命令,查看过程

3.迭代器与生成器

迭代器: 可以用for 语句依次循环取出每一个元素,
生成器:一边循环一边计算,yield,可以通过next(),获取值,取不到是会暴StopIteration()错误

生成器也是迭代器的一种,for中也是通过next方法获取到值,也会有StopIteration()错误,只不过它自动处理了

#使用生成器def fib(n):    a =b=1    for i in range(n):        yield b        a ,b=b,a+bfor i in fib(10):    print i 使用for迭代def fib(n):    a = b=1    result = []    for i in range(n):        result.append(a)        a,b= b,a+b    return result for i in fib(10):        print i 

5.map、filter、reduce

1、map

将list中的数据依次传到一个函数中,并将结果返回成一个新的list

#map的使用add_list = [1,2,3,4]list1 = list(map(lambda x:x+2,add_list))print(list1)#列表推导式print([i+2 for i in add_list])

2、filter

将list中的数据依次传到一个函数(判断True False),获得满足函数的结果,成为一个新的list

#filterfilter_list = range(1,20)two_list = filter(lambda x:x%2,filter_list)print(list(two_list))#列表推导式print([i for i in range(1,20) if i%2])

3、reduce

将list中的数据递归的传到一个函数中,计算出最后的结果,只有一个值

#reducefrom functools import  reducereduce_list = range(1,20)sum_list =reduce((lambda x,y:x+y),reduce_list)print(sum_list)

6.推导式

简单的说,使用对应的符号,[ ],{ }来包含想要的结果
1、列表推导式

In [1]: [i for i in range(30) if i%2==0]Out[1]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

2、字典推导式

#装换字典的key、valueIn [5]: mcase = {'a':1,'A':2,'b':3,'B':4,'c':5}In [6]: {k:v for v,k in mcase.items()}Out[6]: {1: 'a', 2: 'A', 3: 'b', 4: 'B', 5: 'c'}#将字典相同的字母不管大小写相加In [7]: mcase_add ={ i.lower():mcase.get(i.lower(),0)+mcase.get(i.upper(),0) fo   ...: r i in mcase.keys()}In [8]: mcase_addOut[8]: {'a': 3, 'b': 7, 'c': 5}

3、集合推导式

In [3]: squard = {x**2 for x in [1,2,3,4,5,3,2,1]}In [4]: squardOut[4]: {1, 4, 9, 16, 25}

7、捕获异常

In [2]: try:   ...:     file = open('test.txt','rb')   ...: except IOError as e:   ...:     print('An IOError occurred. {}'.format(e.args[-1]))   ...:An IOError occurred. No such file or directory
0 0
原创粉丝点击