zoukankan      html  css  js  c++  java
  • python易错点汇总,不定期更新

    工作之余会总结一些细小的知识点,但又不至于发一篇博客,以后将细小的知识点积累供自己备忘;

    主要分为两个模块: python基础知识、Linux知识、python编程题

    一 、Python

    1.正则中group()、group(0)、group(1)、group(s)的区别?.

     结论:group取索引是从1开始的,索引group()和group(0)是一样的,group(1)可以取到第一个括号的元素,groups()返回的是所有匹配对象的元组

    2.你真的懂GIL吗?

    概念:Cpython解释器在同一时刻只允许一个线程执行

    问题:本地有两个python文件:a.py中开启5个线程,b.py中开启3个线程,问:同一时刻有几个进程,几个线程??

               首先明确下进程是系统进行资源分配和调度的一个独立单位;线程是进程的一个实体,是CPU调度和分派的基本单位

               两个python文件相互独立,肯定同一时刻肯定有两个进程,两个进程共开启8个线程,但是每个进程中同一时刻只允许一个线程执行,

               所有a.py中开启了5个线程,但只用一个在执行,,所以两个文件同一时刻有两个进程,两个线程,其余的线程处于挂起状态并不会打断,

               那么python中的多线程真的一点用没有吗,分情况看了,,如果多个线程全都是计算密集型的话python确实有点鸡肋,但如果多个线程有IO操作的话,其中一个               线程处于IO操作时另一个线程就可以运行,所以在IO多线程操作中python线程还时有作用的

    3.字典的排序(比较简单,但是容易遗忘)

     4. 字典的update()没有返回值

          两个字典合并时可以使用update()方法,但是注意update没有返回值,代码如下:

    5. 巧用字符串split()的第二个参数

       字符串的split()操作经常使用,但是它有三个参数,第二个参数step可理解为切割几个,看代码:

    6. 巧用re.split()方法一个拆分多个分隔符

        字符拆分时最先想到的自然是split()方法,,但是字符串的split方法每次只能按一个分隔符拆分,遇到要按多个分隔符拆分的场景可以使用re.split

        re.split()一次可以指定多个分隔符,并且可以指定正则,如下案例可一次指定四种分隔符,其中s为空格

       

     7. python重写父类的__init__方法

     8. python2与python3的编码和字符

        版本          编码格式      文本字符串        字节序列

        python2     ascii             unicode             str

        python3      utf-8            str                     bytes

      9. 函数的元信息,类似函数的参数和返回值注释,是python3.6之后引入的新特性

        

        其中函数参数冒号后面为参数的类型,指定x和y的参数类型均为int,->为函数返回值的类型,注意不是箭头,是短横线和大于号的拼接;

        虽然自己平时写代码基本不用,但是看大佬的代码中基本都是这样写的;

     10. python函数中单下划线和双下划线的区别

         单个下划线:又称口头私有变量,一般来讲,变量名_xx被看作是“私有 的”,在模块或类外不可以使用。其实这并不能完全做到真正的私有,只是约定俗成的而已,不能用from module import * 导入,其他方面和公有一样访问;

         双下划线:这是私有变量, 只有内部可以访问,外部不可以访问。但是也不是一定不可以访问,只是解释器把该变量解释成 _类名__xx 。但最好不要这样做,养成良好编程习惯

         

     11. 使用collection模块快速实现队列和栈

           python实现队列和栈可使用列表创建,其中队列的话添加使用insert(0, "")添加元素用pop删除元素实现先进先出,栈的话使用append添加使用pop删除实现先进后出,但是insert效率太低,下面介绍collection中的deque结构;

          deque其实是 double-ended queue 的缩写,翻译过来就是双向队列,允许两端操作元素,主要操作如下

          append: 从队列右侧添加元素
          appendleft:从队列左侧添加元素
          pop: 从队列右侧移除值
          popleft: 从队列左侧移除值

    下面代码可以实现即是队列也是栈的结构体

     

     二、Linux操作

    1. set指令最常用的两个参数意义

       set  -e  若指令传回值不等于0,则立即退出shell;

       set  -x 执行指令后,会先显示该指令及所下的参数

     2. chown修改权限

         chown -R user:group file

         修改file目录下的所有文件为user用户和group组

    3. grep遍历目录下查找某个信息

        grep -r pattern path  遍历path目录下的文件,查找path下的文件是否包含pattern信息

        grep -n '^$'  file    查找file文件中空行的行号

    4. shell中多行注释

        多行注释有多种方式,其中COMMENT较为简单,使用如下:

        <<"COMMENT"

         需要注释的信息。。。。

       COMMETN

     5. vmstat 查看给定时间间隔服务器状态,主要用于性能监控分析,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数

         vmstat  1  3  一秒输出一次,总共输出三次;

         vmstat  1  一秒输出一次,中间不间断;

         命令显示如下,主要包括cpu使用率,内存及io情况

     三、python编程题

    1. 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足以下要求:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

    例如,"{[{()}]()}"就是一个闭合的有效字符串。

    实现思路

    这里我们运用  里面 先进后出 的思想来处理问题。

    • 遍历字符串中的每一个括号
    • 定义一个空列表,如果遇到左括号,就存储到列表中
    • 如果遇到右括号,判断列表是否为空,不为空就弹出列表中最后一个左括号,并判断右括号和弹出的左括号是否匹配,不匹配则返回 False
    • 如果遇到右括号,且列表为空,那么也就表示列表中没有匹配的括号,则直接返回 False
    • 遍历结束,最后再判断列表是否为空,不为空则表示左/右括号有多余的,返回 False ; 为空则表示是闭合的有效字符串,返回 True

    代码实现如下:

     2. 只包含整数的列表,只遍历一次取出第二大的数值,不能使用sort()函数

    未完待续~~~~

  • 相关阅读:
    背包九讲——动态规划
    Collection、Map、数组 遍历方式
    TCP三次握手与四次挥手
    数据结构——B树、B+树
    数据结构——红黑树
    数据结构——二叉查找树、AVL树
    jquery 抽奖示例
    comebotree树
    初玩Linux部署项目
    springMvc + websocket 实现点对点 聊天通信功能
  • 原文地址:https://www.cnblogs.com/skaarl/p/13961332.html
Copyright © 2011-2022 走看看