Python学习笔记(完整版-ZMR)

深度学习Python阶段总结

Print函数可以输入数字,字符, 表达式(输出计算结果,若仅输出表达式需在两端加单引号)

输入到文本则要在 open前加变量 (如fp=) 再输入地址(可输'a+'以读写方式打开), 在字符后加 file= (变量) 最后 fp. close() 即可。

也可接着输入第二行字符,在其后加'Python'即可

*在字符后打\n(转义功能首字符new line) 可另起一行(在引号前加r可使\n效果消失)

打\t (tab) 间隔四个空格

打\r(return) 仅显示其后的字符

打\b可退掉其前一字符(打多少\b就可以退多少)

用英文单引号输入内容若报错则可在两旁加\(但我只用中文单引号也行)

注意:

最后一个字符不能是反斜线,且反斜线数量必须为偶数

逗号为英文逗号

关于二进制:

“A”的二进制表示为01000001(占了八个位置,可表示2的八次方种状态),称为一字节byte;1024 byte=1KB(千字节),同理可推MB(兆字节)、GB(吉字节)、TB(太字节)等

(ps:byte字节型用于一个极小的整数)

各国各有自己的字符编码,由Unicode包含几乎全世界的字符(中英文统一使用两字节表示)

在Python中将二进制转为字符:print(chr(0b+字符二进制形式)

将字符转成十进制:print(ord(‘字符’))

(ps:一个字符对应一个整数,这个整数可以使用十进制)

扩展:ord()函数主要用来返回字符的ASCII码,chr函数主要用来表示ASCII码对应的字符。

保留字:给文件起名用了会报错;标识符:给变量/函数等其他对象起的名字。(包括字母、数字、下划线/不能以数字开头/不能为保留字/严格区分大小写

查询保留字可输print(keyword.)选择kwlist点击运行即可。

A(变量名)=(赋值运算符)B《(值)

*值通过赋值运算符放入变量中,输出值可用print(变量名)或print(f“{变量名}”)(同理若在其两端加单引号则直接输出变量名)

打‘标识’,id(变量)可显示值在内存中的地址

打‘类型’,type(变量)表示值的输出类型

打‘值’(变量名)直接输出值(value)

当对变量多次赋值时在最后用print函数仅输出最新的值(在每一行赋值后用print函数则不受影响)

常见的数据类型:

  1. 整数类型(int)——不带单引号、小数点的整数(正负数+0),文字类和小数类字符串无法转为整数
  2. 浮点数类型(float)——带小数点的数(可被int四舍五入转化为整数)(使用计算时可能会出现小数位数不确定的情况,可导入decimal模块代码解决误差),整数转换为float类型会保留一位小数(不能转换非数据串)
  3. 布尔类型(bool)——仅取True(表示1)/Flase(表示0)

*布尔值可以转化为整数

  1. 字符串类型(str)——经典’内容’,两端可用单/双/三引号,但单双引号只能在同一行,另起一行需在前面补齐并在上一行末尾加\(不过我的会自动补齐),赋值时不能单打str,要在其后加数字

扩展:二进制、十六进制主要用于单片机等控制器的寻址和输入输出

在Python中将八进制转为字符:同二进制,将0b改为0o

附:十六进制以0x开头(从0到f逢16进一),Python默认运行十进制

str与int类型转换:

*不同类型不能连接(+)运行,可在int函数前加str()解决(同理str转int/float)

Python的注释(给人看的,机器不会理)

  1. 单行注释:以#开头,直到换行结束
  2. 多行注释:无特定的多行注释标记,将一对三引号之间的代码称为多行注释。
  3. 中文编码声明注释,:在文件开头加上中文声明注释,用于指定源码文件的编码格式(即改变文件编码,可用记事本打开查看)

input函数:

接收来自用户的输入,输入值类型为str,使用=对输入值进行储存

格式:present(变量)=input(‘提问’)

注:该函数需要在运行界面输入回答

若要使用该函数计算则先要把赋值转为int类型(另起一行a=int(a)转换或直接在input前加int修改均可)str类型直接连接数字

Python常用的运算符:

(1)算术运算符——分标准算术运算符:加减乘除符号、整除(两个除号/,结果仅保留整数部分),%(取余数,小数则取至小数点后三位)、**(幂运算,即数**该数的次方数)

注:整除时若异号则最终结果取不大于标准结果的整数

(2)赋值运算符——即等号,执行顺序从右至左(如先计算右边结果再储存在变量中),一赋值可有多个引用(链式赋值),可直接在等号前加标准运算符(相当于二次赋值,如a-=10即为a=a-10),支持系列解包赋值(左右需个数相同一一对应)

(3)比较运算符——运行结果为布尔类型,比较值相等时等号要打两个(一个等号是赋值),不等于的表示为“!=”,比较标识相等用“is”,不相等用“is not”

注:值相等的变量标识(id)不一定相等

(4)布尔运算符——and相当于数学的且(^),or相当于数学的或(v),not则原酸结果与运算符相反,not in与in表示包含与否关系,即“赋值” in/not in “变量”

(5)位运算符——可将数据转成二进制进行计算。其中按位与(&)同时为1时结果为1,可用于判断奇偶数,按位或(|)同时为0时结果为0(*即对于两个二进制数01010&10010,相同位数同为1则保留,不同或同为0则全取0,输出结果为00010;对于0011 | 1010,仅相同位数同为0的部分保留,其余若有1则被1覆盖,输出结果为1011

左移位(<<)可使数据乘2(左端溢出的0被移除,最多到255因为二进制仅八个格,且左端1不会被抹去),反之为右移位(>>),格式为(数字<<移动位数)

Python的运算符优先级(无括号情况):算术运算>位运算>比较运算>布尔运算>赋值运算,有括号会优先计算括号内的内容

布尔值为False的对象:False、数值0、None、空字符串、空列表(用【】或list()表示)、空元组(用()/tuple()表示)、空字典(用dict()表示)、空集(用set()表示)

程序的组织结构:

  1. 顺序结构——从上到下顺序地执行代码,无判断跳转
  2. 选择结构——根据判断条件选择性执行部分代码

单分支结构:if条件表达式,仅结果为True时会执行

双分支结构:if条件表达式+else(执行False结果),注意在if语句输入变量==数时在数后/else后要加:

多分支结构:if条件表达式+elif*n个+else:,

嵌套if——可在if语句下再套多分支结构(俗称套娃×)

pass语句——占位,留空打草稿专用

Range函数:

用于生成一个整数序列

格式range(stop)【创建(0,stop)的整数序列,数与数相差1】 / range(start,stop)【创建(start,stop)的序列】 / range(start,stop,step)【数与数相差step】

可用print(list(r))查看序列内容(默认从0开始,不包括stop,即左闭右开),若左端比右端大则结果为空列表,步长为负数(如-1)则从最后一个元素开始

*not in与in判断整数序列中是否存在(不存在)指定的整数

循环结构:

(1)while条件表达式(判断n次,条件为True执行n次,if判断一次)

小技巧:输出偶数可用a%2==0或not bool(a%2):,(因为布尔值0为False)

  1. for-in循环——从可迭代对象(字符串、序列)中依次取值(遍历)(即把其中内容一行行输出),for对应自定义的变量,in对应可迭代对象

(注:for后变量可用“_”代替,此时在in后输入range(循环次数)函数即可循环print函数中的内容)

  1. 嵌套循环——套娃结构

(5)二重循环中的break与continue——用于控制本层循环,内层循环退出后外层循环仍会重新进行,最终输出结果为内层循环停止的结果。

(*扩展:end是print函数的参数,输入print(请输入,end=xxx)打印出来的是请输入xxx,若无end仅输出print()则默认有end=\n,即换行)

流程控制语句:

  1. break语句——用于结束循环,通常与if/while语句使用(满足条件退出),结果为False时最多循环三次。
  2. Continue语句——同break,但break是会退出整个循环,continue会进入下一循环(即只会运行前两行代码)

else语句——可与for / while语句搭配使用

列表;

变量可以储存一个元素,而列表可以储存n多个元素(可混存不同的数据类型),存储该对象的引用(lst用“.”来衔接操作而非“,”)

  1. 创建——格式lst=[‘a’,’b’]或调用内置函数lst=list([.....])
  2. 列表元素按顺序排序,数据与索引一一对应(索引按顺序从0向右依次递增,从-1向左递减),可以储存重复数据,且列表无内存不够的问题
  3. 列表查询——获取索引:格式为lst.index=() (也可在元素后加start,stop格式),若列表中存在n个相同元素只返回第一个相同元素的索引,若查询的元素不存在则弹出ValueError

获取单个元素:直接输入索引

获取多个元素:格式列表名[start:stop:step]切片操作),其输出结果为原列表片段拷贝,start默认为第一元素,stop默认切到最后一元素,步长为负则从start往前计算输出

In / not in也可判断元素在不在列表中

  1. 列表元素遍历——for in结构,将列表中元素一行行输出
  2. 元素添加——append()在列表末尾添一个元素(格式为lst.append(lst),后面同理),extend()在末端至少添加一个元素,insert()在任意位置添一个元素(格式为insert(索引,插入元素) ),切片操作在任意位置添至少一个元素(实际上为替换)

(注:添加后id不变)

  1. 元素删除——remove()一次删一个,重复的删第一个),pop()指定删除/删最后一个,错误显示IndexError),切片(一次至少一个),clear()列表清空),del删除列表)格式为del lst

