python基础

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  退出环境
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,911评论 17 410
  • 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入...
    小小不懂11阅读 3,404评论 2 30
  • Python 基础教程 实例(Python 2.0+) 实例(Python 3.0+) Python 简介 Pyt...
    纵我不往矣阅读 64,719评论 0 23
  • 顾往昔,石砂间,磊石为城,门闭城隐。 千秋雪,睦风夏,冬暮春绿,来之去之。 窗框黄,帐帘破,门椅破朽,蛛丝藏思。
    飞鱼不飞阅读 271评论 0 7
  • 下课返回办公室,一眼看见一本《中华校园》摆在桌面上,封面人物是咱们的韩局长。西装革履,戴着一副眼镜,手握铅笔,总是...
    青山绿水一钓叟阅读 286评论 0 10