Python学习笔记(持续更新中)

时间:2022-12-03 22:15:35
Python学习笔记一、基本数据类型
  1. Python基本数据类型只有数字和字符串,基本数据类型都是不可修改的变量。其中,数字包括整型、浮点型和复数。字符串包括普通字符串、Raw字符串和转义字符
  2. Python集合类对象有:列表、元组、集合和字典。注意这些集合中允许存放不同类型的的元素或对象
  3. 注意不可修改变量(数字、字符串和元组)和可修改变量(列表、字典)的引用(即赋值语句时)存在的区别:不可修改变量进行赋值语句(如 x = y)时,x和y都指向相同对象(引用),但是y值指向对象改变时并不会影响x,因为不可修改变量每次使用都会创建新对象然后替换原本的引用。然而,可修改变量,如列表、字典虽然引用不会更改但是会发生引用所指向的内容修改。
  4. 多重赋值可用来交换两个变量。把它理解成”类似列表赋值操作“
  5. Python的序列包括列表、元组、字符串、Unicode字符串、Buffer对象和xrange对象。其中最常用的是列表、元组和字符串。序列公有的基本操作有索引、切片、序列加、序列乘、in、len、max和min.注意:max和min时需要list的类型是相同的,例如同是字符、数字或列表等,否则会抛出异常。
    '''
    以下是序列(列表、元组和字符串)的公用操作
    '''
    #列表
    list_l = ['a','b','c',6]
    print('序列(列表、元组和字符串)公用的基本操作包括如下:\n')
    print('索引list_l[1]=',list_l[1])
    print('切片list_l[1:]=',list_l[1:])
    list_add = list_l + [7,8]
    print('序列加list_add=',list_add)
    list_br = list_l*3
    print('序列乘list_br=',list_br)
    isin = 'a' in list_l
    print('in操作isin=',isin)
    len = len(list_l)
    print('len操作isin=',len)
    list_l_max = [['z','z'],['d','e']]
    max = max(list_l_max) #内部数据类型要一致,否则报错
    print('max操作max=',max)
    min = min(list_l_max) #内部数据类型要一致,否则报错
    print('min操作min=',min)
    #元组
    tuple_t = ('a','b','c',6)
    print('索引tuple_t[1]=',tuple_t[:])
    #字符串
    str_str = 'hello'
    print('索引 str_str[1]=',str_str[1:8]) #索引溢出也可以,保护缓冲区安全
  6. 列表是容器类型,可以放入任何类型的对象。列表的基本方法有:append,count——统计某元素在列表出现的次数, extend——相当于序列加,但是是原地修改,序列加是创建一个新的对象, index——查找某个元素的索引值,找不到会抛出异常,insert——可在任意位置上插入一个元素, pop remove reverse sort——可传入key=len根据长度排序,该排序函数花样较多具体参见API;
    '''
    列表的基本方法有:append,count——统计某元素在列表出现的次数,
    extend——相当于序列加,但是是原地修改,序列加是创建一个新的对象,
    index——查找某个元素的索引值,找不到会抛出异常,insert——可在任意位置上插入一个元素,
    pop remove reverse sort——可传入key=len根据长度排序
    '''
    #列表
    list_l = ['a','b','c','da']
    print('列表的基本方法包括如下:\n')
    list_l.append('d')
    print('append:',list_l)
    print('count for \'d\':',list_l.count('d'))
    list_l.extend(['y','x'])
    print('extend:',list_l)
    print('index:',list_l.index('d',4,10))
    list_l.insert(4,'p')
    print('insert:',list_l)
    list_l.pop(4#按位置移除
    print('pop:',list_l)
    list_l.remove('a'#按元素移除
    print('remove:',list_l)
    list_l.sort() #默认升序
    print('sort:',list_l)
    list_l.sort(reverse=True#降序
    print('sort reverse=True:',list_l)
    list_l.sort(key=len,reverse=True)
    print('sort key=len:',list_l)
  7. 元组跟列表差别不太,但是由于具有不可修改性,因此Python中很多内置函数返回值都是元组。
  8. 字典的键要求不可修改,因此键可以是数字、字符串和元组,字典的操作有查找、删除、增加、修改、len和in。字典的方法有:clear copy(注意用法,只是复制引用,可导入copy模块deepcopy进行深层复制),get setdefault hash_key items keys values pop popitem(随机删除其中一个) delete update;
  9. 集合分为可变集合(set)和不可变集合(frozenset)。集合基本操作有查找、添加、删除(remove和discard,remove删除不存在时会抛出异常,而discard不会),另外集合较特殊,有并(|)、交(&)、差(-)、子(超)集(>=或<=)或严格子(超)集(>或<)等操作,但是需要注意的是,在可变集合的前提下,a | b与a |=b具有完全不同的意义,前者会创建一个新对象,后面会原地修改a;
  10. 列表、元组、字典和集合通过赋值语句得到的新变量将是该对象的引用,若想复制一份对象,可分别用内置函数list()、dict()、set(),但是元组由于特殊的不可修改性,tuple()返回值还是该对象的引用。如图所示:
Python学习笔记(持续更新中)Python学习笔记(持续更新中)
二、流程控制1.布尔表达式中为假的条件有如下可能:None False 0 ""空串 ''空串 ()空元组 []空列表 {}空字典2.断言,assert能够及时发现程序出错并退出程序。例如num = 50assert num>50, 'num is too smaller'3.break语句只跳出当前层的循环。4.列表推导式是利用原始集合创建或推导新集合的一种方法。列表推导式中的“列表”含义指的是该运算定义在列表中进行,并不是指仅仅针对列表操作,对于Python集合类对象(列表,元组,集合和字典)均通用。Python学习笔记(持续更新中)
Python学习笔记(持续更新中)Python学习笔记(持续更新中)Python学习笔记(持续更新中)三、字符串1.字符串操作包括切片、格式化和字符串模板2.格式化形式format % values,values可以用元组或者字典来存储。3.字符串模板用于格式化字符串,使用了string模块中Template对象,该对象里面包括substitute()方法和safe_substitute(),前者更加严谨,缺少Key情况下会抛出异常,后者缺少情况下则原封不动地输出原始字符串。四、函数1.函数参数:定义def func(name, *var, **keys): 中name为正常参数; *var允许你传入 0个或任意个参数,并自动组装为一个tuple。而**keys关键字参数允许你传入 0个或任意个含参数名的参数,并自动组装为一个字典dict五、IO操作与文件1.input和raw_input区别:input会根据用户输入数据进行类型转换;raw_input输入数据作为字符串来处理。2.文件实现二进制操作可引入struct模块,利用pack将内容封装成二进制数据,利用unpack将填制数据解封成特定形式。3.Python中读写文件模式中"r+"、“w+”和"a+"的区别:"r+"若文件不存在时会报错,同时以追加方式写入;"w+"若文件不存在时会自动创建,同时以覆盖方式写入;"a+"若文件不存在时会自动创建,同时以追加方式写入。六、类1.Python类可以继承多个超类,用元组列出所有继承的类,例如(超类1, 超类2, 超类3),所有类都继承object类,class Bird(object):2.实例变量和实例方法:实例变量在类中无需显示声明和定义,只需要在实例方法中默认传入self参数,通过self.实例变量名即可生成一个实例变量。2.类变量和类方法:类变量在类中需要显示声明和定义,类方法默认传入cls参数,前面需要加入注解@classmethod2.静态方法:没有静态变量,静态方法前面需要加入注解@staticmethod3.实例方法、类方法和静态方法的区别:实例方法默认传入self参数;类方法默认传入cls参数,静态方法没有默认参数,静态方法无法访问实例成员和实例方法,静态方法一般用于工具类定义。4.虽然类变量和类方法可以通过实例名.类变量名实例名.类方法名访问,但是强烈不推荐该调用方式。5.实例方法对类变量只有只读权限6.实例变量和实例方法可以在名字前面加入双下划线"__",使得外部无法调用达到私有的目的。7.Python类的构造函数为__init__,只能定义一个,无法重载多个构造函数,但可能通过可变长的函数参数来解决这个问题。