python基础

2018-05-23  本文已影响0人  brenner

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  退出环境
上一篇下一篇

猜你喜欢

热点阅读