• python学习笔记(五)


    38、继承

    子类继承父类时,如果不写init方法,表示继承父类的init方法。如果写了init方法,表示重写父类的init方法。其他方法也是同理。对于变量也是同样的道理。

    class A:

    def __init__(self):

    self.a=”a”

    self.b=”b”

    def print(self):

    print(self.a)

     

    class B(A):

    def __init__(self):

    super(B,self).__init__()   //注意继承书写的格式,类名写自己的类,self不能缺少。

    self.c=”c”

    def print_b(self):

    print(self.b)

    39、日期运算

    import datetime,time

    计算两个日期之间的差值:

    date5 = datetime.datetime.strptime('2012-9-22 12:35:40','%Y-%m-%d %H:%M:%S')
    date6 = datetime.datetime.strptime('2015-9-22 10:35:40','%Y-%m-%d %H:%M:%S')

    sep = date6 - date5

    print(sep)

    计算三天之后的日期:

    now = datetime.datetime.now()
    delta = datetime.timedelta(days=3)
    n_days = now + delta
    print(n_days.strftime('%Y-%m-%d %H:%M:%S'))

     其中strptime的类型是时间类,不是字符串格式。

    date1 = time.ctime()              #为字符串,不能进行加减运算

    date2 = datetime.date.today()      #date类,能与timedelta进行运算

    date3 = datetime.datetime.now()   #datetime类,能与timedelta进行运算

    虽然都能与timedelta进行运算,但是不能的类之间不能进行运算,如date2-date3

    time.strptime(),datetime.datetime.strptime(),两者都是将字符串转换为时间类,但属于不同的类。

    向一个开始输入框和结束输入框里输入时间,需要转换为string类型:

    startTime = datetime.date.today()

    startTimeStr = startTime.strftime()

    endTime = startTime - datetime.tiemdelta(days=3)

    endTimeStr = endTime.strftime()

    40、日志模块

    import logging

    logging.basicConfig(filename="config.log",filemode="a",
                        format="%(asctime)s--%(name)s--%(levelname)s:%(message)s",level=logging.INFO)

    console = logging.StreamHandler()
    logging.getLogger().addHandler(console)

    # 上面两行是将日志同时输出到console,方便调试。
    logging.error("This is a error log.")
    logging.info("This is a info log.")

    41、python中的私有变量

    (1)_xx,以单下划线开头的标识的protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标识为,如当使用 from M import * 时,不会将一个下划线开头的对象引入。

    (2)__xx,双下划线的表示的是私有类型的变量。只能允许这个类本身进行访问,连子类也不可以用于命名一个类属性(类变量),调用时名字被改变(在类FooBar内部,__boo变成_FooBar__boo,如self._FooBar__boo

    (3)__xx__是定义特殊方法。用户控制的命名空间内的变量或是属性,如__init__,__import__或是__file__。只有当文档有说明时使用,不要自己定义这类变量。(就是说这些是python内部定义的变量名)

    在这里强调一下私有变量,python默认的成员函数和成员变量都是公开的,没有像其他类似语言的publicprivate等关键字修饰,但是可以在变量前面加上两个下划线“__”,这样的话,函数或变量就变成私有的,这是python的已有变量轧压(这个翻译好拗口,英文名称是private name mangling

    42、列表表达式和列表生成器

    列表推导式有包含一个表达式的括号组成,表达式后面跟随一个for字句,之后可以有零个或多个forif字句,结果是一个列表,由表达式依据其后面的forif字句上下文计算而来的结果构成

    a = [(x,y) for x in [1,2,3] for y in [2,3,5] if x!=y]

    这样,a就生成了一个列表,每个元素是由xy构成的元组。

    生成器表达式与列表表达式很像:m = ((x,y) for x in [1,2,3] for y in [2,3,5])

    引用生成器表达式中的值:

    print(m.__next__())

    print(m.__next__())

    总结:(1)把列表表达式的[]换成()得到的就是生成器表达式;(2)列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存。

    43、列表中元素去重

    列表有删除元素的方法,如list.pop(i)list.remove(value)del list[i]。有一点需要注意,每删除一个元素,后面的元素会自动前移一位,导致用for遍历的时候,每删除一个,后面的一个元素下标自动减1,使这个元素没被遍历到,从而出现遗漏。

    要想删除列表中所有的重复元素,就不能简单的用for,而是用递归。如下:

    list1 = [1,2,3,3,3,2,2,5,6,5,6]
    def delDupli(list1):
        for i in list1:
            if list1.count(i) != 1:
                list1.remove(i)
                delDupli(list1)
    delDupli(list1)
    print(list1)

  • 相关阅读:
    NDK 在 Android studio如何使用(Android studio NDK)
    懒人习惯之ButterKnife Zelezny
    Android 如何在Eclipse 引入外部纯Java项目(不是打成Jar使用)
    android:ellipsize="end" 失效或者 相关的Bug
    Python 父目录获取
    RecyclerView中实现headerView,footerView功能
    Win7/Win8.1右键菜单技巧:应用程序任意加
    使用android-resource-remover优化资源使用率和lint-result.xml如果导出
    Android Studio 1.1.0版本以上 优化编译
    关于Eclipse如何加入Gradle文件与Android Studio两个平台一起开发,工作目录不发生变化
  • 原文地址:https://www.cnblogs.com/yahutiaotiao/p/8030205.html
Copyright © 2020-2023  润新知