Python知识
2017-11-20 12:39:33 0 举报
AI智能生成
Python
作者其他创作
大纲/内容
基础数据类型
int
不是可迭代对象
bit_length():查看将十进制的数字转换成二进制时,最少使用的位数
str
字符串不能修改,可以增加,可以查
可用for循环来查看字符串中的各个元素
replace('原来的字符串','新的字符串',替换次数)
str.split('分割的规则',分割的次数)
str.strip():去掉字符串左右两边的空格
str.lstrip():去掉字符串左边的空格
str.rstrip():去掉字符串右边的空格
切片
str[start,end]:从索引为start的元素开始,一直到索引为end的元素结束,但并不包含end
str[start,end,step]:从索引为start的元素开始,每step个元素取一个元素,一直到索引为end的元素结束
首字母大写
str.capitalize()
大小写翻转
str.swapcase()
title:将每个单词的首字母变成大写
单词的区分以空格为标准
居中:center
str.center(需要填补的个数,“用于填补的符号”)
数字符串中元素出现的个数
str.count('要计数的元素',start,end)可进行切片
将\t前面的补全expandtabs
str.expandtabs(),默认将一个tab键变成8个空格,
如果tab前面的字符长度不足8个,则补全8个
如果tab键前面的字符长度超过8个但不足16个,则补全16个,以此类推每次补全8个
startswith
判断是否以......开头
str.startswith('判断开头的字符')
可切片str.startswith('判断开头的字符',start,end)但是依然是顾头不顾腚
endswith
判断是否以....结尾
str.endswith('判断结尾的字符')
可切片endswith('判断结尾的字符',start,end)但是依然是顾头不顾腚
index
通过字符串元素来查找索引,如果没有找到的话就直接报错
str=str.index('str中的元素'),最后得到的是
可切片str.index('str中的元素'),但依然是顾头不顾腚
format:格式化输出
res='{} {} {}'format('egon'48,'male')顺序不能打乱,必须要对应,只能使用一次
res='{1} {0} {1}'.format('egon',48,'male')顺序可以打乱
res='{name}{age}{sex}'.formate(sex='male',name='egon',age=48)顺序可以打乱,可以多次使用
****is系列
str.isalmun():判断字符串是否是全部由数字或字母组成
str.isalpha():判断字符串是否是全部由字母组成
str.isdigit():判断字符串是否是全部由数字组成
复数
complex(a,b)输出之后显示的是a+bj
虚部和实部都是float型,虚部的j不区分大小写
不能比较大小
bool
True 表示真,用int则表示为除零以外的数都是真,str中除空字符之外的都是真
False 表示假,int中0表示假,str中空字符表示假
元组tupe
被称为只读列表,即数据可以被查询,但不能被修改,字符串的切片操作同样适用于元组
列表list
增
按照索引去增加insert
list.insert('索引位置','要添加的元素')
append
在列表的最后添加元素
extend
迭代的将元素添加到列表中li.extend('awq')
删
pop
按照位置去删list.pop(元素索引)
del
按照位置删除元素del list[元素索引]
可以切片删除del list[start:end]依然是顾头不顾腚
remove
按照元素去删除 list.remove(元素)
clear
清空列表,但是列表依然存在,只是被清空
改
指定想要修改的元素的下标,直接重新赋值:li[元素下标]=新的元素
切片改,将想要修改的元素用切片的方式找出,之后一次性全部进行修改:li[start,end]=['新的元素','新的元素','新的元素']
查
直接用for循环去遍历列表中的各个元素
用切片是方式来查找列表中的元素
其他操作
count(数)
统计某个元素在列表中出现的次数:list.count('待统计的元素')
index
从列表中找出某个值第一个匹配项是索引位置:list.index('列表中的某个元素')
sort:在原位置对列表中的元素进行排序:list.sort()
reverse将列表中的元素进行反向存放:list.reverse()
dict
增
setdefault
在字典中添加键值对,如果只有键那对应的值是None,如果原字典中存在设置的键值对,则他不会更改或覆盖
删
pop
根据key删除键值对,并返回对应的值即可,如果没有key则返回默认的返回值
popitem
随机删除字典中的某个键值对,将删除的键值对以元组的形式返回
clear
清空字典,但是字典仍然是存在的
改
update
将dic所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic1中:dic1.update(dic)
查
直接按键查询值
print(dic['key'])
get
dic.get('代查找元素','默认返回值'),如果没有返回值可以自己设定一个返回值
其他操作
dic.item():同时输出字典的键和值,是可迭代的
dic.keys():查看字典的键
dic.value():查看字典的值
字典的循环
用for循环来遍历字典中的每一项
其他操作
for循环
enumerate枚举
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
range
指定范围,生成指定数字:range(数字范围)
文件操作
文件对象
用来访问
文件只是【连续的字节序列】
内建函数
open()
内涵
提供了 初始化 输入/输出操作 的通用接口
返回了【文件对象】 or 引发一个错误
参数
access_mode =
r/w/a 读/写/追加
读写
r+
文件指针在文件【开头】
w+
文件
已存在
覆盖
不存在
创建
a+
文件指针在文件【结尾】
后加b表示 二进制模式
返回
file对象
file()
同open()
内建方法
输入
file.
read(size)
size为字节数
无参数时 一次性读取
readline()/Readlines()
xreadlines()
每次读取一块
减少内存占用
输出
file.
write()
writelines()
文件定位
file.
seek() 移动文件指针
tell() 文件指针 到当前位置
杂项操作
file.
close()
没有【显式】关闭文件可能会丢失【缓冲区数据】
flush()把内部缓冲区数据 立刻写入到文件
truncate()
截取到
当前文件指针位置
or 给定size
若刚打开即调用函数 文件被删除(从0开始截取)
内建属性
file.
closed True/False
encoding
mode 访问模式
name
文件迭代
自身作为【迭代器】
for eachline in open("file.txt","r")...
file.next( )
vs
文件迭代
更高效
更简洁
老方法
f.readlines()/ReadLine() 更占内存
标准文件对象
标准输入 stdin
键盘
raw_input/ input
标准输出 stdout
到显示器的缓冲输出
print 输出到【sys.stdout】
标准错误 stderr
到屏幕的非缓冲输出
分隔符
行分隔符
POSIX(Unix、Mac OS X) \n
DOS/Windows \r\n
旧版MacOS \r
路径分隔符
POSIX(Unix、Mac OS X) \
DOS/Windows /
旧版MacOS :
import os
辅助跨平台开发
属性 os
linesep
行分隔符 "\r\n"
sep
路径名分隔符
"\\"
pathsep
路径分隔符
":"
curdir
当前工作目录 字符串表示:
"."
pardir
父目录 字符串表示:
".."
函数
定义
通过def来定义
后面要有括号
函数名在定义的时候,不能是内部变量名,命名规则和变量的命名规则一样
调用
函数的调用,需要在函数后面加(),不加()只是将函数对象赋值给其他变量
参数
形参
静态参数
位置参数
默认参数
动态参数
*args
可以将以位置参数形式传入的参数合成一个元素,传递到函数中
**kwargs
可以将以默认参数形式传入的参数合成一个字段,传递到函数中
实参
位置参数
与形参的位置、顺序相对应
默认参数
参数的名字与形参相对应
*args
将一个可迭代对象中的元素,以位置参数的形式传递到函数中
**kwargs
将一个字典以默认参数的形式传递到函数中
返回值
函数的返回值通过return语句来实现
如果没有return语句,默认返回None
函数在执行到return的时候会停止
return多个值的时候默认会得到元组
命名空间
内置变量
全局变量
所有的函数都能访问,但是不能修改
如果函数内部想修改,需要加上global
局部变量
中外部的函数无法使用内部的变量,局部变量只能在自己的函数中使用
如果内部想访问外部的变量(注意不是全局变量),可以使用nonlocal,即使是全局有这个变量而外部函数没有这个变量,可能会报错
模块
collections模块
namedtuple
生成可以使用名字来访问元素内容的tuple
deque
双端队列,可以快速的从另外一侧追加和推出对象
是为了高效实现插入和删除的双向列表,适用于队列和栈
OrderedDict
有序字典
key会按照插入的顺序排列的,不是key本身排序
defaultdict
带有默认值的字典
使用dict时,如果引用的key不存在,就会抛出KeyError。如果希望的key不存在时,返回一个默认值,N/A
Counter
计数器,主要用来计数
目的是用来计算跟踪值出现的次数
time模块
时间戳
表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,运行type(time.time())时,返回的是float型
格式化的时间字符串(Format String)
元组(struct_time)
共有9个元素(年,月,日,时,分,秒,一年之中的第几周,一年之中的第几天等)
几种格式之间的转换
时间戳-->结构化时间
time.gmtime(时间戳)
time.localtime(时间戳)
结构化时间-->时间戳
time.mktime(结构化时间)
结构化时间--->字符串时间
time.strftime('格式定义','结构化时间')
字符串时间--->结构化时间
time.strptime(时间字符串,字符串对应格式)
结构化时间--->%a%b%d %H:%M:%S %Y串
time.asctime(结构化时间)
%a%b%d %H:%M:%S %Y串 --->结构化时间
time.ctime(时间戳)
random模块
random.random() #得到0—1之间的随机小数
random.randint(1,5) #随机取1<=x<=5之间的整数
random.choice() 在括号中选取一个元素
random.sample(y,x) 在括号中第一个参数中选取x个元素
random.shuffle() 打乱括号中元素的顺序
os模块
是与操作系统交互的一个接口
os.stat(path/filename)
st_mode:inode #保护模式
st_ino:inode #节点号
st_dev:inode #驻留的设备
st_nlink:inode 的链接数
st_size:普通文件以字节为单位的大小;包含等待某些特殊文件的数据
st_atime:上次访问的时间
st_mtime:最后一次修改的时间
st_ctime:有操作系统报告的'ctime'。在某些系统上(如Unix)是最新的元数据更改 时间,中其他系统上(Windows)是创建时间
st_gid:所有者的组ID
st_uid:所有者的用户ID
sys模块
sys.argv 命令行参数List,第一个元素是程序本身的路径
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
re模块
在正则表达式中用于转义
序列化模块
将原本的字典、列表等内容转换成一个字符串的过程叫做序列化
目的
以某种存储形式使自定义对象持久化
将对象从一个地方传递到另一个地方
使程序更具维护性
json模块
dump
在文件中,dump方法接收一个文件句柄,直接将python数据类型转换成json字符串写入文件
dumps
序列化:将python 的数据类型转换成字符串
loads
反序列化:将一个字符串格式的数据转换成python的数据类型
load
load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
pickle
用于python特有的类型和python的数据类型间进行转换,可以把python中任意的数据类型序列化
shelve
不支持多个应用同一时间往同一个DB进行写操作。所以当知道应用只进行读操作时,可以让shelve通过只读方式打开DB
面向对象
基本概念
oop
object-oriented Programmarming
核心思想
相近对象(object),归类为(Class)
设计思想
抽象出class
根据class创建instance
三大特点
数据封装
继承
多态
主要目的
提高程序的重复使用性
vs
面向对象编程
分类
更符合人类思维习惯
特点
一组【对象】的集合
每个【对象】都可以 接收/处理 其他【对象】发过来的消息
面向过程
依次执行语句
更多是机器思维
特点
一系列命令的集合 即 一组函数的顺序执行
把大块函数切割成小块函数 降低系统复杂度
类变量vs实例变量
类变量
定义
在【类】中且在【函数体】之外
特点
在这个类的所有【实例】之间共享
通常不作为【实例变量】使用
访问
内部类 or 外部类
ClassName.classVar
实例变量
定义在【方法】中
只作用于 当前实例的类
数据成员
类变量&实例变量 用于处理 类及其实例对象 相关的数据
方法
类中定义的【函数】
结构
基本结构
class
创建【类】
class ClassName(bases):
""" class document string """
class_suite
ClassName
【类名】通常是大写开头的单词
bases
一个或多个 用于继承的【父类】的集合
object 本身 所有类最终都会继承的类
""" class document string """
ClassName.__doc__
类的文档字符串
class_suite
组成:
类成员
类方法
数据属性
类下有
属性attribute
类下定义的变量
命名 名词
方法method
类下定义的函数
实现了数据封装
调用时
直接操作 对象内部的数据
无需知道 方法内部的实现细节
命名 动词+对象
第一个参数
self 必须有!
为了方便引用 对象自身性质
e.g:
class Bird(object):
have_feather = True #属性
def move(self, dx, dy) #方法
...
object
创建实例对象
summer = Brid() #summer是个对象 且属于bird
属性的引用
summer.have_feather
方法的引用
summer.move(x, y)
类属性
分类
数据属性 可以添加,删除,修改
子主题 2
内置(特殊)类属性 ClassName.
__name__
类名:
直接运行
__main__
作为导入模块
导入模块名
__doc__
类的文档字符串
__bases__
所有【父类】构成的元组
__dict__
属性
__module__
类定义所在的模块
__class__
对应类
__init__(self, ...)
特殊方法 称为 类的初始化方法/构造函数
用于 初始化 创建【实例对象】时
会自动调用
强制绑定属性
self
类的实例
定义【类的方法】时
永远的【第一个】参数
表示【创建的实例】本身
把各种属性 绑定到self
e.g:
class Employee:
emCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.emCount += 1
emp1 = Employee("Zara", 2000) #通过__init__方法 接收参数
继承与多态
子类→父类/基类/超类
继承
方法
括号里 类定义时
要继承 父类名字
说明没有父类 object
class SubClassName(ParentClass1[ParentClass2,...]):
'Optional class documentation string'
class_suite
目的
享有了[父类的属性] 通过[继承] 代码的重用
特点
基类的__init__()
不会被自动调用
派生类的__init__()专门调用 需要在
调用基类的方法
加上基类的 [类名前缀]
带上self参数变量
调用的方法
先在[本类]中查找
才去[基类]中找 找不到
多重继承
裂了一个以上的类 继承元组中
多态
定义一种[数据类型] 等同于 定义一个class
在继承关系中
一个实例的[数据类型]
是某个[子类]
or[父类]
对于一个变量
无需确切知道子类型 只需知道父类型
调用父类方法时
作用对象由运行时
该对象的确切类型决定
[开闭]原则
对[扩展]开放
父类的子类 允许新增
对[修改]原则
依赖父类的函数 不需要修改
BIF
布尔函数
True lssubclass(sub,sup)
sub是sup的子类/子孙类
一个类是其自身的子类 p.s.
isinstance(obj,Class)
obj是[类Class(或其子类)]的一个实例 True
可以是多个类的[元组] Class
isinstance(4,(int,str,float)) e.g.
*attr()系列
各种对象 使用范围
*attr(obj,'attr'...) 使用方法
系列BIF
检查属性是否存在 hasattr(ob, name)
访问属性 getattr(obj, name,[, default])
setattr(obj, name, value)
设置一个属性
不存在测新建
删除属性 delattr(obj, name)
获得一个对象的所有属性和方法 dir()
获取相应【父类】 super()
属性-值 字典 vars()
结构
基本结构
class
创建【类】
class ClassName(bases):
""" class document string """
class_suite
ClassName
【类名】通常是大写开头的单词
bases
一个或多个 用于继承的【父类】的集合
object 本身 所有类最终都会继承的类
""" class document string """
ClassName.__doc__
类的文档字符串
class_suite
组成:
类成员
类方法
数据属性
类下有
属性attribute
类下定义的变量
命名 名词
方法method
类下定义的函数
实现了数据封装
调用时
直接操作 对象内部的数据
无需知道 方法内部的实现细节
命名 动词+对象
第一个参数
self 必须有!
为了方便引用 对象自身性质
e.g:
class Bird(object):
have_feather = True #属性
def move(self, dx, dy) #方法
...
object
创建实例对象
summer = Brid() #summer是个对象 且属于bird
属性的引用
summer.have_feather
方法的引用
summer.move(x, y)
类属性
分类
数据属性 可以添加,删除,修改
子主题 2
内置(特殊)类属性 ClassName.
__name__
类名:
直接运行
__main__
作为导入模块
导入模块名
__doc__
类的文档字符串
__bases__
所有【父类】构成的元组
__dict__
属性
__module__
类定义所在的模块
__class__
对应类
__init__(self, ...)
特殊方法 称为 类的初始化方法/构造函数
用于 初始化 创建【实例对象】时
会自动调用
强制绑定属性
self
类的实例
定义【类的方法】时
永远的【第一个】参数
表示【创建的实例】本身
把各种属性 绑定到self
e.g:
class Employee:
emCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.emCount += 1
emp1 = Employee("Zara", 2000) #通过__init__方法 接收参数
继承与多态
子类→父类/基类/超类
继承
方法
括号里 类定义时
要继承 父类名字
说明没有父类 object
class SubClassName(ParentClass1[ParentClass2,...]):
'Optional class documentation string'
class_suite
目的
享有了[父类的属性] 通过[继承] 代码的重用
特点
基类的__init__()
不会被自动调用
派生类的__init__()专门调用 需要在
调用基类的方法
加上基类的 [类名前缀]
带上self参数变量
调用的方法
先在[本类]中查找
才去[基类]中找 找不到
多重继承
裂了一个以上的类 继承元组中
多态
定义一种[数据类型] 等同于 定义一个class
在继承关系中
一个实例的[数据类型]
是某个[子类]
or[父类]
对于一个变量
无需确切知道子类型 只需知道父类型
调用父类方法时
作用对象由运行时
该对象的确切类型决定
[开闭]原则
对[扩展]开放
父类的子类 允许新增
对[修改]原则
依赖父类的函数 不需要修改
BIF
布尔函数
True lssubclass(sub,sup)
sub是sup的子类/子孙类
一个类是其自身的子类 p.s.
isinstance(obj,Class)
obj是[类Class(或其子类)]的一个实例 True
可以是多个类的[元组] Class
isinstance(4,(int,str,float)) e.g.
*attr()系列
各种对象 使用范围
*attr(obj,'attr'...) 使用方法
系列BIF
检查属性是否存在 hasattr(ob, name)
访问属性 getattr(obj, name,[, default])
setattr(obj, name, value)
设置一个属性
不存在测新建
删除属性 delattr(obj, name)
获得一个对象的所有属性和方法 dir()
获取相应【父类】 super()
属性-值 字典 vars()
对象性质
区分
类的属性
会共享这些属性 所有属于该类的对象
对象的性质
该对象的特别信息
__init__ 定义方法
self.atttribute 赋值给
self继而传递给各个方法
self.attribute 通过引用
对象的性质 查询或修改
e.g:
class Human(object):
def __init__(self, input_gender):
self.gender = input_gender
def printGender(self):
print self.gender
访问限制
私有变量
变量名以 "_" 开头
让内部属性不被外部访问
如果
需要获取内部属性
增加方法
def get_name(self):
return self._name
object,_className_sttrName
允许外部代码修改
增加[方法]
可以对参数做检查
避免传入无效参数
e.g.
def set_score(self,score):
if 0<=score<=100:
self._score=score
else:
raise ValueError('bad score')
p.s:
可以访问 特殊变量 __xxx__
不能访问 私有变量 __x
可以访问 不要随意访问 _x
总结
类
用来描述
具有相同
属性&方法
的[对象]的集合
对象
通过[类]定义的数据结构 [实例]
包括
两个[数据成员]
类变量
实例变量
方法
实例化
创建一个类的[实例]
类的具体对象 即
方法重写
覆盖(override) 又称
如果从[父类]继承的[方法]
不能满足[子类]的需求
可以对其进行改写
继承
一个[派生类]继承[基类]的属性&方法
derived class
base class
允许把一个[派生类对象]
作为一个[基类对象]对待
p.s.
运算符
定义在[类内部]的[特殊方法] 本质上是
__add__() e.g.
修改对象运算 根据目的 可自定义运算符
网络编程
线程、进程、协程、IO多路复用
其他
内置函数
与基础数据类型相关
和数字相关
数据类型
int
bool
flaot
complex
复数
实部
虚部
其中虚部的j不区分大小写
进制转换
bin
二进制,简写B
oct
八进制,简写O
十进制
简写D
hex
十六进制,简写H
数字运算
abs
计算绝对值
divmond
返回(除数、余数)
round
小数精确
round(3.1415926)
pow
幂运算
pow(x,z)
sum
求和
sum(iterable,atart)
min
计算最小值
min(iterable,key,default)
min(*args,key,defult)
max
计算最大值
max(iterable,key,defult)
max(*args,key,defult)
和数据结构相关
序列
数据集合
相关内置函数
迭代器/生成器相关
range
range(100).__iter__()
iter(range(100))
next
inter
其他
字符串类型代码的执行
eval
可将引号去除,有返回值
exec
可将引号去除,没有返回值,只会输出None
compile
将字符串类型的代码进行编译,代码对象可以通过exec语句来执行或者eval()进行求值
输入输出
input
print
sep:默认为空格来分隔输出各项,可以人为设定
file:将print中的内容存入文件中,默认为None,也可以自己创建一个文件。如f=open('a','w') print('abc\n',file=f) print(2) 最后发现abc被写到了f中
与内存相关
hsah
相同内容的哈希结果是相同的
可用于1、数据的存储和查找;2、模块hashlib
判断一个数据类型是否可以hash,在一个程序执行过程中,对同一个值的hash结果总是不变的,多次执行,对同一个值的hash结果可能改变
id
可以快速的找到某数据的存储地址
与文件操作有关
open
格式:f=open('文件名','w',encoding='utf-8')
打开模式:r、w、a、rb、wb、ab
编码方式:utf-8
与模块相关
import
帮助
help
与调用有关系
callable
可被调用的,返回True或者False
查看内置属性
dir
判断某个数据类型中有什么用法
异常处理
概述
错误
语法错误
逻辑错误
异常
定义
由于程序【错误】 在【正常控制流】以外采取行动
两个阶段
检测到【错误】 解释器触发【异常】
调用不同的【操作】 即【处理异常】
常见类型
BaseException
所有异常的基类
KeyboardInterrupt 用户中断执行
systemexit 解释器请求退出
Exception
常规错误
NameError 访问未声明变量
ZeroDivisionError 除零错误
SyntaxError 解释器语法错误
IndexError 索引超出序列范围
KeyError 访问不存在的key
IOError 输入/输出错误
AttributeError 访问未知的对象属性
...
所有的错误类型 都继承自 BaseException
异常处理
try:
...
except exception1:
...
except exception2:
...
except:
...
else:
...
finally:
...
try
需要监测的代码
若有【异常】发生
层层比较 except exception1,except exception2...
直到找到归属 执行语句
p.s. 语句块中【异常发生点】后的剩余语句 永远不会到达
except
语法
except exception [,reason ]
几种用法
捕获多个异常
except Exc1 ... ExcN as e:
(放入一个元组)
捕获所有异常
except 空except子句
except exception
except BaseException
捕获后忽略错误 except exception : pass
else
可选
无异常发生 执行语句
finally
无论是否有异常发生 最后都要执行语句
流程
try → 异常 → except → finally
try → 无异常 → else → finally
vs
try-except
捕捉异常
try-finally
用于 维持一致的行为
e.g. 关闭文件
p.s
如果无法将【异常】交给合适的【处理器】
e.g:
except后的错误类型 不符合
同时没有 不加参数的except
【异常】将继续 向上层抛出
直到 被捕捉or造成主程序报错
except + 错误类型 捕获 该错误类型及所有子类
不要 处理并忽略所有错误! 可以
捕获【特定异常】并忽略
捕获【所有异常】并处理
补充
with 上下文管理
语法:
with context_expr[as var]:
with_suite
原理:
执行完 with内的代码块
恢复到 执行前的状态
触发异常
raise[Exception[ , args [ , traceback ] ] ]
raise 不带参数 原样抛出 当前错误
sys.exc_info( ) 获取异常信息
调试
print
打印
可能有问题的变量
assert
断言
必须为真的判定
为假
则发生异常
使用
表达式
assert expression[ , arguments ]
e.g.
assert n != 0 , " n is zero ! "
logging
允许配置【记录信息】级别 logging.info( )
代码
import logging
logging.basicConfig( level = logging.INFO )
级别
debug、info、warning、error
pdb
让程序以【单步方式】运行
程式
以参数 -m pdb启动
输入命令
单步执行代码 n
查看变量 p
退出程序 结束调试 q
pdb.set_trace( )
import pdb
设置一个断点
在可能出错的地方
放一个pdb.set_trace( )
命令
查看变量 p
继续运行 c
ide
基础知识
计算机语言
类型
编译性语言
C语音/C++
p.s Java既有编译又有解释
解释型语言
Python、ruby、PHP
脚本语言
特点
解释型语言 需要【解释器】
一般都是以[文本形式]存在 程序代码 即 最终执行文件
动态语言 无类型
Python、Perl、JavaScript
高级语言(人写)
↓需要需要翻译为
机器语言(计算机执行): 翻译方式
编译 程序执行之前需要 先编译
eg: exe文件(编译的结果)
以后运行 不需要重新编译
执行效率高
解释
不需要【编译】
语句执行时 才翻译
需要【解释器】
每次执行 都需要逐句翻译
执行效率低下
python语言特点
解释型脚本语言 内建 高级的数据结构
面向对象的语言 便于 数据和逻辑 相分离
动态语言 变量本身
类型不固定
可以随意转换
不用考虑 内存问题
基本规则
# 注释
\n 行分隔符
\
继续上一行
跨行特例
闭合操作符 各种符号 [ ]、{ }、( )
三引号 """ ... """
常用于【多行注释】
分号; 在同一行 连接多个语句
冒号: 分开代码块(组) 头&体
缩进块 语句【代码块】 用【缩进深度】区分
最好为【四个空格】
空行 用于分隔
函数
类
模块
每一个脚本文件
均为【模块】
以【磁盘文件】形式存在
若模块过大 考虑 拆解代码 另建模块
变量赋值
赋值符 =
增量赋值 +=
多重赋值 x = y = z = 1
同一个引用被赋值给x,y,z
"多元"赋值
x,y,z = 1,2,"a"
变量交换 x,y = y,x
运行python3
两种模式
脚本式编程
一次性执行 源代码脚本
命令行模式
交互式编程
逐行输入 再执行
运行脚本
命令行模式/显式调用 Python *.py
Linux下 可执行脚本
脚本首行添加
#!/use/bin/env python
或 #!/use/local/bin/python Python路径
命令行赋予权限 chmod 755 *.py
运行脚本 *.py
ipython %run *.py
0 条评论
下一页