python基础学习笔记

1.变量、数据类型与基本语法

  1. 变量命名:可以是数字字母下划线,但不可以以数字开头。
  2. 数字类型:int,bool,float,complex。
  3. 除法:/表示除数,//表示除数向下取整。
  4. 海象运算符:’:=‘,运用在()内可防止赋值表达式调用多次。
  5. 身份运算符:is:判断两个标识符是不是引用自一个对象;is not:判断两个标识符是不是引自不同对象。
  6. 成员运算符:in:判断是否在指定序列;not in:判断是否不在制定序列。
  7. 逻辑运算符:and,or,not。
    运算符优先级
  8. 字符串:
    1. 双引号或者单引号括起来的。
    2. 方法:.title()—首字母大写;.upper()—全大写;.lower()—全小写;.rstrip()—返回后面没有空格的字符串;.lstrip()—返回前面没有空格的字符串;.strip()—返回前后没有空格的字符串;.split()—以空格为分隔符将字符串拆分成多个部分,并返回该列表。
    3. 合并:+。
    4. 重复:*。
    5. 转换形式:str()。
    6. 转义符:\,当字符串前用r表示反斜杠不发生转义。
    7. 字符串不可以发生改变。
    8. 字符串截取:变量[头下标:尾下标:步长]。
  9. 注释:#。
  10. 乘方运算:**。
  11. 求模运算:%,两数相除返回余数。
  12. 文档字符串:’’‘文档字符串’’’,也就是多行注释。
  13. 函数可以返回:None。
  14. 重构:将代码划分为一系列完成具体工作的函数。
  15. 行与缩减:不需要大括号,缩进表示代码块。
  16. 多行语句:语句很长可以使用反斜杠\实现多行语句,在()[]{}中的多行语句不需要反斜杠。
  17. 可以在同一行中使用多条语句,用;分割。
  18. 允许多个变量赋值。
  19. 标准数据类型:
    1. 不可变数据:Number,String,Tuple(与列表类似,但是元素不可更改)。
    2. 可变数据:List,Dictionary,Set。
    3. 类型转换:在这里插入图片描述

2.列表

  1. 存放一系列特定顺序的元素,用[]表示,每个元素用’,'分隔,知道顺序后就可以访问对应访问对应位置的元素(正向从0开始;反向第一个是-1,注意当列表为空时访问-1出错)。
  2. 方法:.append()—在末尾添加元素;.insert(a,’’)—在a处插入元素;.pop(b)—删除b元素,默认删除最后的元素;.remove()—按值删除第一个该值元素;.sort()—永久按字母顺序排列,当传递参数reverse=True时按与字母顺序相反的顺序排列列表元素;.sorted()—不影响原始排列顺序,返回特定排序(也可以传参);.reverse()—永久反转元素排列顺序。
  3. 语句:del a[b]—删除a列表的第b个元素。
  4. 函数:
    1. len()—快速获取列表长度;
    2. min()—数字列表找出最小值;
    3. max()—数字列表找出最大值;
    4. sum()—数字列表求和;
    5. range(a,b,c)—生成一系列数字,a到b-1且步长为c,没有c时默认为1,当for循环中的A为range(a,b)时产生a~b-1的数字,当作为list()参数时,产生对应的列表。
  5. 列表解析:A=[a*2 for a in range(1,10)]—产生一个2,4,8…20的名为A的数字列表。
  6. 列表切片:A[a:b]—从a到b-1切片,可以为负从后开始数,没有时a默认0,b默认最后;遍历过程中也可以使用切片,仅访问切片内元素。
  7. 复制列表:可以创建一个没有a、b的切片(即包含全部的列表元素),赋值给新列表;直接赋值是两个变量指向同一个列表。
  8. 元组:不可变的列表称为元组。
    1. 使用圆括号标识A()。
    2. 可以用索引或者循环访问。
    3. 不能向元组的元素赋值。
    4. 可以向存储元组的变量赋值。

