python从入门到实践知识笔记

本文详细介绍了Python编程的基础知识,包括pickle模块的使用、文件操作、遍历技巧、集合操作、堆和双端队列的概念,以及Python中的异常处理、模块导入、字符串格式化等。此外,讲解了类和对象、继承、属性访问、字典操作、序列解包、列表方法等核心概念,还涵盖了模块如collections和logging的使用。文章适合Python初学者阅读,以加深对Python基础知识的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,...):

函数体

构造函数和成员函数之间的区别:

  1. 成员函数的函数名可以自定义,但是,构造函数的函数名是固定的__init__
  2. 成员函数需要被手动调用,但是,构造函数在创建对象的过程中是自动被调用的
  3. 对于同一个对象而言,成员函数可以被调用多次,但是,构造函数只能被调用一次

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 __(),该方法将最大限度地收集参数信息。

Python 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个空格,适用于起始括号就换行的情形

文档字符串

文档字符串的规范中最其本的两点:

  1. 所有的公共模块,函数,类,方法,都应该写文档字符串。私有方法不一定需要,但应该在DEF后提供一个块注释来说明。
  2. 文档字符串的结束“”“应该独占一行,除非此文档字符串只有一行。

命名规范

1.模块尽量使用小写命名,首字母保持小写

2.类名使用驼峰(驼峰)命名风格,首字母大写,私有类可用一个下划线开头

3.函数名一律小写,如有多个单词,用下划线隔开,私有函数在函数前加一个下划线_

4.变量名尽量小写,如有多个单词,用下划线隔开

5.常量使用以下划线分隔的大写命名

6.Python子类继承父类构造函数说明

第一种情况:子类不重写__init__,实例化子类时,会自动调用父类定义的__init__

第二种情况:子类重写__init__,实例化子类时,就不会调用父类已经定义的__init__

第三种情况:子类重写__init__,且要继承父类的构造方法,可以使用超关键字:

Python 子类继承父类构造函数说明 | 菜鸟教程

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使用哪个颜色映射

此处网址可以查询颜色的渐变:

https://matplotlib.org/gallery/color/colormap_reference.html#sphx-glr-gallery-color-colormap-reference-py

14. exec  eval 的区别

exec: execute

用来执行存储在字符串或者文件中的Python语句

>>>exec'print "hello world " '

hello world 

eval:evaluate

用来计算存储在字符串中的有效的Python表达式

>>>eval('2*3')

6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值