python查获漏补缺

119 阅读4分钟

1.0 python基础知识总结: sudo dhclient

1.1导入模块:把功能相近的函数放在一个文件中, 一个.py文件就是一个模块model,模块名就是文件名去掉.py后缀, 提高代码复用性。
        import 模块名: 模块名.函数  ,模块名.类
        from 模块名 import 功能函数:  直接函数和类
        from 模块名 import *
        from 模块名 import 功能函数 as 别名   (是调用时候只能调别名才行)
导入包:
        import 包名.模块名    (可以点多个包名下的子模块名)
        **from 包名 import*     (必须在`__init__.py`文件中添加`__all__ = []`,控制允许导入的模块列表。)**
        
__init__:导入包是默认执行这个文件
循环导入: A模块导入B模块中,B模导入A模块中

可以把 from***import 放到函数里面,或者最后也可以 image.png

第三方包:time  datetime  random   os  json   
        time模块: 时间戳
        import time
        print(sys.version)

        # 函数运行时间
        a = time.time()
        print(a)

        # sleep  延迟函数计算时间
        # time.sleep(3)
        # # 打印当前时间字符串
        s = time.strftime('%Y-%m-%d')
        print(s)

        # 将时间戳转换为元组
        d = time.localtime(a)
        print(d)

        # 将元组转换为时间戳
        f = time.mktime(a)
        print(f)

        
文件夹:非py文件  Diractory
包: py文件      Package
模块: 就是.py文件
项目 > 包 > 模块 >类 >函数 >变量
1.2测试用例: if __name__ == '__main__':
                test()
   可以让导入包时,不执行if下面的测试用例,只能在本模块下才能执行

1.3继承:
    子类重写父类方法
    子类多继承,先继承第一个父类的属性, 广度优先
    类名.__mro__  打印出继承关系     
    
1.4 super 继承方法:
    继承前一个的属性   super().__init__(参数)
    先找当前类,再找父类,同名方法叫作 “重写” 默认找子类的方法                
    
 例子一:
    class Person(object):
def __init__(self, name, sex):
    self.name = name
    self.sex = sex

class Student(Person):
    def __init__(self, name, sex, hight):
        super().__init__(name, sex)
        self.hight = hight

def study(self, cource):
    print('{}正在学习{}课程'.format(self.name, cource))

s = Student('jake', 'man', 18) #父类传参
s.study('python基础')  #调用子类方法  

例子二:
class Person(object):
    def __init__(self, no, name, salary):
        self.no = no
        self.name = name
        self.salary = salary
    def __str__(self):
        mas = '工号{}, 姓名{}, 本月工资{}'.format(self.no, self.name, self.salary)
    def getSalry(self):
        return self.salary
class Worker(Person):
    def __init__(self, no, name, salary, hours):
        super().__init__(no, name, salary)
        self.hours = hours
    def getSalry(self):
         money = self.hours * 5
         eturn money

chen = Worker(12, 'ch', 15, 16)  # 全部参数都要传递
a = chen.getSalry()   # 调用子类方法,没有参数就不用传递参数
print(a)
   
  例子三:
  class Test(object):
        def __init__(self, age):
            self.name = 'mmm'
            self.age = age
        def eat(self):
            if self.age > 9:
                print('可以吃饭')
            else:
                print('不能吃饭')

  class Test_1(Test):
        def __init__(self, age, sex):  # 调用类所要传递的参数
            super().__init__(age)  # 继承的父类的变量,已经知道的变量不用继承 
            self.sex = sex
        def eat_1(self):
            if self.sex == 'man':  # 如果是同一个类或不同类里面的已有属性,则不用传递参数 , 用已知参数
                print('你是男的')
                print(self.name)
            else:
                print('不是男的')

    chen_1 = Test_1(18, 'man')  # 早在调用类时就要给__init__传递参数,
    chen_1.eat_1()   # 调用方法的参数如果和类中的初始化参数不一样,就要自己传递
     
   

1.5 异常:
获取错误原因:
             except Exception as error:
             logging.error(error)
             
手动扔异常:
            

image.png

文件操作:

os模块:
   

    # # 冒泡排序
# def test(num):
#     for j in range(0, len(num) - 1):
#         for i in range(0, len(num) - 1 - j):
#             if num[i] > num[i+1]:
#                 num[i], num[i+1] = num[i+1], num[i]
#                 # a = num[i]
#                 # num[i] = num[i+1]
#                 # num[i+1] = a
# 
#     return num
# 
# a = test([4,2,6,1,5])
    # print(a)z

  列表推导式:
      for每遍历一遍就会把x值返回给if后面的值
![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e77c87d81ddc433d9ee15f4963976339~tplv-k3u1fbpfcp-watermark.image?)

      生成器:可以节省内存,一个一个拿得到,常用在协程里面
      (generator)
      通过列表推导式的方式,只不过是圆括号,
      函数加  yield  也可以将函数变成生成器
      print一次生成一次元素值 next 生成一个新的元素
      圆括号的生成器(x for x in range(5))
  
  迭代器和可以迭代的:
    迭代器:可以被next函数调用,并不断返回下一个值的对象成为迭代器,例如生成器
    ;列表是可以迭代的,但不是迭代器, 可以通过  iter() 转换为迭代器
    
    list = 1
    f = isinstance(list, Iterable)
    print(f)   # 返回是True为可以迭代的, 整形是不能迭代的对象
    
    

image.png

2.0 正则表达式: 对字符串对特定字符, 组成一个字符串形成特定逻辑, 用来过滤

re模块: re.match( )

3.0 进程 > 线程 > 协程
    进程之间是独立的,进程是系统进行分配的,为了更快的完成任务。 cpu会开销一个空间
    非阻塞式:全部添加到队列中,立即返回,并没有等待,最大化cpu的效率 pool.apply_async()
    阻塞式:  添加一个任务执行一个任务                 pool.apply()
    
     from multiprocessing import Process
    def task1():
        while True:
            # sleep(1)
            print('这是任务一')

    def task2():
        while True:
            # sleep(1)
            print('这是任务而2')
    if __name__ == '__main__':
        p = Process(target=task1, name='任务一')
        p.start()
        p1 = Process(target=task2, name='任务二')
        p1.start()
    
    
    进程间的通信: put方法  get获得
    from multiprocessing import Pool, Process
    def task1(q):
        images = ['a', 'b', 'c']
        for i in images:
            print('正在下载:', i)
            sleep(1)
            q.put(i)


    def task2(q):
        while True:
            file = q.get()
            print('{}保存成功'.format(file))

    if __name__=='__main__':
         q = Queue(5)
         p1 = Process(target=task1, args=(q,))

         p2 = Process(target=task2, args=(q,))

         p1.start()
         p2.start()

    线程:互不干扰,并发执行, 进程开销大,线程开销小,依赖进程,耗时操作的比较大的任务使用线程, 
    状态: 新建状态,对象创建完成后,就绪状态,运行状态,阻塞状态,