3.操作

  1. 遍历:
    1. for循环: ‘for a in A:’ ,此后的循环体统一缩进即可。
    2. while循环:‘while C:’ ,此后的循环体统一缩进即可。
    3. break与continue与C语言里一样。
    4. 一般在for循环中访问而不修改,而移动、删除、填充等操作在while循环中进行。
  2. 判断:
    1. 条件测试:
    1. 检查相等时区分大小写(可以转换为小写后比较)。
    2. 与—and;或—or;包含—in;不包含—not in。
    3. 检查列表是否为空,直接用列表变量即可。
    4. 格式:两边加一个空格。
    2. if语句:if A :
    3. if-else语句: if A :
    else:
    4. if-elif-else语句:if A :
    elif B:
    else:

4.字典

  1. 用放在{}中的一系列键-值对表示,每一个键都与一个值相关联,每个字典里可以包含任意数量的键-值对,键-值对间用’:’,每个键-值对间用’,'分隔。
  2. 获取与键相关联的值,可以A[b],其中A为字典名,b为键(eg:b=‘point’)。
  3. 添加键-值对:A[‘C’]=K即可,字典不关心存储顺序但是关心键-值对间的关联关系。
  4. 创建空字典:A={}。
  5. 修改字典中的值:A[‘b’]=new。
  6. 删除键-值对:del A[‘b’],将删除键和与之相关联的值。
  7. 遍历字典:
    1. 遍历字典的所有键-值对:方法:.items()—返回一个键-值对列表(可能与存储顺序不同)。
    格式:for a,b in A.items(): 。
    2. 遍历字典的键:1.方法:.keys()—返回所有键的列表。
    2.格式:for a in A.keys() 或者for a in A: ,因为默认遍历所有的键。
    3.按顺序遍历字典中的所有键:使用函数sorted()来获得按特定顺序排列的键列表的副本。
    格式:for a in sorted(A.keys()):
    3. 遍历字典的值:方法:.values()—返回字典中的全部值的列表,因为是列表所以可以重复,可以采用函数:set()—集合,类似于列表,但是每个元素都是独一无二的。
    格式:for a in A.values(): 或者for a in set(A.values()): 。
  8. 嵌套:可以将字典嵌套在列表中,也可以字典嵌套在字典中,也可以将列表嵌套在字典中(此时字典中一个键可以关联到多个值)。
    eg:A={‘c’:‘k’,‘b’:[‘d’,‘e’,‘f’]}。

5.用户输入

  1. 函数input(a)—程序的等待用户输入,可以接受一个参数a作为给用户的输入提示,也可以没有参数,返回一个字符串。
  2. 函数int(a)—将数字的字符串表示转换为数值表示。
  3. 注意在python2.7中用raw_input(),input()将用户输入解读为python代码并尝试运行。

6.函数

  1. 函数的定义:def f():
    函数体
  2. 函数调用:指定函数名及括号括起的必要信息。
  3. 传递实参:
    1. 位置实参:基于实参的顺序。
    2. 关键字实参:传递给函数名称-值对,将值与名称关联起来,向函数传递实参时不会混淆。
    3. 列表:在传递列表后,函数可以对它进行修改,在函数中对这个列表所做的任何修改都是永久性的;反之为避免修改可以向函数传递列表的切片,利用切片表示法创建列表的副本。
    4. 字典:使用任意数量的关键字实参,将函数编写成可以接受任意数量的键-值对,即传入字典格式:def f(a,b,**c):,其中c就是字典
    5. 默认值:编写函数时可以给每个形参指定默认值,但在形参列表中必须先列出没有默认值的形参,在列出有默认值的实参;当默认值是类似空字符串时,相当于实参变为可选的;一般来说指定默认值时等号两边不应该有空格。
    6. 传递任意数量的实参:会创建一个新元组,将收到的所有值封装到元组中。格式:def f(*tap): ,调用格式:f(a,c,b)/f(a);在函数中可以通过for循环进行遍历。将定义接纳任意数量实参的形参放在最后。
  4. 返回值:在函数中,可以用return语句将值返回到调用函数的代码行。
    1. 返回简单值。
    2. 返回字典。
  5. 可以将函数存储在模块中;在需要的程序中进行导入,并且import语句应该放在开头:
    1. 导入整个模块:格式:import 模块名称 。调用格式:模块名称.函数名称()。
    2. 导入模块中的特定函数:格式:from 模块名称 import 函数名称 。调用格式:函数名称()。
    3. 使用as给函数指定别名:太长或者为了避免冲突时。格式:form 模块名称 import 函数名称 as 别称。调用格式:别称()。
    4. 使用as给模块指定别名:格式:import 模块名称 as 别称。
    5. 导入模块中的所有函数:不建议,因为可能名称相同,会覆盖函数。格式:form 模块名称 import * 。

