zoukankan      html  css  js  c++  java
  • python学习总结

    作者:csj
    更新时间:2017.12.30

    email:59888745@qq.com

    说明:因内容较多,会不断更新 xxx学习总结;

    回主目录:2017 年学习记录和总结

    1.python 简介:

    2.python 解释器

    3.python基础:

    1.数据类型,变量,字符串,编码
    2.list,tuple,set,dict,
    3.条件判断,循环
    4.函数及参数,递归函数,包函数,匿名函数,偏函数
    5.切片,迭代,列表生成式,生成器
    6.函数式编程,高阶函数map,reduce,filter,zip,sorted
    7.装饰器,模块,
    8.错误处理,调试,测试
    9.IO文件读写
    10.序列化,进程,多线程
    11.正则表达式
    12.常用内建模块
    13.常用web框架flask,django

    -----------------------------------------------------------------------------

    1.python 简介:

    1.python被称为胶水语言,意思是无所不能,哪里都可以使用python来开发,由此可见python现在是非常火的,特别是现在人工智能,机器学习比较火的时候,好都人都在学习python.

    2.Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。目前有python2.* 和python3.*在工业界使用,

    如果你现在开始学习python,建议从pyton3.*开始学,因python2.*从2020年,开始不在提供支持和更新.

    2.python 解释器

            以.py为扩展名的文本文件,要运行代码,就需要Python解释器去执行.py文件。

           目前开发的IDE有:pychart,sublime text2/sublime text3

    3.python基础:

    1.数据类型,变量,字符串,编码

        int,double,str,bool,None,常量

       a=2

       b=2.12

       c='test'

       d= True

       e=None

       pai=3.1415927

        需要注意的事python的 数据类型不用定义,解释器会根据数据的类型自动匹配数据类型;

         python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”.

    ord('A')#print65

    char(66) #print B
    2.list,tuple,set,dict, 

        直接上列子吧,最直观:

      -------------list--------------------

       list0=[]

        list1=[1,2,3,4]

       list2=['a','b','c']

      list3=[1,2.12,'a',list1]

      type(list3)

      print(list3[0] #index get value

    list4 = list1 + list2

    list5 = list1 * 3

    len(list5)

    for i in list5:

          print(i)

    list6 = 2 in list5

    del list6[1]

    del list6

    max(list6)

    min(list6)

    list5[1:4]

    list5[1:4:2]

    list5[2:]

    list5[:4]

    list5=['a','b']#updated value

    list5.append(),list5.count('a'),list5.extend(val),list5.index(obj),list.instert(index,obj),

    list5.pop('a')

    list.remove(valu)

    del list['valu']

    ----------tuple-------------------------

    tuple1=()

    tuple2=(1,2,3)

     tuple function:索引,切片,连接,复制,对内部元素循环,查找某元素是否存在,删除元组,还回最大最小值 参考list,不一一列出 

    元组和列表相互转化

    tuple1=(1,2,3)

    list1=['a','b','c']

    tuple2=tuple(list1)

    list2=list(tuple1)

    list3 = [n+m for n in 'abc' for m in 'ABC']

    元组打包解包:

              tuple4=1,2,3,4

              a,b,c,d=tuple4

    ----------------------dict funciton----------------------------------------

    dict1={}

    dict2={'a':1,'b':2,'c':3}

    dict3=dict(['a',10],['b',20])

    dict4 = dict((('a',10),('b',20)))

    dict5=dict(a=10,b=20)

    dict6=[1:10,2:20]

    dict1['a']

    dict7 = 'a' in dict1 #true or false

    dict1.keys()

    dict1.values()

    dict1.items()

    dict1.clear()

    dict1.get(key,default=None)

    dict1.pop(key)

    dict1.setdefault(key,default=none)

    dict1.update(newdict)

    dict8=copy.deepcopy(dict2)

    -------------------------set ----------------------------------------------------------------------

    不重复的无序集{},不能使用列表,字典当做元素

    set0=set{}

    set1 ={1,2,3,4,5}

    set2={1,2.33,'test',(1,2)}

    set1.add(x)

    set9 =set1.updte(set2)

    set1.pop()#执行一次按顺序删除一个元素

    set1.remove(x)

    set1.discard(x)

    set1.clear()

    set1.intersection(set2)

    set1.untion(set2)

    set1.diffrence(set2)

    set1.issubset(set2)


    3.条件判断,循环

        if  a<10:

        elif a<20:

       else:

       for x in list1:


    4.函数及参数,递归函数,包函数,匿名函数,偏函数

      def def1():

      def def2(a)

      def def3(a,b=2,c='shenzhen')

    def def4(a,*b,**kw):

    def def5(a,b,*,city,name)#命名关键字参数,必须用*分隔,后面的事命名关键字参数

    递归函数:函数内部调用其他函数,调用自己也是;

    匿名函数:f1= lambda x:x+x

    5.切片,迭代,列表生成式,生成器

     list1=[1,2,3,4,5,6]

    list2=list1[1:4]

    迭代:可以遍历的集合称之为迭代;

    for k in dict:

        print(k)

    python内置的额函数enumerate可以将list变成索引-元素对,这样可以使用for 循环迭代;

    for x,y in enumerate(['a','b','c']):

        print(x,y)

    list1=[x for x in range(10)]

    生成器:i = (x for x in range(10))  #generator yioid

                 next(i)

      凡是可作用于for循环的对象都是Iterable类型;
      凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
      集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    6.函数式编程,高阶函数,map,reduce,filter,zip,sorted

      函数式编程:就是面向过程的编程,将任务分成若干个小任务,每个小任务由一个函数来完成功能;

      高阶函数:允许接受函数为为参数的函数称为高阶函数;

      map:接受一个函数,一个序列,将传入的函数参数作用于序列每一个元素上并还回一个list

      map(fn[1,2,3,4]

      reduce:将函数依次作用于连续的每2个元素上并还回一个结果和;

      reduce(fn,[1,2,3,4]

      filter():接受一个函数,一个序列,将传入的函数参数作用于序列每一个元素上并根据还回的ture or false,决定是否丢弃对象到还回结果集

      sorted():高级函数,接受函数和序列,函数作用于每一个序列元素上;
    7.装饰器,模块,
     

        def now():
        f = now
        f.__name__ #now

      装饰器 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。  

        decorator就是一个返回函数的高阶函数


    8.错误处理,调试,测试

        错误处理

            try:

           print('try...')

       except ZeroDivisionError as e:  #更多错误处理类可以网上查询:ioerror,valueerror,

         print('except::',e)

      finally:

           print('finllay...')

     调试

        1.是用print()把可能有问题的变量打印出来看看;

        2.凡是用print()来辅助查看的地方,都可以用断言(assert)来替代;如果断言失败,assert语句本身就会抛出AssertionError:

        3.把print()替换为logging是第3种方式,和assert比,logging不会抛出错误,而且可以输出到文件    logging.info('n = %d' % n)

        import logging
        logging.basicConfig(level=logging.INFO)

          logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定  level=INFO时,logging.debug就不起作用了

           第4种方式是启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态

       目前比较好的Python IDE有PyCharm,不过好像要收费,但网上可以找到注册码~~

             讲了这么多调试方法,不过虽然用IDE调试起来比较方便,但是最后你会发现,logging才是终极武器。

     

    测试:

      单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作


    9.IO文件读写

      f = open('/Users/michael/test.txt', 'r') #'r'表示

      f.read()

           f.close()

    readlines()一次读取所有内容并按行返回list
    readline()可以每次读取一行内容
    read(size)方法,每次最多读取size个字节的内容
    read()会一次性读取文件的全部内容

    for line in f.readlines():
    print(line.strip()) # 把末尾的' '删掉

    要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可,'w'写文件
    f = open('/Users/michael/test.jpg', 'rb')
    f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')


    10.序列化,进程,多线程

    Python语言特定的序列化模块是pickle,但如果要把序列化搞得更通用、更符合Web标准,就可以使用json模块。
    json模块的dumps()和loads()函数是定义得非常好的接口的典范.

    pickling:

    pickle.dumps(d)# str to bites
    pickle.loads()方法反序列化出对象 @ bites to str
    要把JSON反序列化为Python对象,用loads()或者对应的load()方法
    print(json.dumps(s, default=lambda obj: obj.__dict__)) #把任意class的实例变为dict

    把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling
    序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

    unpickling:
    反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

    import pickle
    >>> d = dict(name='Bob', age=20, score=88)
    >>> pickle.dumps(d)

    pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object
    >>> f = open('dump.txt', 'wb')
    >>> pickle.dump(d, f)
    >>> f.close()

     

    多进程:

    Python既支持多进程,又支持多线程

    线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间


    11.正则表达式, re模块

    [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
     [0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;

    [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
     [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)

    re.split(r's+', 'a b c')

    正则表达式非常强大,在这里只是提了一点点,具体的可以网上查询。


    12.常用内建模块

    1.datetime是Python处理日期和时间的标准库 

    1.获取当前日期和时间
    2.获取指定日期和时间
    3.datetime转换为timestamp
    4.timestamp转换为datetime
    5.str转换为datetime
    6.datetime转换为str
    7.datetime加减
    8.本地时间转换为UTC时间
    9.时区转换
    from datetime import datetime
    now = datetime.now() # 获取当前datetime
    datetime(2015, 4, 19, 12, 20)
    cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
    print(now.strftime('%a, %b %d %H:%M'))
    now + timedelta(hours=10)
    utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)

    2.urllib
    3.HTMLparser
    4.XML
    5.base64


    13.常用python web框架

           flask(小型),用过,适用于小型项目;

           django(大型):

        web这块涉及内容较多,具体的大家可以在网上查找学习,这里不一一说明.

    -----------------------------end------------------------------------

    参考书籍:

    书 《Python3-廖雪峰》,《笨办法学 Python(第三版)》

     

    python学习总结

    作者:csj

    学习时间:2016---2017.03
    email:59888745@qq.com

  • 相关阅读:
    2171 棋盘覆盖
    [网络流24题] 骑士共存
    COGS28 [NOI2006] 最大获利[最大权闭合子图]
    1066: [SCOI2007]蜥蜴
    1877: [SDOI2009]晨跑
    POJ 2125 Destroying the Graph 二分图最小点权覆盖
    LA 3231
    3028: 食物
    PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
    1597: [Usaco2008 Mar]土地购买
  • 原文地址:https://www.cnblogs.com/csj007523/p/8150147.html
Copyright © 2011-2022 走看看