98.pickle 模块的使用:Python3 pickle模块用法 - 正态分个布 - 博客园
97.
==读取文件中每行的数据:
==文件:
使用 r+ ,会将第一行覆盖 (r 没有覆盖功能的,所以r+ 也没有覆盖功能,指针处于开头)
f = open('D:\\AAAworkfile\\PycharmFile\\file.txt', 'r+')
f.write('7777777')
f.close()
使用 w+ ,会将整个文件覆盖:(w 有覆盖功能,所以w+也有覆盖功能,指针处于开头)
使用 f.seek() ,然后使用 read() ,可以读取文件指针之后的内容, 若使用write() ,则还是会整个文件覆盖
96.遍历的技巧:
在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
print(k, v)
在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到
95. 注意:
==如果要创建一个空集合,你必须用 set() 而不是 {} ;后者创建一个空的字典
==集合是一个无序不重复元素的集
94.将列表做堆栈使用: 使用append,pop方法, 后进先出
将列表做队列使用: from collections import deque , 需要用到popleft() 方法
93. list.pop([i]) : 方法中 i 两边的方括号表示这个参数是可选的 ,而不是要求你输入一个[ ]
92. 不定长参数:
加了* 的参数会以为元组(tuple)的形式导入,存放所有未命名的变量参数
加了两个星号 ** 的参数会以字典的形式导入
91.集合,堆和双端队列
集合:
-集合是由内置类set实现的,无需再去导入set
-可用 其他序列来创建集合,不能仅使用花括号来创建空集合,因为这将创建一个空字典
-必须在不提供任何参数的情况下调用set;集合主要用于用户资格检查,所以会忽略重复的元素,和字典一样,集合中的元素的排列是无序的
-可执行各种标准集合操作,比如并集和交集
-集合是可变的,所以不可作为字典中的键;集合只能包含不可变的值,因此不能包含其他集合; 但是 frozenset类型,可表示不可变的集合 :
a = frozenset(range(10)) #生成一个新的不可变的集合
堆:
-它是一种优先队列,可以任意顺序添加对象;python没有独立的堆类型,只有一个包含堆操作的函数的模块,名为heapq
-函数heappush用于在堆中添加一个元素,注意不能将它直接作用于普通列表,而只能用于使用各种堆函数创建的列表 ;
-堆特征:位置i出的元素总是大于 i // 2 的元素(反过来说就是 小于2*i 和 2*i+1 处的元素)
-函数heappop弹出最小的元素(总是位于索引0处)
-函数heapify通过执行尽可能少的移位操作将列表变为合法的堆,如果堆并不是由heappush 创建的,则应在使用heappush和heappop之前使用 该函数
双端队列:
-在模块collections中包含类型deque类型,和集合一样,双端队列也是从可迭代对象创建的
-双端队列支持在队首(左端)高效的附加和弹出元素,而使用列表无法做到; 另外还可使用rotate函数来高效的旋转元素(将元素向右移动或者左移,并在到达一端的时候 环绕到另外一端)
90.标准库:
sys, os, fileinput,
89.探索模块:
使用dir: 比如copy时一个模块,可使用 dir(copy) 来查看这个模块包含的函数,类,对象
使用 __all__ : 这个是用来定义模块内的公有接口,若使用from copy import * ,将得到 ['Error', 'copy', 'deepcopy'],若要导入copy模块中的 pyStringMap ,将需要显式导入 ,导入copy并使用 copy.pyStringMap , 或者是使用 from copy import pyStringMap
88.包:要将python视为包,目录必须包含__init__.py ; 包是一个目录,可以包含其他的模块
若存在一个包名为constant, 其中drawing为其中的一个模块,那么在其他地方导入可使用:
import constant
import constant.drawing
87.如果要打印的数据结构太大了,一行容纳不下,可使用模块pprint中的ppring函数进行打印
86.为了让模块可用,可:
将模块放在正确的位置:将模块放在site-packages 是最佳的选择,因为它就是用来放置模块的;
告诉解释器去哪里查找:可直接修改sys.path,标准方法时将模块所在的目录,包含在环境变量pythonpath中
85.为了检查模块是作为程序运行,还是被导入了另一个程序,需要用到变量 __name__, 在主程序中,变量__name__ 的值是 ‘__main__',而在导入的模块中,这个变量被设置为该模块的名称,为了让模块中的测试代码更加合理,可将其放在一条if 语句中
便于理解: python中 if__name__ == "__main__"的理解_HEERY551的博客-优快云博客
我们就可以使用 if __name__ == '__main__' 内部写测试代码,自己运行自己这个才可以检测的内容,但是当别人调用时,这些测试代码不会被执行。用来区分是自己执行还是别人调用
84.要告诉解释器去哪里查找模块,可执行如下命令:假设文件存储在目录 c:\python 下 ,这将告诉解释器,除了通常将查找的位置外,还应该去这个目录去查找模块,这样就导入了这个模块
import sys
sys.path.append('c:/python')
83.生成器的方法:暂时还不能够理解 page181
82.生成器:使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
生成器由两个部分组成:生成器的函数 和生成器的迭代器, 生成器的函数是由def语句定义的,其中包含了yield,而生成气的迭代器是这个函数返回的结果
81.迭代器有两个基本的方法:iter() 和 next()。
iter 用来创建迭代器对象, next可用来输出迭代器下一个元素
80.用for 可以循环迭代序列 和 字典,但是也可以迭代其他的对象:实现了方法 __iter__的对象 ; 方法__iter__返回一个迭代器,它是包含方法 __next__的对象,而调用这个方法时,可不提供任何参数,当你调用防范 __next__时,迭代器返回其下一个值,如果迭代器没有可供返回的值,应引发 StopIteration异常 ;
实现了方法 __iter__的对象是可迭代的,而实现了方法__next__的对象是迭代器
通过对可迭代对象调用内置函数iter,可获得一个迭代器:
it = iter([1,2,3])
print(next(it))
79.可以拦截对对象属性的所有访问企图,其用途之一是在旧式类中实现特性(在旧式类中,函数property的行为可能不符合预期) ,在旧式类中只需使用后面三个
__getattribute__(self, name):在属性被访问时,自动调用(只适用于新式类)
__getattr__(self, name):在属性被访问而对象没有这样的的属性时自动调用
__setattr__(self, name, value):试图给属性赋值时自动调用
__delattr__(self, name)::试图删除属性时自动调用
78.静态方法和类方法是这样创建的:将他们分别包装在staticmethod 和 classmethod类的对象中;
静态方法的定义中没有参数self,可直接通过类来调用;类方法的定义中 包含类似于self的参数,通常被命名为cls
对于类方法,也可直接通过对象直接调用,但是参数cls自动关联到类
77.存取方法:用于获取和设置属性(这些属性可能是私有的);通过存取方法定义的属性通常被称为特性;
由于通过存取方法来设置和获得属性,会存在大量的重复代码,所以可使用 函数property来解决
class Rectanle:
def __init__(self):
self.width = 0
self.height = 0
def set_size(self, size):
self.width, self.height = size
def get_size(self):
return self.width, self.height
size = property(get_size, set_size) # 通过调用函数property ,将存取方法作为参数,获取方法在前,设置方法在后 创建一个特性,再将名称size关联到特性
r = Rectanle()
r.width = 10
r.height = 5
print(r.size)
r.size = 190, 222
print(r.width, r.height)
76.在标准库中,模块collections 提供了抽象和具体的基类;要实现一种行为类似于内置列表的序列类型,可直接继承list
75.序列和映射元素(item)的集合,要实现它们的基本行为,不可变对象需要实现2个方法,可变对象需要实现4个方法:
__len__(self): 返回集合包含的项数
__getitem__(self,key):返回与指定键相关的值
__setitem__(self,key,value):与键相关联的方式存储值,以便通过 __getitem__ 来获取 ,仅当对象可变时,才需要实现这个方法
__delitem__(self,key):这个方法,在对对象的组成部分使用 __del__语句时被调用,应删除与key相关联的值,仅当对象可变时,才需要实现这个方法
74.其他的语言可能要求对象属于特定的类,或者实现了特定的接口,而python通常只要求对象遵循特定的协议,因此,要成为序列,只需要遵循序列协议
73.注释多行代码: ctrl + /
72.子类重写父类的构造函数,再去调用父类的方法,会提示找不到属性的错误,所为了解决,可通过:调用未关联的超类构造函数,以及使用函数super
调用未关联的超类构造函数:对实例调用方法时,方法的self参数,将自动关联到实例(称为关联的方法),而通过类调用方法(如下面的 Bird.__init__(self)),就没有实例与之关联,这种方法被称为未关联的
class Bird:
def __init__(self):
self.hungry = True
def eat(self):
if self.hungry:
print('i want eat')
self.hungry = False
else:
print('no, thanks')
class SongBird(Bird):
def __init__(self):
Bird.__init__(self)
self.sound = 'squawk'
def sing(self):
print(self.sound)
使用函数super:建议使用 函数super,因为即使存在多个超类,也只用调用函数super一次
class SongBird(Bird):
def __init__(self):
super(SongBird, self).__init__() #调用这个函数的时候,讲当前类和当前实例作为参数,对其返回的对象调用方法时,调用的是超类的方法,另外调用super函数时,可不提供任何参数
self.sound = 'squawk'
def sing(self):
print(self.sound)
71.构造函数:构造函数也被称为构造器,当创建对象的时候第一个被自动调用的函数
语法:
def __ init__(self,arg1,arg2,...):
函数体
构造函数和成员函数之间的区别:
- 成员函数的函数名可以自定义,但是,构造函数的函数名是固定的__init__
- 成员函数需要被手动调用,但是,构造函数在创建对象的过程中是自动被调用的
- 对于同一个对象而言,成员函数可以被调用多次,但是,构造函数只能被调用一次
70.如果只想发出警告,指出情况偏离了正轨,可使用模块 warning中的函数warn;警告只显示1次,如果再次运行,任何事情都不会发生;如果其他代码在使用你的模块,可使用模块warning中的函数filterwarning
69.
可使用多个except语句来捕获异常
可使用1个except语句来捕获多个异常,可在元组中指定这些异常:
try:
x = int(input('enter the first number'))
y = int(input('enter the second number'))
print(x/y)
except (ZeroDivisionError, TypeError):
print('the number is error')
在大多数情况下,最好是使用except exception as e 并对异常对象进行检查,这样会导致systemexit 和keybordInterrupt 被漏掉,因为他们是从baseException(Exception的超类)派生来的
最佳捕获异常方式
while True:
try:
x = int(input('enter the first number'))
y = int(input('enter the second number'))
value = x/y
print('x/y is', value)
except Exception as e:
print('invalid input', e)
print('try again')
else:
break
finally子句可用来在发生异常时,执行清理工作,和try子句配套使用,不论try子句发生任何异常,都将执行finally子句
68.捕获异常后,如果要重新引发它(即继续向上传播),可调用raise且不提供任何参数(也可显式地提供捕获的异常)
Python 异常处理 | 菜鸟教程 异常知识点
67.python 设置脚本模板
1.#!/usr/bin/python:
告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器。
这句代码是写定了 python 的路径,即一定是找到 /usr/bin 下的解释器来运行程序。假如用户并没有将 python 装在默认的 /usr/bin 路径里,那么系统操作脚本时就找不到解释器。
2.#!/usr/bin/env python:
为了避免当用户没有将 python 装在默认的 /usr/bin 路径里,而找不到 python 解释器的问题。过程:操作系统首先会到 usr/bin/env 里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。这句代码的作用是让操作系统会去环境设置寻找 python 目录。
66. 捕获异常:
try:
x = int(input('enter the first number'))
y = int(input('enter the second number'))
print(x/y)
except ZeroDivisionError:
print('the second number is zero')
65.内置的异常类:
syntaxError :代码不正确时引发
TypeError:将内置操作或者函数用于类型 用于不正确的对象时引发
64.要引发异常,可使用raise语句,并将一个类(必须是exception的子类),或实例作为参数。将类作为参数时,将自动创建一个实例
63.对象:对象由属性和方法组成;属性是属于对象的变量,而方法是存储在属性中的函数,方法和函数的不同之处在于,它总是将其所属的对象作为第一个参数,而这个参数被命名为self
62.抽象类是不能被实例化的,但是可以在它的子类中重写方法,从而再去实例化
61. hasattr(tc,‘talk’) :tc为对象,hasattr用来检查属性talk是否存在
callable(getattr(tc, ‘talk’,None)) :tc为对象,来检测属性talk是否可调用;getattr可用来指定属性不存在时使用的默认值,这里为None
60.比如:Filter 类是Spamfilter的超类,那么:
子类可使用新定义的方式来重写Filter类中的方法; 可直接继承Filter类中的方法,无须重新编写定义
59.一个类继承了多个基类,被称为多重继承,使用多重继承时应该注意: 比如 c 类继承 a,b类,同时a ,b类中含有相同的方法,那么 前面的类的方法 将覆盖后面类的方法 :def c (a,b),a中的方法将覆盖b中的方法
58.继承:
要确定一个类是否是另一个类的子类,可使用内置方法 issubclass
如果有一个类,然后想知道它的基类,可访问特殊属性 __bases__
确定对象是否是 特定类的实例,可使用 isinstance
确定对象属于哪个类:,可使用属性 __class__
查看对象中存储的所有的值,可检查其 __dict__
57.要让方法或者属性成为私有的(不能从外部访问),可让其名称以 两个下划线开头即可;外部不可访问,但是在类中,依旧可以使用
56.设置属性:
将属性定义为私有,私有属性不能从对象外部访问,只能通过存取器的方法(比如get_name,set_name)来进行访问
55. 格式化输出整数
54. 详细介绍 :Python 面向对象 | 菜鸟教程
和对象属性相关联的函数称为方法
每个对象都属于一个特定的类,并被称为该类的实例;比如一个类的对象 为另外一个类的对象的子集时,前者是后者的子类,,而后者是前者的超类。在python中约定类使用单数,并将首字母大写比如 Bird,Lark;
类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例;
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
实例化: 创建一个类的实例,类的具体对象
方法:类中定义的函数
对象:通过类定义的数据接口实例,对象包括 两个数据成员(类 变量和实例变量)和方法
类的继承:
53.位置参数,关键字参数
收集参数: *params , 参数前面的*号将提供的所有的值都放在一个元组内,*号不会手机关键字参数。要收集关键字参数需要使用 **params,从而得到的是一个字典 而不是元组
52.字典中键的排列顺序是不固定的,因此打印字典时,每次打印的顺序可能不同
51.函数的相关概念:
给函数编写文档:在 def 后面 ' xxxxx' ,来给函数进行备注 ,放在函数开头的字符串,被称为文档字符串,将作为函数的一部分存储起来,可使用 function.__doc__ 来访问文档字符串
所有的函数都返回值,如果未告诉应返回什么,就会返回none
在 def 语句中,位于函数名后面的变量通常称为 形参,而调用函数时提供的值称为 实参
50.exec 用于将字符串作为python程序执行
eval 计算用字符串表示的表达式并返回结果
49. 当x 和 y 指向同一个列表,但删除 x 对 y 没有任何影响,因为你只删除名称 x ,而没有删除列表本身(值)。事实上,在Python中,根本就没有办法删除值,而且你也不需要这样做,因为对于你不再使用的值,Python解释器会立即将其删除
48.简单推导:从列表中创建列表 ; 元组是不可进行简单推导的 因为会创建生成器; 字典可以进行简单推导
47.跳出循环:
break :跳出循环
continue:结束当前迭代,跳到下一次迭代的开头
46.迭代工具
并行迭代:
若想同时迭代两个序列,可使用 zip函数:它将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可使用 list 将其转换为列表,函数 zip 可用于“缝合”任意数量的序列。需要指出的是,当序列的长度不同时,函数 zip 将在最短的序列用完后停止“缝合
迭代时获取索引:
反向迭代 和排序后再迭代:
sorted 返回一个列表,而 reversed 像 zip 那样返回一个更神秘的可迭代对象。你无需关心这到底意味着什么,只管在 for 循环或 join 等方法中使用它,不会有任何问题。只是你不能对它执行索引或切片操作,也不能直接对它调用列表的方法。要执行这些操作,可先使用 list 对返回的对象进行转换。
45.可使用for循环,就不用while循环;
44.== 用来检查两个对象是否相等,而 is 用来检查两个对象是否相同(是同一个对象)
43.elif语句
42.赋值魔法:
序列解包(可迭代对象解包):将一系列的值,将存储到变量中
可用* 来收集多余的值
链式赋值:链式赋值是从左往右赋值的,第二个等式,先是k=2,然后再是l[k]=2
增强赋值:
41.使用模块logging比print更加方便 ,待日后补充
40.popitem类似于列表中的 pop,但是它不是弹出最后一个元素,因为字典是没有最后一个元素这个概念,所以它是随机弹出的;因为字典是无序的,所以也没有appdend方法
39.方法items:返回一个包含所有字典项的列表,其中每个元素都为 (key, value) 的形式,返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代,视图的一个优点是不复制,它们始终是底层字典的反映,即便你修改了底层字典亦如此;
将字典项复制到列表内:
38.使用get 来访问字典中的项,如果不存在的话,将返回none,不会报错
setdefault 可用来访问字典中的项,如果指定键不存在的话,将会返回指定的值,并更新字典;如果指定的键存在,将返回值,并保持字典不变;若未指定值,默认为none
37. 字典中 copy是浅复制,如果修改了原来字典,使用copy后的字典也会变化,要深复制需要用 deepcopy,即使修改了原字典,copy后的字典 数据也不会发生变化 (与列表的copy不同)
36. 字典的定义:字典由键及其相应的值组成,这种键-值对称为项(item)。在前面的示例中,键为名字,而
值为电话号码。每个键与其值之间都用冒号( : )分隔,项之间用逗号分隔,而整个字典放在花
括号内。空字典(没有任何项)用两个花括号表示,类似于下面这样: {} 。在字典(以及其他的映射类型),键是唯一的,而值可以不唯一
35.可通过名称来访问内置的数据结构,被称为映射,字典是python中唯一的内置映射类型,其中的值不按照顺序排列,而是存储在键下,键可以是数,字符串,元组
34.字符串中的find方法是 可以查找子串在字符串中的位置,并返回子串第一个字符的索引;而 in 只能是查看单个字符是否在包含在字符串内
33.
字符串格式设置:
{name} and {value:.2f}.format(name="you", value=pi)
将字符串格式设置应用于字典:
32.如果是元组中只含有一个元素,元素后面也要使用, (3,) , 否则 (3)和 3 是没有任何区别的
31. 列表 x= [2,4,3,1] ,需要保存一份排序后的副本,以及原来的列表不被修改,可使用:
y= x.copy()
y.sort()
再输入y,x,可得到想要的结果; 如果直接 x.sort() , 会直接修改x ; 也可以使用 sorted函数, y=x.sorted() , 不会修改x序列
30. pop 是唯一既修改列表又返回一个非 None 值的列表方法
29.在列表末尾添加一个元素使用append , 若将多个值附加到列表末尾使用:extend
将一个对象插进列表: num=[1, 2, 3]
num.insert(1,'word')
num=[1,'word',2,3]
28.使用切片赋值
name= [1,2,3,4]
name[1:1] =[5,6] #在不替换原有的元素情况下插入新元素
即 name= [1,5,6,3,4]
27.可将任何序列作为list的参数,比如:
>>>list(‘hello’)
['h','e','l','l','o']
将列表转化为字符串:
>>> zifuchuan=''.join(somelist) ,其中somelist为要转化的列表,如果列表中是值是非字符串,需要将其转化为 字符串
将 列表转化为元组:
>>>tuple([1,3,4])
>>>(1,3,4)
26.可使用加法来拼接序列,但是不可拼接不同类型的序列,比如 列表 和字符串 是不可拼接在一起的
25.索引: numbers=[1,2,3,4,5]
numbers[0:1] : [1]
numbers[-3:-1] : [3,4]
numbers[-2:0] : []
numbers[-2:] : [4,5]
numbers[:] : [1,2,3,4,5]
24.切片可提取序列的一部分,但是注意切片的第一个索引指定的元素包含在切片内,第二个索引指定的元素不包含在切片内
23. Python支持一种数据结构的基本概念,名为 容器(container)。容器基本上就是可包含其他对象的对象。两种主要的容器是序列(如列表和元组)和映射(如字典)。在序列中,每个元素都有编号,而在映射中,每个元素都有名称(也叫键)
22. 元组是不可修改的,列表是可修改的,在大多数情况下,列表都可替代元组;例外情况是,当元组作为字典键时,不可用列表替代,因为字典键是不可修改的; 字符串也是不可修改的,所有的元素赋值和切片赋值都是非法的
元组作为字典的键:
21.如果要 打印: C:\nowhere , 其中\n为特殊字符,那么可使用 r''
print(r'C:\nowhere') ,将字符串原封不动的打印出来
20. 长字符串可使用: “““ content ””” , 这样子就不用再去使用转义 ; 也可以使用 \ , 来连接多行内容
19. 以字符序列#!开始,并在后面指定对脚本进行解释的程序的绝对路径,不论python库位于任何地方,都可像允许普通程序一样,运行脚本
#!usr/bin/env/python
18.使用常规导入包的方式: import 包名
17.可用变量来引用函数:
比如:from math import sqrt
foo = math.sqrt
则foo(4)的结果为2.0
16. 整数总是向下圆整,round圆整到最接近的整数,并在两个整数一样近是,圆整到偶数
>>>2//3
0
>>>round(2/3)
1.0
1.通过先导入,再使用目录,可以查看
DIR()的作用是:返回模块的属性列表
DIR() 函数不带参数时,返回当前范围内的变量,方法和定义的类型列表;
带参数时,返回参数的属性,方法列表。如果参数包含方法__dir __(),该方法将被调用。
如果参数不包含__dir __(),该方法将最大限度地收集参数信息。
2.在python3中要在输入内容中加\ n
print(name,'\n', email,'\n',phone_numbers)
3.collections
namedtuple
是一个函数,用来它创建³³自一个定义的tuple
对象,并且规定了tuple
元素的个数,并可以用属性而不是索引来引用tuple
的某个元素。
双端队列是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,
deque
除了实现列表的append()
状语从句:pop()
外,请立即获取iTunes还有语appendleft()
从句:popleft()
,这样就可以非常高效地往头部添加或删除元素。
使用dict
时,如果引用的关键不存在,就会抛出KeyError
。如果希望关键不存在时,返回一个默认值,就可以用defaultdict
使用dict
时,关键在对是无序的。dict
做迭代时,我们无法确定重点的顺序。可用defaultdict
Counter
是一个简单的计数器,例如,统计字符出现的个数
Internal Server Error - 廖雪峰的官方网站
4.从一个集合中获取最大或者最小的Ñ个值,可以用到heapq,heapq模块有两个函数:nlargest()
和 nsmallest()
5.python代码规范和命名规范
引号规范
- 语言自然 使用双引号
"..."
例如错误信息;很多情况还是unicode的,使用u"你好世界"
- 标识机器 使用单引号
'...'
例如字典里的钥匙 - 正则表达式 使用原生的双引号
r"..."
- 文档字符串(文档字符串) 使用三个双引号
"""......""
空行
- 模块级函数和类定义之间空两行;
- 类成员函数之间空一行;
空格
- 在二元运算符两边各空一格
[=,-,+=,==,>,in,is not, and]
- 函数的参数列表中,默认值等号两边不要添加空格
- 左括号之后,右括号之前不要加多余的空格
换行
Python支持括号内的换行。这时有两种情况:
1)第二行缩进到括号的起始处
2)第二行缩进4个空格,适用于起始括号就换行的情形
文档字符串
文档字符串的规范中最其本的两点:
- 所有的公共模块,函数,类,方法,都应该写文档字符串。私有方法不一定需要,但应该在DEF后提供一个块注释来说明。
- 文档字符串的结束“”“应该独占一行,除非此文档字符串只有一行。
命名规范
1.模块尽量使用小写命名,首字母保持小写
2.类名使用驼峰(驼峰)命名风格,首字母大写,私有类可用一个下划线开头
3.函数名一律小写,如有多个单词,用下划线隔开,私有函数在函数前加一个下划线_
4.变量名尽量小写,如有多个单词,用下划线隔开
5.常量使用以下划线分隔的大写命名
6.Python子类继承父类构造函数说明
第一种情况:子类不重写__init__,实例化子类时,会自动调用父类定义的__init__
第二种情况:子类重写__init__,实例化子类时,就不会调用父类已经定义的__init__
第三种情况:子类重写__init__,且要继承父类的构造方法,可以使用超关键字:
7.基础重载方法,可在自己的类中重写
8.类的私有属性和方法
访问私有属性
9.文件操作
·在的Windows系统中,在文件路径中使用反斜杠(\),而不是斜杠(/)
·为何会出现这些空白行呢因为在这个文件中,每行的末尾都有一个看不见的换行符,而打印语句也会加上一个换行符,因此每行末尾都有两个换行符?一个来自文件,另一个来自打印语句。要消除这些多余的空白行,可在打印语句中使用rstrip()可以
10.模块JSON
(1)导入JSON
优点:让你能够将简单的Python的数据结构转储到文件中,并在程序再次运行时加载该文件中的数据
json.dumps:将蟒蛇对象编码成JSON字符串
json loading:将已编码的json字符串解码为Python对象
蟒蛇原始类型向JSON类型的转化对照表:
(2)导入demjson
demjson库可用于编码和解码JSON数据
(3)JSON文件处理涉及的四个函数
python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分 - 小明在线 - 博客园
json.dumps()和json.loads()是JSON格式处理函数(可以这么理解,JSON是字符串)
json.dus()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
传入json.dump()和json.load()主要用来读写JSON文件函数
11.python导入
蟒模块(模块),是一个蟒文件,以的.py结尾,包含了蟒对象定义和Python的语句。
12.unittest模块中的断言方法
·运行测试用例,每完成一个单元测试,Python中都打印一个字符:测试通过时打印一个句点;测试引发错误时打印一个é;测试导致断言失败时打印一个˚F
13.Matplotlib, matplotlib.pyplot,pylab的区别
(1)Matplotlib是整个包; matplotlib.pyplot 是matplotlib中的一个模块; 并且pylab
是一个安装在一起的模块matplotlib
。
Pyplot为底层面向对象的绘图库提供状态机接口
(2)图形各部分标识:
(3)坐标轴刻度线样式设置
参数axis的值为'x'、'y'、'both',分别代表设置X轴、Y轴以及同时设置,默认值为'both'
参数which的值为 'major'、'minor'、'both',分别代表设置主刻度线、副刻度线以及同时设置,默认值为'major'
参数direction的值为'in'、'out'、'inout',分别代表刻度线显示在绘图区内侧、外侧以及同时显示
参数length和width分别用于设置刻度线的长度和宽度
参数pad用于设置刻度线与标签间的距离
参数color、labelcolor、colors分别用于设置刻度线的颜色、刻度线标签的颜色以及同时设置刻度线及标签颜色
参数labelsize用于设置刻度线标签的字体大小
参数bottom, top, left, right的值为布尔值,分别代表设置绘图区四个边框线上的的刻度线是否显示
参数labelbottom, labeltop, labelleft, labelright的值为布尔值,分别代表设置绘图区四个边框线上的刻度线标签是否显示
matplotlib命令与格式:tick_params参数刻度线样式设置_开码河粉-优快云博客_matplotlib tick_params
(4)各个点指定颜色,默认为蓝色点和黑色轮廓,在散点图包含的数据点不多时效果很好。但绘制很多点时,黑色轮廓可能会粘连在一起。要删除数据点的轮廓,可在调用scatter() 时传递实参 edgecolor='none'
(4)修改数据点的颜色,可向scatter() 传递参数c ,并将其设置为要使用的颜色的名称
使用用RGB颜色模式自定义颜色。要指定自定义颜色,可传递参数c ,并将其设置为一个元组,其中包含三个0~1之间的小数值,它们分别表示红色、绿色和蓝色分量
(5)plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolors='none', s=40)
c为设置颜色,且此处是根据y_values的值,并使用参数cmp告诉pyplot使用哪个颜色映射
此处网址可以查询颜色的渐变:
14. exec eval 的区别
exec: execute
用来执行存储在字符串或者文件中的Python语句
>>>exec'print "hello world " '
hello world
eval:evaluate
用来计算存储在字符串中的有效的Python表达式
>>>eval('2*3')
6