7.类

  1. 类几乎可以模拟任何东西,一般类首字母大写,类中的函数称为方法,self为前缀的、可以通过实例访问的变量称为属性。
  2. 创建类:
		class A():
				def '下划线'init'下划线'(self,a):
						self.a=a
				def b():
						函数体
  1. init方法在创建类的实例时自动运行,并未显示地包含return语句但是会返回一个实例,其中的实参self会自动传入,并将self实参传递给每个方法,以self为前缀的变量都可供类中的所有方法使用,还可以通过类的任何实例访问这些变量,因此创建实例时无需传入self。特别的可以在init内为属性指定默认值。
  2. 属性还可以是另一个类的实例,该实例和其他实例相同,除了在访问其时前面需要指明包含其的类的实例和’.’。
  3. 创建实例:自动调用init函数,需提供需要的参数。格式:a=A(aa) 。
    1. 创建实例后可以访问属性:a.a。
    2. 调用方法:a.b()。
  4. 修改属性值:
    1. 直接修改实例的属性。
    2. 编写方法进行修改。
    3. 通过方法进行递增。
  5. 继承:一个类继承另一个类时,自动获得另一个类的所有属性和方法,子类还可以添加自己的新属性和方法。
		class Aa(A):
			def '下划线'init'下划线'(self,a,b,c):
				super.'下划线'init'下划线'(a,b,c)
  1. 父类必须在子类前出现,子类的方法在init中要先给父类的属性赋值,super()是一个特殊的函数,将子类与父类关联起来。
  2. 重写:对父类方法,子类方法可以通过定义重名方法对父类方法进行重写。
  3. 类似的,类可以放入模块由import语句进行导入,可导入多个模块,可以在模块中选定某一个具体的类进行选择导入,当然也可以导入整个模块,但是在创建实例时需要模块名.类名()进行访问。格式:form c import C,A
  4. 类名应该采用驼峰命名法。

8.文件

  1. 读取文件:
with open('A.txt') as file_object:
	contents-file_object.read()
  1. open()—接受要打开文件的名称,返回一个表示文件的对象;with在不在访问文件后将其关闭;read()—读取文件内容,并将其作为一个长长的字符串返回,特别的该函数会在到达文件末尾时返回一个空字符串,输出的话显示为一个空行。
  2. 向open()函数传递的可能是同文件目录中的文件名;相对路径;绝对路径。
  3. 按行读取文件:有时每行的末尾会有一个看不见的换行符,输出会多一个空行。
with open(filename) as file_object:
	for line in file_object:
		print(line.rstrip())
  1. with语句外文件被关闭,想要使用可以先进行保存,方法.readlines()从文件中读取每一行,并存储在一个列表中。
  2. 读取文本时将所有文本解读为字符串,可以使用函数int()、float()进行转换。
  3. 文件写入:
