zoukankan      html  css  js  c++  java
  • python基础进阶

              python开发基础进阶

    1.程序的组成

    从两个方面分类:
      程序 = 数据 +(汇编)指令
      程序 = 数据结构 + 算法

        算法:编写程序的逻辑,解决问题的流程

    [tess.cpp]
    a=hello     #数据:a hello 这里为非数值型数据

          #数据结构:字符串

    if(a is hello): # 一个算法由n个指令组成(计算机底层硬件的操作:if is print )
    print ‘ok’

    [test.o]
    01010101 01010101 01010101
    01010101 01010101 01010101
    01010101 01010101 01010101

    2.语言

    发展史

    机器语言(01010101),打字机打动,纸条一个洞打不打代表是否是1(最原始的字典),hello world(96个位置,1就打洞)
    汇编(move 1,寄存器(硬件),add 寄存器1 寄存器2) a = 1 ,b=1+2
    C(第一门高级语言(符合人类逻辑,且不需要懂很多硬件知识))
    c++ java python(1.更符合人类逻辑和事物特征:面向对象出现2.需要动更少的硬件知识。)

    区别:

      静态/编译型:
        先编译(直接翻译完成一个机器码文件,但是没有真正的执行),再执行(交给CPU去执行):活干完了一半
        bianyi tess.cpp -> 多了个test.o
        zhixing test.cpp
        先转为机器码(c++)或者中间代码(Java jvm-java字节码)

      动态/解释性:
        边运行,边翻译,边执行(两部为一步:缺点是效率低)
        .py .pyc(如果先编译成.pyc .pyo)执行也可以更快,*但是它的底层是解释因此很慢

        要研究数据结构+算法,最好选择静态/编编译型语言,因为动态/解释性语言坑很多(本身问题很多)

    3.变量与内存

    变量作用:标记并存储数据, 增强可读性。能被后面的代码调用,数据复用。

    python :按引用传递(和别的语言的概念不同):底层是C(指针即地址(内存条的位置))
    a=1
    b=2
    b=a
    c=1
    d=1

    一夫(数据)多妻(变量),一个变量只能对一条数据,但是一条数据却可以被很多变量所对应。

    id()查看地址 

    is,is not 比较数据的值、地址
    == 比较数据的值

    字面量(不同语言的字面量的类型不同):在Python中,对字面常量(数字、字符串、布尔、字节)对象进行缓存,
    多个变量赋相同值,其实是同一个值

    4.True 和 False

    bool() 判断真假
    False: 0和False
    其余为真

    if True (如果真,则执行)

    if(bool(False) is False):
    print 6

    while True(如果真,则循环)

    5.流程控制

    if 带条件的->过滤

    while 带条件的->循环

    for 有限次数的->循环

    6.数据结构

      数据结构:数据的存储形式(计算机存储,组织数据的方式)

      基本数据类型:
        数字、字符串:连续存储
        列表

      是否可变:数字、字符串的数据不可变(内存空间是否可伸缩list dict)
        如果重新赋值,会申请另一块内存(如果不是字面量)

      查看python源码:

      其它数据类型:
        文件
        数据库

      []研究数据结构?不同的数据,需要不同的数据结构去存储,造成的增删改查的性能不一样

      *遍历

    7.每种类型的方法:

      增删改查(及展开)

      

    4.基本数据类型
    (1)(bool类型 数字int 字符串str(常用) 列表[](常用) 元祖() 字典(常用) 集合(没用))
    (2)嵌套赋值:列表、元祖、字典
    (3)支持遍历、索引、切片:字符串、列表、元祖:for、var[3]、var[2:]、in和not in
    (4)字典:key,value。key类型:int,str。for k,v in d.items(Dict)
    (5)遍历:for k,v in enumerate(List|tuple):
    (6)划分:
    1.是否是序列(索引是整数),支持索引、切片(字符串、列表、元祖
    2.是否可变:按所占内存大小、内存地址是否可变区分。(不可变:数字、字符串)
    (7)操作序列:
    len() 求序列的长度
    + 连接两个序列 (常用与字符串拼接)
    in 判断是否存在序列
    (8)字符串格式化:% %s %d, format(推荐,就可以换序) pythonic
    (9)类型转换
    数字、字符串、列表、元祖
    查看数据类型:type(var)
    str(int) # 数字转字符串
    int(str) # 字符串转数字
    list(str)# 字符串转列表
    ”.join(list) # 列表转字符串
    tuple(list) # 列表转元组
    list(tuple) # 元组转列表
     
    5.基本数据类型常用方法
    格式type.methond()
     
    (1)字符串
    format # 格式化
    replace # 替换
    join # 拼接
    strip # 去除字符串两边空格
    str.split(‘char’) # 分割字符串
    startswith # 以…开头
    endswith
    find # 查找
    encode # 编码
     
    (2)列表|元组
    count # 数量
    copy # 复制 等效于==
    append # 追加
    extend # + 拼接
    insert # 插入
    pop remove # 删除
    list[index] = value #
    reverse
    sort
    clear
     
    (3)字典
    items
    get(‘key’) # 等效于dict[‘key’]
    keys
    values
    setdefault # == 赋值
    update(d1) # 增加
    pop popitem # 删除
    clear
    copy
     
    队列 :是一种数据结构(存储方式)
    List|tuple : 元素连续分布
    编码
     
    6.文件操作
    数据库:分类,比excel强大的地方就是:分表
         r  w  a        w:覆盖写     a:追加写
        
            r+:默认光标在开始位置,写的话时追加写
            w+:覆盖写,想读取内容,seek调整
            a+:光标默认在文件最后位置,不管光标位置,一定是追加写,seek调整位置读取
        
            seek的应用:比如断点续传,
            ------------rb  wb  ab
            f=open("test","r",encoding="utf8")#解码
            f=open("test","rb")#直接拿字节数据,所以不用解码
            print(f.read())
        
            f=open("test6","wb")
            f.write("hello 倩雯".encode("utf8"))#wb需要字节数据转换utf8,w直接家的字符串
            f.close()
        
            f=open("test6","ab")
        
            with
            推荐
            f=open("rest6")
            f.read()
            f.close()
        
            with open("test6") as f:   #f=open("test6")
                f.read()
    View Code
        文件操作流程:
        1:打开这个文件  open()
        2:操作文件      read,write
        3:关闭文件      close()
    
    
    
    打开文件
        #打开,以utf8编码打开#仅可读:
        f=open("test",mode="r",encoding="utf8")
        
        #可写,不可读,覆盖,加绝对路径
        f=open(file = 'E:网盘下载视屏笔记python笔记文件基本操作',mode="w",encoding="utf8")
        
        #追加模式
        f=open("test3",mode="a",encoding="utf8")
        
        #二进制读取模式,硬盘怎么存就怎么读。读取出来后是二进制模式
         f=open("test",mode="rb")
    
    
        读操作
            f=open("test2")
            data=f .read()#读取
            data = f.read(5)#读指定个数的字符
            data2 = f.read(5)#从光标位置 读指定个数的字符
            data = f.readline()
            data2 = f.readline()
            data= f.readlines()#拿到的是一个列表结果,带着换行
            print(data)
            print("data2",data2)
            f.close()#关闭 
            
            for line in f :
                print (line)
    
    
    ​        
    ​        假如需要处理的文件不知道是什么编码
        使用python第三方软件
    
        安装:pip3 install chardet
        
            import chardet
        
            f = open('log',mode = 'rb')
            data = f.read()
            f.close()
        
            result = chardet.detect(open('log',mode='rb').read())
            print(result)
            
        命令行:
            import chardet
            f = open('log',mode = 'rb')
            data = f.read()
            chardet.detect(data)
            data.decode("gb2312")
    
    ​    
    
    写操作 
    
    
            f.write("hello
    world")#清空覆盖,如果是不存在的文件,直接创建
            f.write("
    哎呦我去")
            -----------------------写,flush操作
            
            追加模式: a
            f=open("test5",mode="a",encoding="utf8")
            f.write("/nhellp test5")
            
            读写模式: r+ 先读后写,光标处于最后一位,可以追加
            f=open("test5",mode="r+",encoding="utf8")
            写读模式: w+ 先写再读,从第一行开始写,覆盖写
            f.flush()     #刷新存入
            import time #做延迟
            time.sleep(100)
    
    
    ​        
    ​         
    
    
         f=open("test",mode="w+",encoding="uest",mode="r+",encoding="utf8")
            print(f.read(3))
            f.write("hello原浩雄")
            print(f.read())
            f.seek(3,0)   #移动光标到开始位置  按照字节走,不同于read()方法
    
    
            f.seek(1,0)
    
    
            print(f.read())
            print(f.tell())
        
            f.close()
    
    
            a+  总是再光标位置最后位置添加
            f=open("test2","a+",encoding="utf8")
            f.seek(0)
            print(f.read())#读取后光标处于最后
            f.seek(0)
            f.write("xiong")
            f.write("yuan")
    
    
    
    练习(不常用)
    count =0
    
    for line in f.readlines():
        if count == 0:
            line = "".join([line.strip(),"原浩雄"])
    
    
        print(line.strip())
        count+=1
    
    
    推荐,保持在运行时内存只存储了一行信息
    
    count =0
    for line in f:   #f 可迭代对象,序列#优化内存
        if count == 0:
            line = "".join([line.strip(),"原浩雄"])
    
    
        print(line.strip())
        count+=1
    
    
    
    
    进度条
    import sys
    
    for i in range(100):
        sys.stdout.write("#")
        sys.stdout.flush() #强行刷新显示
        import time
        time.sleep(0.5)
    文件操作
    #可读可写模式 r+ w+ a+
    
    # # R+
    # # f=open("test2",mode="r+",encoding="utf8")
    # #
    # # print(f.read())
    # # f.write("where is you ")
    #
    # #W+  先覆盖,再读取
    #
    # # f=open("test",mode="w+",encoding="utf8")
    # f=open("test",mode="r+",encoding="utf8")
    # print(f.read(3))
    # # f.write("hello原浩雄")
    # print(f.read())
    # #f.seek(3,0)   #移动光标到开始位置  按照字节走,不同于read()方法
    #
    #
    # f.seek(1,0)
    #
    #
    # print(f.read())
    # # print(f.tell())
    #
    # f.close()
    
    
    #a+  总是再光标位置最后位置添加
    # f=open("test2","a+",encoding="utf8")
    # f.seek(0)
    # print(f.read())#读取后光标处于最后
    # f.seek(0)
    # f.write("xiong")
    # f.write("yuan")
    
    
    #------------------总结
    
    #   r  w  a        w:覆盖写     a:追加写
    
    #r+:默认光标在开始位置,写的话时追加写
    #w+:覆盖写,想读取内容,seek调整
    #a+:光标默认在文件最后位置,不管光标位置,一定是追加写,seek调整位置读取
    
    #seek的应用:比如断点续传,
    #------------rb  wb  ab
    #f=open("test","r",encoding="utf8")#解码
    # f=open("test","rb")#直接拿字节数据,所以不用解码
    # print(f.read())
    #
    # f=open("test6","wb")
    # f.write("hello 倩雯".encode("utf8"))#wb需要字节数据转换utf8,w直接家的字符串
    # f.close()
    #
    # f=open("test6","ab")
    
    #with
    #推荐
    # f=open("rest6")
    # f.read()
    # f.close()
    #
    # with open("test6") as f:   #f=open("test6")
    #     f.read()
    文件操作2

    8.查看python源码

      1.查看部分源码(不能查看实现,常用关键字的说明文档)
        pycharm:输入关键字/import 关键字,按住ctrl键+鼠标点击关键字

        __ 私有方法,不公开(约定不能用,但是可以用)
        公有方法

      2.查看全部源码
        去官网下载源码(C语言的源码)

        要安装?就要编译

      3.自学/进阶直接看(最清楚的)

      4.通过语言的源码、高端开源项目源码去进阶

  • 相关阅读:
    C#反射动态调用dll中的方法,并返回结果[转]
    DXF与Entity
    c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);
    DBText除了左右左对齐且上下Base对齐的其对齐点为Position外,其余的都是AlignmentPoint
    C# Cast
    DataGridView选中行按从上到下或从下到上排序
    获取鼠标点相对于各屏幕、窗体和当前控件的位置
    Database本身就有TileMode的属性,我还去写了一个方法,晕!
    不知为什么,Enter键的KeyDown,KeyPress无法捕捉
    利用正则表达式对字符串进行指定替换
  • 原文地址:https://www.cnblogs.com/herosyuan/p/9952765.html
Copyright © 2011-2022 走看看