(注:切片本质为从原列表中取元素出来成一新列表而不删除原列表元素,若要删除则将赋值改为空列表[])

  1. 元素修改——格式为lst[索引]=修改值(同切片,可删可替)

(8)元素排序——①sort()方法,默认从小到大排序(升序,同reverse=False),可指定reverse=True进行降序排序。②sorted()函数,同可指定降序排,原列表不改变(即产生一个新列表),格式为sorted(lst,reverse=True)+lst2=sorted(lst)

以上两种原id都不变

列表生成式——lst=[i for i in range(……)],其中i为变量

(ps:元素为数字时不能输入0,会报错……)

字典:

与列表一样是个可变序列(但是无序),以键值对的方式(运用哈希函数计算位置)存储数据,格式为变量={a(键):值,‘b:值} 或 dict(键=值),根据key查找value所在的位置,且放的键必须为不可变序列(如str和整数,即进行增删后id改变生成新内存地的序列)

*可用变量={}创建空字典

  1. 值获取——格式scores[键](key不存在则报错)或scores.get(键)(key不存在则返回None)可通过参数设置默认的value使key返回,即get(,默认value),最后输出默认值
  2. 常用操作——key的判断(输出in/not in)、删除(del是一对对删,clear全部清除)、新增(scores[键]=值)
  3. 获取字典视图——获取键的格式为keys=scores.keys()(输出print(变量[键])),值、序列获取也同理(*注意单词后加s)。可用list将其转化为列表形式
  4. 字典元素遍历——同列表,格式为print(键,值获取格式)
  5. 字典特点——①key不能重复(重复的后一个会覆盖前一个),但值可以。②字典中元素无序。③字典可以根据需要动态地伸缩。④会浪费较大内存,是一种使用空间换时间的数据结构
  6. 字典生成式——{(键的表达式)item:price(值的表达式) for item,price in zip(ietms,prices)(可迭代对象,如列表)},输出结果以元素少的为基准(如键有三个值有五个,结果为三个键值对)