with open(filename,'w') as file_object:
	file_object.write("hello world!")
  1. 可以向函数open()提供两个实参:一个是文件名称;另一个是打开文件的模式:读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)、读取和写入文件的模式(‘r+’)。
with open('A.txt','w') as file_object:
	contents-file_object.read()
  1. 当’w’打开时,如果文件存在会先删除,在返回一个空的该文件,写入时不会自动在文本末尾添加换行符,但是只能写入字符串,可以使用函数str()进行转换。
  2. 当’a’打开时,像文件添加内容而非覆盖原有内容,如果文件不存在则会新建一个空文件。
  3. json存储数据:
#存储函数json.dump()
number = [2,3,4]
filename = 'number.json'
#文件存储格式为JSON格式
with open(filename,'w') as f_obj:
	json.dump(number,f_obj)

#加载信息
with open(filename) as f_obj:
	number_plus = json.load(f_obj)

9.异常

  1. python使用异常这一特殊对象来管理程序执行期间发生的错误。
  2. 异常是使用try-except代码块处理的:
try:
	answer=5/0
except ZeroDivisionError:
#除数为零异常
	printf("除数为零")
else:
	print(answer)
  1. 如果try代码块中的代码运行起来没有问题,except代码块将被跳过;如果try代码块中的代码导致了错误,python将查找这样的代码块,并运行其中的代码。依赖于try代码块成功执行的代码都放在else代码块中,如果之后有其他的代码块将继续执行。
  2. 其他常见异常:FileNotFoundError—找不到文件异常(该错误由open()引起,因此整个with语句应该放在try中),一般不用执行其他操作,可以在代码块中使用pass语句,表示什么也不做,当然也可以充当占位符,格式:pass 。

10.测试代码

  1. python提供了一种自动测试函数输出的高效方式,其中unittest提供了代码测试工具。
  2. 单元测试:核实函数某个方面是否有问题。
  3. 测试用例:一组单元测试,一起核实该函数在各种情况下的行为都符合要求。
import unittest
from A import a
#从A模块中引入函数a(),该函数接受两个输入c,d,得到一个输出e
class TestCase(unittest.TestCase):
	def test_a(self):
	#名称应尽可能详细,因为不用用户主动调用
		result = a(c,d)
		self.assertEqual(result,e)
		#用断言来核实

unittest.main()
  1. 在运行上例文件时,所有以test_打头的方法将自动运行,代码行unittest.main()使得运行这个文件中的测试。
  2. 上例中还用到了一个断言方法,assertEqual()—用于核实得到结果是否与期望结果一致。
  3. 断言:断言方法用于检查你认为应该满足的条件是否确实满足,只能在继承unittest.TestCase的类中使用这些方法。
    常见的断言方法
  4. 测试类:与测试方法类似,因为测试类主要测试类中的方法,而要测试类的行为,要先创建其实例。
  5. unittest.TestCase类包含方法setUp(),使我们可以只创建这些对象一次,并在每个测试方法中使用它们,python也会先运行setUp()方法,再运行各个以test_打头的方法。setUp()方法:一是创建一个调查对象,二是创建一个答案列表,二者均存储在self属性中,因此可以再任何地方使用。
  6. 运行测试用例时,每完成一个单元测试,python均打印一个字符:测试通过打印’.’,测试引发错误打印’E’,测试导致断言失败打印’F’。

11.迭代器与生成器

  1. 迭代器:访问集合元素(字符串,列表,元组)的一种方式,只能前进不能后退。 创建语句:iter()。访问下一个语句:next(),也可以直接使用for语句进行遍历。
  2. 类使用迭代器要实现两种方法:下划线iter下划线(),下划线next下划线()。其中next中可以使用StopIteration异常防止无限循环。
    例子
  3. 生成器:使用了yield的函数被称为生成器,生成器是一个返回迭代器的函数,只能用于迭代操作,在调用生成器运行的过程中,每次遇到yield时函数就会暂停并保存当前所有运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续执行。
    例子
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值