第一章 pyhton基础

一 、pyhton2与python3的区别

  在pyhton2中,其中编码默认使用的是ascii编码,输出格式为print"xxx",输入为raw_input(“请输入”),在整型中有int和long两种,计算除法的时候只能保留整数,还有range生成列表和xrange生成迭代器两种,在创建模块的包时需要在包中创建一个__init__.py文件,字符串在电脑中的编码分为Unicode和str,深度优先。

  在python3中,其中编码默认使用的是utf-8编码,输出格式为print("xxx"),输入为input("请输入"),在整型中只有int型,除法会保留全部结果,并且只有一种range生成的为迭代器,在电脑里编码为str和byte,在创建模块的包时可以只用,广度优先。

 

二、数据类型

  1. int整型

    整数称为整型,并且可以利用int()将可以变为整型的其他类型变为整型。

  2.str 字符串不可变类型

    2.1 表示方法

      可以用单引号''双引号""表示

      ‘’和""表示空字符串

    2.2 字符串方法

      变大写:字符串.upper()

      变小写:字符串.lower()

      将字符串居中两边用*代替每边有6个:字符串.center(6,'*')

      判断是否可转换成数字:字符串.isdecimal()

      去除空格、换行符(\n)、Tab(\t):字符串.strip()

      把字符串的z替换成x:字符串.replace('z','x')

      把字符串根据x切割成列表(其中不包含x):字符串.spilt('x')

      判断是否已x开头或者结尾(返回布尔值):字符串.startswith/endwith(x)

      字符串格式化:%s为字符串、%d为数字  例:'%s在教室‘(name,)

      循环每个元素并在每个元素之间加入指定的连接符:连接符.join(字符串)

  3 bool 布尔值

    布尔值只有True和False两种

    对于bool类型来说:整数0为Flase,其余为True

    字符串空‘’为Flase,其余为True

    列表[]为Flase,其余为True

    元组空()为False,其余为True。

  4 list 列表

    4.1 概念和表示方法

      当想要表示多个事物的时候可以用列表,用[]表示,每个元素用逗号隔开

    4.2 列表的方法

      在列表后追加元素:列表.append(元素)

      在指定索引位置进行插入元素:列表.insert(1,'xxx')

      删除从左到右的第一个匹配元素:列表.remove('xxx')

      删除匹配到的索引位置的元素(默认删除最后一个):列表.pop(2)

      清空列表:列表.clear()

      在原有的列表中加入另外一个列表:列表1.extend(列表2)

      列表的排序从小到大:列表.sort(reverse=False)

      列表的排序从大到小:列表.sort(reverse=True)

    4.3 强制转换

      字符串强制转换成列表:v1 = list("dskjfd")
      元祖强制转换成列表:v2 = list((11,22,33,44))

    4.4 嵌套

      列表中可以互相嵌套:[1,[11,22],2]

  5 tuple元组

    5.1 元组的书写规范和概念

      书写规范:user=(11,22,33,'如果')

      元组没有方法,且元组中的数据不可改变

    5.2 嵌套

      元组嵌套元组:(11,22,(1,2))  #数据不可改

      元组嵌套列表:(11,22,[1,2])  #列表中的数据可以改,但是不能改元组的元素包括列表

      列表嵌套元组:[1,2,(11,22)]  #列表中的数据可以改包括元组,但是不能改元组的元素

    5.3 强制转换

      列表转成元组:v1 = tuple([1,2,3])

  6 dict 字典

    6.1 字典的书写规范

      dict = {'键':'值','键’,‘值’},冒号前后称为一个键值对

      例:dict1 = {'name':'如果','age':'20'}

    6.2 字典的方法

      获取字典中所有的键:info.keys()  #不可用可变类型当做字典的键

      获取字典中所有的值:info.values()

      获取字典中所有的键值对:info.items()

      查找字典中是否有指定的键:字典.get('键') #不存在返回None

      给字典添加键值对:字典['键']=‘值’

      更新字典的值,存在则更新,不存在则添加:字典.update({'键‘:'值'})

  7 set 集合

     7.1 集合的书写规范

      书写规范:v = {1,2,3,4}

      空集合:v = set()

      注:集合中的元素不能存在重复,且集合元素无序

     7.2 集合的方法

      集合添加元素:集合.add(元素)  #集合中若存在则不添加

      集合删除元素:集合.disable(元素)  #无序不重复,不能用索引

      集合的更新:集合.update(元素)  #批量添加

      集合的交集:new_set = set1.intersection(set2)  #在set1和set2的交集

      集合的并集:new_set = set1.union(set2)

      集合的差集:new_set = set1.difference(set2)

  8 数据类型公共方法

    索引:获取第一个位置的元素(从0开始):x[0](排除:int/bool/set)  #x[-1] 复数从后向前

    切片:获取一部分元素(取前不取后)(排除:int/bool/set)

         例题:v = '现实没有如果'

            v1 = v[2:4] 获取到位置为2到3的字符串  #没有

          v2 = v[3:] 获取到位置为3到最后的字符串  #有如果

          v3 = v[:-1] 获取从开始到-2位置的字符串 #现实没有如

    步长:获取其中某字符(排除:int/bool/set)

       例题:name = ’alexalex‘

          val = name[1:-1:2]  获取从1到-1每间隔为2的所有字符 #lxl
          val = name[1::2]  获取从1到最后每间隔为2的所有字符 #lxlx
          val = name[::2] 获取从开始到最后每间隔为2的所有字符 #aeae
          val = name[-1:0:-2]  获取从-1到0每间隔为-2的所有字符 #xlxl
          val =name [::-1]  将字符串反转 #xelaxela

    删除(排除:str/int/bool/set)

    for循环(排除:int/bool)

    len:计算长度,判断有多少元素(排除:int/bool)

  9 条件判断

    9.1  if 条件:
         内容

    9.2   if 条件:

         内容

        else:

         内容

    9.3  if 条件:

         内容

         elif 条件:

         内容

        else:

         内容

    9.4  三元运算(三目运算)

        简单的if条件时使用:v = 前面 if 条件 else 后面  #条件为True,则v = 前面  条件为False,则v = 后面

  10 循环

    10.1 while 循环

      基本条件:while + 条件  例:while True:(永久成立)

      关键字:break   例:while True:

                    break   #终止循环

      关键字:continue    while num <10:

                    continue #循环如果遇到continue则直接执行下一次循环,不执行下面

      关键字:else  #不满足while后的条件时触发

    10.2 for 循环

      基本条件:for 变量 in 被循环数据:  例:for i in 'alex':

      关键字:break   例:for i in 'alex':

                    break   #终止循环

      关键字:continue    for i in 'alex':

                    continue #循环如果遇到continue则直接执行下一次循环,不执行下面

      关键字:else  #不满足for后的条件时触发

  11 运算符

    11.1 普通运算符

      加:+  减:-  乘:*  除:/  取余数:%  次方:**  取商的整数://

    11.2 比较运算

      等于:==  不等于:!=  大于:>  小于:<  大于等于:>=  小于等于:<=

    11.3 赋值运算

      c=a+b:将a+b的结果赋值给c

      c+=a,等效于c=c+a

      c-=a,等效于c=c-a

      c*=a,等效于c=ca

      c/=a,等效于c=c/a

      c%=a,等效于c=c%a #取余数

      c**=a,等效于c=c**a

      c//=a,等效于c=c//a #取整数

    11.4 逻辑运算

      与:and  例:x and y 如果X为False,取X否则取Y

      或:or   例:x or y 如果x为False,取y否则取x

      非:not  例:如果x为Flase,则取True,否则为Flase

    11.5 成员运算符

      判断某字符串中是否含有某字符:in

      判断某字符串中是否不含有某字符:not in

    11.6 运算符优先级

      

三 内存相关

    查看内存地址:print(id(v1))

    python常用地址:-5~256

    ==和is的区别:==只是比较值是否相等,is比较内存地址是否一致

    例一  v1 = [1,2,3]  v2 = [1,2,3]  #数据一致但是存储磁盘内位置不一致

    例二  v1 = [1,2,3]  v2 =v1  v1.append(666)  print(v2)#[1,2,3,666] #v2把自己指向v1数据的地址,当v1添加时,v2也存在

    例三  v1 = [1,2,3]  v2 =v1  v1 = [11,22,33]  print(v2)#[1,2,3]  #v1被重新赋值,v2指向原内存地址,v1已开辟新内存地址

    例四  v1 = [1,2,3]  v2 = [11,v1]

          v1.append(9)  print(v2)#[11,[1,2,3,9]

          v2[1].append(999)  print(v1)#[1,2,3,999]

          v1 = 999  print(v2)#[11,22,[1,2,3]]

          v2[1] = 999  print(v1)#[1,2,3]

四 深浅拷贝

    格式前提:import copy #copy属于新建内存地址

    浅拷贝只会拷贝可变类中的第一层可变类,深拷贝会拷贝所有的可变数据。

    

#str/int/bool都是按照此方法深浅拷贝
a=“dlkfjsdlk”
b = cogy.copy(a)###浅拷贝
c = copy.deepcopy(a)###深拷贝

#list/set/dict无嵌套深浅拷贝无区别
v1 = [1,2,3]
v2 = copy(v1)###复制之后的地址指向原来
v3 = deepcopy(v1)###找到所有可变类型进行拷贝

#list/set/dict有嵌套深浅拷贝的区别
v1 = [1,2,[33,99]]
v2 = copy(v1)###复制第一层内存地址,如有嵌套,只指向内存地址,不复制
v3 = (v1)###复制所有可变类型,不拷贝数据

#因为元组属于不可变类型所以深浅拷贝地址都不变
v1 = (1,2,3,4)
import copy
v2 = copy.copy(v1)###地址不变
v3 = copy.deepcopy(v1)###地址不变
#特殊:存在元组嵌套列表时
v1 = (1,2,3,[1,2,3],4)
v2 = copy.copy(v1)###地址不变
v3 = copy.deepcopy(v1)###如果元组中存在可变的列表,则地址要变

五 文件操作

     打开文件

      f = open('要打开的文件',mode='r/w/a',encoding='文件原来写入时的编码')  注:当要打开的文件是在windows中创建的时候,编码后要加-sig

      mode有很多种:r 只读,文件不存在则报错    w只写,打开文件的孙坚文件内容全部清空,文件不存在则新建    a 追加,打开文件并在末尾追加需要输入的但不能读

               r+可读可写,默认光标在最前    w+可读可写,打开时文件会被勤工,默认光标在最后,读取时需要把光标移动到最前    a+打开文件,默认追加,光标在最后

               rb 读出为字节  wb 写入字节  ab 追加字节(当读、写、追加为字节时,不需要添加encoding)

      同时打开两个文件的方式:  make open ('文件路径',mode='r/w/a',encode='utf-8') as f,open ('另一个文件路径',mode='r/w/a',encode='utf-8') as f2;

    操作文件

      读:content = f.read(X)  #表示每次往内存中读X个字符不填默认全部读取  当文件比较大时,利用循环将文件内容一部分一部分读取出来

        content = f.readlines()  #表示每次往内存中读一行,使用循环可以读出所有的文件,需要使用strip去除换行符

#例题:文件读操作,每次读10行,并且不占用文件
while True:
    f = open('db','r',encoding = 'utf-8')
    data_list = []
    for i in range(10):
        line = f.readline()
        if not line:
           return
        data_list.append(line)
    cursor = f.tell()    #游标位置
    f.close()
    for row in data_list:
        yield row        #生成器
View Code

      写:f.write(X)  #在X处替换你要写的内容

      关闭:f.close()  #必须关闭,否则读写都在内存中,无法保存

        注:使用with open()格式打开的文件,当代码写到文件缩进外时,自动关闭

      修改文件内容:只能同时打开两个文件,一个读,把读出的需要改的内容改完后,逐条写进新文件中

        make open ('文件路径',mode='r/w/a',encode='utf-8') as f,open ('另一个文件路径',mode='r/w/a',encode='utf-8') as f2;

            date1 = f1.read()
            date2 = date1.replace('xxx','yyy')  #把date1中的xxx改成yyy

            f2.write(date2)

posted @ 2019-05-21 21:21  现实没有如果  阅读(493)  评论(0编辑  收藏  举报