(*在item后加.upper()可以使字母大写)

元组:

是一个不可变序列(同类有字符串),没有增删改操作(一修改就报错,但对象可变的话可以直接针对进行增改),格式为t=(元素对象,用逗号分割,小括号可省)/ t=tuple((元素对象)) / t=(一个元素,)(只包含一元组时的情况,小括号和逗号不可省)

  1. 元组存储的是对象的引用,如果对象本身是不可变对象则不能再引用其他对象,若对象是可变对象则可变对象的引用不允许改变,但数据可以改变
  2. 获取方式同列表,同样可遍历。
  3. 没有生成式

总结:元组中的对象可远观不可亵玩焉(×)

集合:

可变序列,是没有值的字典,格式为变量={a,b,c} / 使用内置函数set(创建序列)

(而且输出来里面的元素还是随机排列,转换字符串会把字母一个个拆开输入,但如果是转换列表为集合则列表内的元素排序不变)

*定义空集合为变量=set()

  1. 相关操作——①判断:in/not in。②添加:变量.add()一次加一个,变量.update()至少加一个元素。③删除:remove() / discard() 指定删除一个但后者在元素不存在时不报错),pop()任意删除一个(所以不能往里面写参数),clear()清空。
  2. 集合间的关系——①判断相等直接用print+== / !=。②判断包含与否用print(a.issubset(m)),也可用b.issuperset(a)意为a是否是b的子集)③判断是否没有交集用print(a.isdisjoint(b))
  3. 集合的数学操作——①求交集部分:print(a.intersection(b)) / (a & b) ②求并集部分:print(a.union(b)) / a|b ③求差集部分(ab中减去b与ab相同的部分):print(a.diffrence(b)) / a-b ④求对称差集部分(两集合去掉公共部分后剩的):print(a.symmetric_difference(b)) / a^b

