美文网首页
python基础

python基础

作者: brenner | 来源:发表于2018-05-23 22:18 被阅读0次

    Updated March 29, 2018

    官网:https://www.python.org/
    pypi仓库: https://pypi.org/
    程序语言排行榜:https://www.tiobe.com/tiobe-index/
    pep8编码规范: https://www.python.org/dev/peps/pep-0008/


    image

    pycharm使用教程

    官网:http://www.jetbrains.com/pycharm/
    快捷键设置

    [File]  [Settings]  搜索keymap  将Default改为Eclipse
    
    ctrl+d  删除当前行
    ctrl+/  注释/取消注释
    ctrl+z  取消上一步操作
    ctrl+alt+l  自动将代码格式化
    
    shift+tab  取消缩进
    shift+enter  跳到下一行
    
    自定义快捷键
    [File]  [Settings]  keymap  搜索点击increase font size 
    

    更换python解释器
    File Settings 搜索interpreter

    自定义python模板文件
    File Settings Editor File and Code Templates

    设置文件编码
    File Settings Editor File Encoding

    设置制表符为缩进符
    File Default Settings Editor Code Style Python 勾选use tab character

    关闭单词拼写检查
    File Settings Code Style Inspections Spelling 不勾选Typo

    设置最大行宽
    File Settings Code Style Hard wrap at 72 columns

    python解释器

    CPython,官方解释器,用C语言开发
    IPython,基于CPython的交互式解释器
    PyPy,采用JIT技术,对Python代码进行动态编译,可以显著提高Python代码的执行速度
    JPython,运行在java平台上的Python解释器

    python字节码

    pyc文件是在程序运行时由python的虚拟机来执行的字节码指令.
    python将源代码编译为一组虚拟机指令, python解释器就是该虚拟机的一个具体体现. 这种跑在虚拟机内部的中间格式被称为字节码.

    数据类型

    可变数据类型

    列表

    list1=["this",2,3,4]
    list2=["a","b","c","d"]
    
    list1.insert(1,1)
    list1.append(5)
    
    快速合并两个列表
    list1.extend(list2)
    list3 = [*list1, *list2]
    
    删除
    list1.remove("this")
    list2.pop(2)
    del list1
    
    list1.index("this")
    
    list1[2]="2"
    list1[:]=list2
    list1[1:-1:1]=list2
    
    排序
    list1.sort()  元素按照大小排序, 等价于sorted(list1)
    sorted(list1, key=(lambda x: abs(x)))  元素按照绝对值大小排序
    
    list1.count("this")
    
    列表生成式
    [x*x for x in range(100)]
    
    切片
    [0:-1:2]
    
    li=[11,22,33,44,55,66]
    for i in li:
        if i ==33 or i==44:
            li.remove(i)
    print(li)
    

    集合

    set1={1,2,3,4}  去重
    set2={3,4,5,6}
    
    set1.add(5)
    set1.remove(3)
    
    set3=set1&set2
    set3=set1|set2
    

    字典

    dict1={'name':'alex','age':12,'sex':'male'}
    
    del dict1['name']
    del dict1
    
    dict1.get('name','wrong')  找键名对应的值,找不到就返回第二参数
    dict1.setdefault('name','lema')  查找该键,找不到则插入该键值对
    
    快速合并两个字典
    dict1.update(dict2)  将dict2插入dict1中
    dict3 = {**dict1, **dict2}
    
    dict1.items()  列表形式返回
    dict1.keys()
    dict1.values()
    

    不可变数据类型

    元组

    tup1=("this",,2,3,4)
    
    del tup1
    
    a=[1,2,3]
    b=[1,2,3]
    c=(a,b)
    a.append(4)
    print(c)
    

    数字, 字符串

    str1='abcdefg'
    str2='h|i|j|k|l'
    
    str1.capitalize()
    str1.upper()
    str1.lower()
    
    str1.find(str2,2,5) # 在str1中从序号2位置开始找str2,直到序号5位置结束查找
    
    str1.center(20,'*')
    
    str1.startswith('ab')
    str1.endswith('ef')
    
    '-'.join(['2018','1','1'])
    str2.split("|",3)
    
    str1.replace('a','A',1)
    
    str1.strip()
    

    连接字符串时可用join, 也可以用+, 那这两种方法在性能上有什么区别呢?


    image

    字符串属于不可变数据类型, 当用操作符+连接字符串时, 每执行一次+都会申请一块新的内存, 然后复制上一个+操作的结果和本次操作到这块内存空间, 因此用+连接字符串时会涉及多次内存申请与复制.
    而join在连接字符串的时候, 会先计算需要多大的内存存放结果, 然后一次性申请所需内存并将字符串复制过去, 所以join性能优于+

    可迭代对象

    可以直接作用于for循环的对象统称为可迭代对象(Iterable).

    可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator).

    所有的Iterable均可以通过内置函数iter()来转变为Iterator.

    g=(x*x for x in range(1000))
    next(g)
    for _ in g:
        print(_)
    

    通过列表生成式我们可以直接创建一个列表, 但是如果创建一个包含100万个元素的列表, 会占用很大的存储空间.
    生成器可以按照某种算法把列表元素推算出来, 在循环过程中不断推算出后续的元素, 不必创建完整的列表, 从而节省大量的空间.
    生成器其实是一种特殊的迭代器, 只需要一个yield关键字

    def func():
        print('step 1')
        yield 1
        print('step 2')
        yield 2
        print('step 3')
        yield(3)
    f=func()
    next(f)
    for _ in f:
        print(_)
    

    文件操作

    r 只读模式
    w 新建或覆盖源文件模式
    a 追加模式
    r+ 读写模式
    b

    with open('test.txt','rb+',encoding='utf-8') as f:
    
        f.write()
        f.writelines()
        for line in f:
            pass
    
        f.read(10)   一次性读取当前光标后的10个字符
        f.tell()   获取当前光标
        f.seek(0)  光标回到最开始的地方
    

    异常处理

    python内置多种异常, 同时也可以创建自定义异常
    当某种条件满足时, 我们可以使用raise来抛出异常, 实现自定义异常

    a = 10
    if a>5:
        raise Exception('error')
    

    try块中的代码只要遇到异常就会停止,
    except块的代码如果没有执行, 就会执行else块中的代码
    finally块中的代码一定会执行
    try块和except块中执行continue, break或return语句之前, finally语句会先执行
    不推荐在finally块中使用return语句

    try:
        pass
    except IndexError as e:
        pass
    except Exception as e:
        print("未知错误")
    else:
        try:
            pass
        except:
            pass
    finally:
        print("不管结果,照常执行")
    

    traceback模块
    使用traceback模块可以直观地进行调试, 可以看到是哪个函数哪一行出现错误

    import traceback
    
    
    try:
        pass
    except Exception as e:
        traceback.print_exc()
    

    python中下划线的用法

    单下划线
    单下划线用来表示某个临时变量

    单前缀下划线
    以单个下划线开头的变量或方法仅供内部访问, 而这仅仅只是一个约定
    如果使用通配符从模块中导入所有名称, 则python不会导入带有单前导下划线的名称

    单末尾下划线
    单末尾下划线用来避免与关键字发生命名冲突, 这也是一个约定

    双前缀下划线
    双前缀下划线会导致python解释器重写名称.
    解释器更改变量的名称, 以便在类被扩展的时候不容易产生命名冲突

    双前缀末尾下划线
    表示特殊函数, 特殊变量

    软件目录结构规范

    Foo

        bin                   存放一些项目的可执行文件
            一键启动.py
        
        core                  存放项目的所有源代码
            tests             存放单元测试代码
                __init__.py
                test_main.py
            __init__.py
            main.py
        
        docs                   存放一些文档
            conf.py
            abc.rst
        
        setup.py               安装,部署,打包的脚本
        
        requirements.txt       存放软件依赖的外部python包列表
        
        README                项目说明文件
            1.软件定位,软件的基本功能
            2.运行代码的方法,安装环境,启动命令等
            3.简要的使用说明
            4.代码目录结构说明
            5.常见问题说明
    

    virtualenv

    virtualenv用来为每一个应用创建一个隔离的python运行环境, 解决不同应用间版本冲突的问题

    pip install virtualenv
    
    mkdir myblog
    cd ./myblog
    
    virtualenv --no-site-packages blogvenv
    
    cd ./blogvenv/Scripts
    activate  进入环境
    deactivate  退出环境
    

    相关文章

      网友评论

          本文标题:python基础

          本文链接:https://www.haomeiwen.com/subject/kiidjftx.html