• Python基础3


    python的面向对象:

    成员变量(属性):

    类属性:在类内直接定义的。

    实例属性:通常会在构造函数中通过self去定义。

    无论是类属性还是实例属性都可以随时添加。

     

    成员函数(方法):

    普通的方法:默认传递的是self 代表的是对象本身 可以访问实例属性

    类方法:默认传递的是cls 代表的是类本身 可以访问类属性 不能访问实例属性

    静态方法:没有默认参数 但是可以通过类名访问到类属性

    类方法和静态方法区别并不大。通过需要访问类属性时,使用类方法,反之,使用静态方法。

     

    权限控制:

    _ 不应该在类外访问,推荐在类内或者子类的类内去使用 相当于时保护的成员

    __ 不应该在类外访问,也不推荐在子类访问,相当于是私有的成员。会被修改名字,修改为

    _类名__成员名

    python中的权限控制,在语法并没有过多的限制。只是依靠大家的使用习惯。

     

    继承:

    python支持单继承,也支持多继承,只要在类名后的括号中写上父类的名字的就可以了。

    super(子类名,self).成员

    如果继承的时候出现了重名,造成了二义性,python会从下往上去寻找,找到的一个,就直接使用。

    多态:

    python天然支持多态,因为并没有参数类型的检查。只要对象有那个函数,就可以调用。

     

    异常处理

    try

    raise 异常类型("抛出异常时的字符串信息")

    except 异常类型 as info

    得到此类型异常的时候,会执行这里

    except ......

    .....

    finally

    无论是否产生异常,都会执行finally中的语句。

     

    高阶函数

    filter(函数,列表) 将列表中的每一个元素传递到函数中,函数返回true,就将元素添加到新列表中

    最终将新列表返回。

    reduce(函数,列表) 将列表中的成员第一次取出2个,带入到函数计算。以后每次将计算的结果和列表中的下一个元素带入到函数中,直到所有元素都被使用过,最后将计算得到的值返回。

    map(函数,列表) 将列表中的每一个元素传递到函数,计算,将计算结果组成一个新的列表。

    这种函数一般都配合匿名函数使用

    lambda 参数:返回值

    闭包:

    python是一个完全的面向对象语言。

    函数也是一个对象

    def outer(num):
      a = num*2
      def inner(test):
           
          return a*test
      #在返回函数对象的时候,函数对象会将此时的环境信息包裹在函数对象中一并返回
      #这种行为称之为闭包
      return inner
    m = outer(10)
    print(m(5))

     

     

     

    装饰器

    def w1(func):
      def inner(a):
          print("开始检测")
          m = func(a)
          print("收尾工作")
          return m
      return inner
    @w1
    def fun1(a):
      print("复杂工作",a)
    @w1
    def fun2(b):
      print("复杂工作",b)
    @w1
    def fun3(b):
      print("复杂工作",b)

    fun1(100)

     

    @w1的作用就是

    将w1下面的函数作用参数赋值给w1,然后将返回值返回给下面的函数。

    @w1

    def fun1():

    ...

    fun1 = w1(fun1)

     

     

    fun1()

     

    时间模块:

    import time
    #获得时间戳
    m = time.time()
    print(m)
    #将时间戳转换为元组信息
    ti = time.localtime(m )
    print(ti)
    print(ti.tm_year)#也可以输出每一个字段
    #将元组信息转换为字符串
    #Y 年   m 月   d 日   H 时   M 分   S 秒
    #转换的时候,不必写全,写什么就有什么
    nowtime = time.strftime("%Y-%m-%d",ti)
    print(nowtime)
    print(time.strftime("%H-%M-%S",ti))
    print(time.strftime("%Y-%m-%d-%H-%M-%S",ti))
    li = nowtime.split("-")
    print(li)

     

    datatime模块

    data

    m = datetime.date.today()   #可以是今天的日期
    m = datetime.date(2019,6,5) #也可以是自定义的
    print(m.timetuple())
    n = m.replace(2018,1,5)   #可以用replace构建一个新的
    print(n)

    time

    m = datetime.time(9,23,4)
    print(m)
    print(m.strftime("%H--%M--%S"))

    datetime

     

    m = datetime.datetime.now()
    print(m.timetuple())
    print(m.strftime("%Y--%m--%d--%H--%M--%S"))

     

    timedelta:专门用于时间计算的类

    两个datatime对象相减 得到的就是timedelta对象

    当想计算过了多少天 是什么日期,是礼拜几的时候,也需要用到这个对象

     

    import datetime

    m = datetime.datetime.now()
    sub = datetime.timedelta(days=1)
    n = m +sub #明天
    print(n)
    n = m-sub #昨天的这个时候
    print(n)
    sub = datetime.timedelta(days=365)
    n = m+sub #明年
    print(n)

     

    随机:

    在一个范围内生成随机数

     

    import random
    m = random.randrange(1,100)
    print(m)

    打乱序列

    import random
    li = [1,2,3,4,5,6,7,8,9]
    random.shuffle(li)     #打乱一个序列
    print(li)

     

    示例,生成随机验证码:

    temp = ""
    for i in range(0,6):
      m = random.randrange(1,3)
      if m==1:
          n = random.randrange(1,10)#随机生成数字
          temp+= str(n)
      else:
          n = random.randrange(65,90)#随机生成字符
          temp+=chr(n)
    print(temp)

     

     

    目录和文件操作;

    示例:

    #列出某一个文件夹下的所有内容
    print( os.listdir("C:\"))
    #os.remove("D:\123.txt")
    m = os.path.isfile("D:\123.txt")
    print(m)

     

     

    文件操作:

    import os
    f = open("D:\123.txt","a+")
    f.write("hello wrold")
    f.close()

    pyhton的多线程编程:

    import threading

    def loop():
      while True:
          print("--------我是子线程-------")
          print(threading.current_thread().name)

    th = threading.Thread(target=loop,name="hello 15PB")
    th.start()
    while True:
      print("--------我是主线程-------")

     

     

    多线程容易产生资源争抢问题,可能会对资源造成破坏。

    解决这个问题的基本方式:

    定义一个全局的锁(windows:临界区 互斥体 事件....)

     

    上锁

    操作共享资源的时候。

    解锁

    import threading

    m = 0
    lock = threading.Lock()
    def loop1():
      global m
      global lock
      for i in range(0,1000000):
          lock.acquire()
          m +=1
          lock.release()

    def loop2():
      global m
      for i in range(0, 1000000):
          lock.acquire()
          m += 1
          lock.release()
    th1 = threading.Thread(target=loop1,name="hello 15PB")
    th2 = threading.Thread(target=loop2,name="hello 15PB")
    th1.start()
    th2.start()

    th1.join()
    th2.join()

    print(m)
  • 相关阅读:
    SpringRMI解析3-RmiServiceExporter逻辑细节
    SpringRMI解析2-RmiServiceExporter逻辑脉络
    SpringRMI解析1-使用示例
    SpringMVC解析5-DispatcherServlet逻辑细节
    SpringMVC解析4-DispatcherServlet逻辑脉络
    SpringMVC解析3-DispatcherServlet组件初始化
    SpringMVC解析2-ContextLoaderListener
    算法笔记_074:子集和问题(Java)
    算法笔记_073:哈密顿回路问题(Java)
    算法笔记_072:N皇后问题(Java)
  • 原文地址:https://www.cnblogs.com/ltyandy/p/10981655.html
Copyright © 2020-2023  润新知