(4)集合生成式——列表生成式{ }

字符串:

基本数据类型,是不可变的字符序列,不能增删改。

  1. 字符串驻留机制——仅保留一份相同且不可变字符串的方法(即创造多个相同值id不变),不同的值被存放在字符串的驻留池。
  2. 驻留机制的几种情况(交互模式)——①字符串长度为1或0 ②符合标识符的字符串(如一串字母不包含%,但也可以用a=sys.intern(b)形式或在Python输入使它们强制驻留) ③字符串只在编译时进行驻留而非运行时(如在赋值后加join等操作) ④【-5,256】之间的整数
  3. 进行多字符串拼接时建议使用str类型的join方法而非+
  4. 常用操作——①查询索引print(变量.index(字符子串)) 查找子串substr第一次出现的位置,会报错 / rindex() 查找最后一次出现的位置,会报错 / find() 查找第一次,不存在则输出-1 / rfind() 查找最后一次,不存在输出-1

②大小写转换(转换后id改变产生新对象)——新变量=变量.upper() 全部转大写 / lower() 全部转小写 / swapcase() 大转小,小转大 / capitalize() 字符串首字母大写 / title() 把每个单词首字母大写,其余字母小写

③内容对齐——居中对齐:print(变量/字符串.center(宽度,填充符)(字符串长度小于宽度时左右填充,默认空格,大于则原样输出)/ 左对齐:ljust(),同居中对齐 / 右对齐:rjust(),同理 / zfill() 仅用0填充,其余同理

(ps:居中对齐如果两边剩余长度不对称会随机填充左右边)

④ 劈分——新变量=变量.split(sep=特定分割处) / print(变量.split()) 从字符串左边开始,默认从空格处分割(分割会把该处内容删掉),也可用 (sep=’’,maxsplit=数字) 指定最大劈分次数,剩余子串单独作一部分。输出值为列表形式 / rsplit() 从右边开始,其余同理

(ps:其实不打sep=也行……)

⑤判断——print(变量/赋值.isidentifier()) 判断字符串是否为合法标识符字母数字下划线/ isspace() 判断是否全由空白字符(回车、换行、水平制表符,比如\n \r \t)组成 / isalpha() 判断是否全由字母汉字也可)组成 / isdecimal() 判断是否全由十进制数字不含罗马数字)组成 / isnumeric() 判断是否全由数字(含汉字、罗马数字)组成 / isalnum() 判断是否全由字母和数字组成

⑥替换与合并——(格式同前)replace(原值,替换值,替换次数) / print(连接符.join(变量)) 将字符一个个用连接符连接,将列表和元组中的字符串合并

⑦比较——从两字符串的第一个字符依次比下去,直到比到不相等的为止。其原理为比较原始值大小,用ord()函数可查询字符原始值大小(查询原始值对应的字符则用chr()函数)

⑧切片——产生新对象,左闭右开,格式同列表。

  1. 格式化字符串——①%作占位符(如%s占字符位),%d / %i占整数位,%f占浮点数位。格式为print(输入内容%(变量1,变量2)),②{}作占位符,格式为print(……{0}……{1}.format(a,b))(f…{a}…{b}) ③表示后退x个字符宽:‘%xd’(输入内容)保留x位小数:%.xf,(也可同时表示宽度和精度%x.xf,d省略不写)或print({0:.xf}.format(数字)

  1. 编码与转换——即字符串与二进制数据(byte)的相互转换。①GBK编码格式,格式为print(变量.encode(encoding=GBK))一个中文占两个字节 ②UTF-8编码格式,一中文占三字节// 解码:格式print(编码内容.decode(encoding=编码格式)),注意解码和编码格式要统一

函数:

执行特定任务以完成特定功能的一段代码,格式def 函数名(形式参数,如a,b,c):  print(a=,a)  return结束(展开式),

如calc函数可用于加法,calc(a,b)即a+b,此时a、b为实用参数

  1. 参数传递——按位置顺序传递,但若指明a=?则不遵循顺序(关键字实参)
  2. 参数传递内存分析——在函数调用过程中进行参数的传递,如果是不可变对象,在函数体的修改不会影响实参的值,如果是可变对象则会(如下图,arg1修改不影响n1的值,arg2修改则会影响n2的值)
  3. 函数的返回值——函数返回多个值时,结果为元组没有返回值可以不写return),如果返回值是1个返回原值(如定义def fun(): 但只打印一个’hello’)

(扩展:以下这种格式可将奇偶数分开:)

  1. 函数的参数定义——①默认值参数:函数定义时给形参设置默认值(即在def fun()给变量赋值),只有与默认值不符的时候才需要传递实参。②个数可变的位置参数:定义时若无法确定传递的位置实参的个数时使用此参数(传多少个都可以)。用*定义(def fun(*args):,结果为一个元组。③个数可变的关键字形参:使用环境同位置参数,用**定义,结果为一个字典

(注:def fun()内的可变参数一般仅有一种、一个,若同时有位置参数和关键字形参则必须位置参数放在关键字形参之前

(拓展:def fun(a,b,*,c,d)中cd只能按关键字形参传递)

  1. 变量的作用域——程序代码能访问该变量的领域,分为局部变量:在函数内定义并使用且只在函数内有效如def fun(a,b):  c=a+b,c即为局部变量,不能另起一行print) ②全局变量:在外部调用输出也可行的变量,也可先在局部变量(如c)前加global再赋值,其部分格式如下:
  2. 递归函数——函数体内调用函数本身,由递归调用递归终止条件组成。

示例:用递归函数计算阶乘

关于Bug的常见类型:

  1. 粗心导致的语法错误SyntaxError——例如在input函数里直接输入数字(经典错误了属于是)、漏了if / else / 循环语句的冒号把字符串和数字拼在一起、没有先定义变量(如循环条件的)
  2. 知识点不熟的错误——例如列表对应索引顺序没记住、append()等的使用条件不熟

(3)思路不清导致的错误——解决方案:①用print函数找出报错位置 ②用#将代码注释掉。

(4)用户操作错误或一些“例外情况”导致的错误——如在int中输入字符,可使用:①异常处理机制try-except函数,即将异常代码放在try:下运行。②多个except结构,如ZeroDivisionError(检查除数是否为0)/ ValurError(检测是否将数字输成字符串等)/ BaseException(顺序在最后,可用于以下结构)

拓展——try……except……else结构:若try模块中未出现异常则执行else块,抛出异常则执行except块

try……except……else……finally结构无论是否有异常finally模块都会被执行

(5)Python中常见的数据类型——ZeroDivisionError:除/取模0(所有数据类型)/ NameError:未声明/初始化对象(没有属性)/ SyntaxError:语法错误 / ValueError:传入无效参数

(6)traceback模块使用——创建格式如图:

(这里涉及到线程问题,不过会不会创建似乎用处不大)

  1. Pycharm的调试——①断点:代码左侧栏单击出现红点,程序运行到此处暂时挂起,停止执行,此时可详细观察程序的运行情况。②在上方工具栏或右键单击虫子图标进入调试视图

编程思想:①面向过程(比较简单,可用线性思维去解决)②面向对象(较复杂)

类与对象:

类——类别,多个类似事物组成的群体总称,能帮助我们快速处理和判断事物的性质。

数据类型——不同数据类型属于不同的类,可用内置函数查看。

对象——如整数是int类型下的对象,类型下的具体个例就是对象

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值