自学python的笔记@阿布君

小计:

在python中,通过缩进将不同层级的语句进行划分,相比于C语言,python用:来替换();

目录

一、变量和字符串

1.变量:

2.字符串:(部分)

3.原始字符:

 4.字符串的加法和乘法:

5.比较运算符:

 6.循环体

二、字符类型及操作

1.整型int

2.浮点型

3.复数

4.字符操作

1.取整

2.取余

3.模块 divmod(x,y)

5.布尔类型

6.逻辑运算符

三、流程图、思维导图--编写程序之前的准备工作

四、分支和循环

1.if else elif

第一种:

第二种:

第三种:

第四种:

        实例:

 2.if else 的嵌套

3.循环体

 五、列表

1.定义:

2.切片

 3.列表的操作(增、删、改、查、加、乘、嵌套)

1.增加:

2.删除:                                如果列表中不存在该元素,则报错

3.修改:

4.查找:

拓展:

5.加法和乘法:

6.嵌套:

 ****二维列表的创建

 ****二维列表的复制(深拷贝)

4.列表推导式

形式一:

形式二:

 形式三:

 形式四:

六、元组

 1.定义

2.元组的加法、乘法

 3.元组的打包和解包

七、字符串

1.46种字符串的操作函数

2.操作函数的细分

1.大小写转换

 2.左中右对齐

3.查找

4.替换

5.判断

6.截取

 7.拆分&拼接

3.格式化字符串

1.   format() 的基本符号操作

 2.    aligen参数

3.适用于浮点和字符串

八.序列

1.定义

2.与序列相关的一些函数

1.列表、元组和字符串相互转换的函数

九、字典

1.定义

字典实验--摩尔密码 

 2.创建一个字典

 3.字典的操作(增、删、改、查、嵌套、字典推导式)

         1.增

         2.删

         3.改

        4.查

         5.嵌套 ​编辑

        6.字典推导式

十、集合

1.定义

2.创建一个集合(3种方法)

        方法一:

        方法二:

        方法三:

3.集合的交集、并集等

 4.集合元素的添加与删除

5.可哈希

十一、函数

1.定义

好处:

2.创建和调用函数

3.参数

1.位置参数

 2.关键字参数

 3.默认参数

4.'/'和'*'号

5.收集参数

6.参数作用域

4.嵌套函数

1.定义

3.闭包(工厂函数)

 4.装饰器

5.lambda表达式

1.定义

2.代码 

 6.生成器

1.定义

7.递归

1.定义

2.例子

 3.递归的应用(汉诺塔)

8.函数文档、类型注释、内省

1.函数文档

2.类型注释

3.内省

9.高阶函数

1.定义 

 2.functools里的reduce函数

3.偏函数

4.@wraps装饰器

十二、文件存储(操作)

1.定义

2.文件操作函数

3.路径处理

4.with语句和上下文管理器

 5.pickle函数

1.dump()写入文件

2.load()读出文件

十三、异常

1.定义 

2.处理异常

1.try-except​编辑

2.try-except -else

3.try-except-finally

 4.两种形式

3.异常的嵌套

4.raise语句

5.assert语句

 6.用异常来实现C语言的goto

十四、类和对象

1.定义 

 2.对象的创建

 3.封装


一、变量和字符串

1.变量:

        定义后可直接调用,中文也可以作为变量;

不能数字开头去定义如520baby,这是语法错误。

2.字符串:(部分)

       字符串的值固定,不可修改

       字符串中可以用'abc'也可以用"abc",设定两种是为了避免英文单词中的符号冲突

 同时也可以用转义字符\n等:

   

3.原始字符:

        在字符串符号前面加小写的r,那么字符串中的所有符号都当作普通符号处理,转义字符失效,一个\用来连接上下两段。

但是当有大量的换行,那么就可以用到长字符,用一对"""或者一对''',前后呼应即可:

 4.字符串的加法和乘法:

        520不等于‘520’,字符串其实就是文本,文本与文本之间的加法是两个相拼接。而字符串的乘法就是本文本的复制。

x='520';y='1314'
print(x+y)   x和y拼接
print(x*3)  将x输出3次(复制)

输出:

5201314
520520520

5.比较运算符:

 6.循环体

在C语言中:

for(i=0;i<5;i++)

{

        printf("%d",i);

}

while(i)

{

}

而在python中:

for i in range(5):

       print(i)    ---->输出0~ 4

while i<n:

        操作...

break:跳出一层循环体

continue:结束本次循环,继续下次循环

二、字符类型及操作

1.整型int

        在python中,字符显示的位数是没有限制的

2.浮点型

        不是很精确,需要引入 decimol 去实例化一个数

3.复数

 x=1+2j

x.real=1.0

x.imag=2.0

4.字符操作

1.取整

3/2=1

-3/2=-2

因为整除是向下取整,取小于结果的最大整数

2.取余

7%2=1

0%2=0

2%3=2

x%y=z x=(x/y)*y+(x%y)

3.模块 divmod(x,y)

out:(x/y,x%y)

         pow函数和x**y差不多,但是pow支持第三个参数

pow(x,y,z)=z**y%z

5.布尔类型

        只输出True或者Flase

为Flase的全部情况

         Fraction(0,1)表示分子为0,分母为1的分数

6.逻辑运算符

        python中只有三种:

not、and、or 同时存在时,优先级:not > and > or

         短路逻辑:和C语言的一样,为节省算力,当左边的数已经能确定结果,就不会运算右边的

 

         优先级:

优先级
​从下到上

         重点:not > and > or

三、流程图思维导图--编写程序之前的准备工作

四、分支和循环

1.if else elif

第一种:

if x:

       操作1

else :

        操作2

第二种:

if x:

       操作1

elif y :

        操作2

第三种:

if x:

       操作1

elif y :

        操作2

else :

        操作3

#这种是x,y都不成立时执行操作3

第四种:

条件成立时执行表达式 if 的判断条件  else 不成立时执行的条件

想法: 这里有点儿像C语言中的 max = a > b ? a : b;

        实例:

这里前后家里括号表示是一句话,所以跨行显示,没有每行末加\

 2.if else 的嵌套

        无限制

3.循环体

if x :

        y

while x:

        y

for

常和range()搭配,其作用是生成一个数字序列

for (i=0;i<100;i++)    ==>    for i in range(100):

 五、列表

1.定义:

不同于C语言的数组,更像c的结构体,列表仅用一对中括号可以包括所有类型的数据

[1,2,3."AlienABJ"]     -->这是一个匿名的列表

0  1  2        3        <---从左往右数的下标

-4  -3  -2     -1          <----从右往左数的下标!

a=[1,2,3."AlienABJ"] 

print(a)

print( a[0] )   -->下标索引法  ==》print( a[-4] )

2.切片

就是一次性提取一段数据出来

接上:

print(a[1:3] )---->在python中,前面的一个下标为索引,输出包含索引;后一个为末下标,不包含

print( a[0:3:2] )---->第二个冒号后的数为设置的列表步进的跨度值,为负时为倒着输出

问题:

a=[1,2,3,4,'alienabj',6,7,8,9] print(a[8:-1:-1]) print(a[0:12]) 那为什么end等于12就可以打印而等于-1就不能 

答案:

在 Python 中,对于切片操作 a[start:end:step],当 end 被设置为负数时,表示从列表的末尾位置倒数计数,而且不包括 end 位置。整个区间的范围是 [start, length+end),其中 length 表示原序列的长度。

在这个例子中,a[8:-1:-1] 表示从下标 8 开始往下标 -1 方向逆序打印,但是由于 end 的值为负数,表示从列表末尾第一项开始往前推了一位,即最后一位,因此切片操作等价于 a[8:8:-1],也就是无法得到任何元素,因此结果为空列表。

而对于 a[0:12],由于 end 的值等于 12,超过了列表的最大下标 9,Python 会自动将其调整为列表的长度 10,因此实际上是在取 [0, 10) 的区间,包含整个列表,因此输出结果为完整的列表。

需要注意的是,对于 a[-1:] 这样的切片操作,如果 end 的值为负数且超过了列表最小下标的负数值,那么就可以取到列表的最后一个元素。例如,a[-1:] 就等价于 a[9:10],表示取下标为 9 的元素(最后一个元素)到列表尾部的所有元素。

 3.列表的操作(增、删、改、查、加、乘、嵌套)

1.增加:

append()           在列表的末尾添加元素---------缺点:一次只能添加一个元素

extend()       允许添加一个可迭代对象(序列)(必须是),新的内容也是添加在列表的末尾

insert(x,y)        x-->指定待插入的下标  y-->待插入的数

remove()    删除指定的元素(如果列表中有多个待删除的元素,则删除最靠前的那一个

2.删除:                                如果列表中不存在该元素,则报错

pop()               删除指定下标的元素

clear()        直接清空整个列表  

3.修改:

直接下标去改     a[5]=[9]

切片法去改一整段   a[4:]=[6,5]

4.查找:

count(x)       查找列表中x元素的个数

index(x)       查找列表中x元素的下标(如果存在多个,则输出第一个的)

          index(x,start,end)        设置查找范围

        以下有short()自动排序和copy()

拓展:

short()函数实现自动排序(会改变原列表)

shorted模块可以将排序赋值给新的变量

reverse()函数实现逆序,Flase为不执行

下图是short()的深层用法,key可以按照指定的规则去排序(要用到Lambal函数)

  

 x=copy()       完整复制该列表到x   

        图上的两种拷贝方式都称为浅拷贝

5.加法和乘法:

        与字符串的操作一样,加法拼接,乘法复制

6.嵌套:

        列表就相当于数组,a[0]既表示一维列表,a[1][1]表示第二行第二列的二维数组

 ****二维列表的创建

方法一:

        a=[[1,2,3],[4,5,6]]              二行三列

方法二:

        a=[1,2,3]

        for i in rang(3):

                a[i]=a

is又称同一性运算符,用于检验两个变量是否指向同一个对象的运算符

 ****二维列表的复制(深拷贝

a=b这样去复制一个列表并不是真正的copy,a只是得到了b的列表的索引

浅拷贝只适用于拷贝一维列表,而用此方法拷贝二维的,那么只有最外层的列表被拷贝,最里面的值拷贝了索引。

要实现深拷贝就要引入copy()函数模块。

4.列表推导式

既相当于一种更简略更直观的表达:

看图就懂

形式一:

形式二:

 

 形式三:

'_'是匿名变量

 形式四:

 

六、元组

 1.定义

和列表很相似;

既能像列表容纳多种类型的变量,也拥有字符串不可变的特性;

()来表示

因为不能修改,所以像列表有的增删改查而元组只支持查,只能用countindex函数;

+、*和列表的一样;

2.元组的加法、乘法

同列表

 3.元组的打包和解包

 x,y=10,20这种同时赋值的原理就是用到了临时变量打包

七、字符串

1.46种字符串的操作函数

2.操作函数的细分

1.大小写转换

 2.左中右对齐

  

3.查找

4.替换

 

5.判断

6.截取

 7.拆分&拼接

 拼接是join

3.格式化字符串

  

1.   format() 的基本符号操作

适用用于整数

 2.    aligen参数

 

3.适用于浮点和字符串

下面提到的 f\F字符串是最新的python3.6更新的,所以老版本会不兼容

八.序列

1.定义

元组、列表、字符串这些统称为序列

根据序列的可变与否,分为可变序列不可变序列

可变序列:列表[ ]

不可变序列:元组()、字符串“”

 在python中,每一个对象都有三个基本属性:唯一标志类型

id()函数可以查询唯一标识;

is和not is是判断关系属性是否相同;

in和not in是判断是否包含;

del函数:可删除整个列表,也可删除列表中的特定字符;

2.与序列相关的一些函数

1.列表、元组和字符串相互转换的函数

 

 

 

 

 

 

 

九、字典

1.定义

字典实验--摩尔密码 

 第一种列表法:

第二种列表法:

第三种字典法:

在映射类型的获取上,字典的效率要远远高于列表的;

 2.创建一个字典

字典里的映射关系是之间映射;

字典的特征就是{ }以及里面键和值之间的冒号; 

不存在重复的键;

 3.字典的操作(增、删、改、查、嵌套、字典推导式

         1.增

         2.删

         3.改

 

        4.查

         5.嵌套 

        6.字典推导式

十、集合

1.定义

集合中所有元素都是独一无二的;

集合是无序的;

2.创建一个集合(3种方法)

        方法一:

直接花括号;

        方法二:

用集合推导式;

        方法三:

类型构造器set();

3.集合的交集、并集等

  也可写成这种形式:

 4.集合元素的添加与删除

集合分为以下:

5.可哈希

如果一个对象是可哈希的,那么要求它的哈希值在其程序的整个生命周期中保持不变

python中,大部分可变的都是不可哈希的,而可变的相反;

集合的元素字典的键,都要求是可哈希的(不可变对象);

 

 列表变成集合后,速度确实快了,但是是以牺牲了存储空间为代价; 

十一、函数

1.定义

好处:

1.最大程度的实现代码重用,减少代码冗余;

2.不同功能的代码进行封装、分解,从而降低结构的复杂度,提高代码的可读性;

2.创建和调用函数

def 函数名:

        实现代码

 和C语言规则差不多,也分实参和形参,也有return(没有加就返回一个None);

3.参数

1.位置参数

 2.关键字参数

 3.默认参数

python允许函数的参数在定义时被允许设置默认值,这样在调用时没有传入实参,那么将采用默认的值来代替;

4.'/'和'*'号

如上节,

/ 是限制前面的必须输入 位置参数,后面的无限制;

* 是前面无限制,后面的限制只能是  关键参数

5.收集参数

对形参用是打包,对实参用是解包;

形如print函数,可以随意传入任意数量的参数

**只需要在参数前加一个 * 号即可实现(相当于*将所有元素打包到元组中了);

**收集参数还可以将元素打包成字典,用 ** 就可以了;

format函数同时用了 * 和 **;

*、** 对形参用是打包,对实参用是解包;

6.参数作用域

全局作用域,局部作用域

类似于C语言的全局变量局部变量

1.全局变量整个函数都可以去调用;

2.外部的不能调用内部的;

3.当内部有变量与一个全局变量重名,那么内部的优先;

4.全局变量可以在内部被访问到,但是内部不能修改它的值,除非使用 globe()语句;

4.嵌套函数

嵌套函数是闭包和装饰器的基础;

1.定义

就是def()里面再写def()。。。;

如果想要内部函数能够改变内部函数的值,那么就得使用 nonlocal

最外层函数不能直接调用内置函数,但是可以用下面的闭包法

2.LEGB规则

python中,变量重复或者覆盖时,都是遵循LEGB规则

L>E>G>B;

L:局部作用域;

E:嵌套函数的外层作用域;

G:全局作用域;

B:内置作用域

 

3.闭包(工厂函数)

 就是调用一次外层函数实现初始化,然后将内层的函数的引用赋值给外部参数,实现跨函数的调用,而初始化时外层函数的默认值用来静默存储变化后的值,这一过程就像C语言中的Staic静态变量一样;

两个关键点:

 用闭包来做的小游戏:

 

 4.装饰器

这里涉及到 语法糖,例如上面讲到的 format 可以用 f 来替换实现简化代码;

1. 这是一个简单的单纯的闭包:

 

 2.这是不用装饰器实现同样操作:(步骤剖析)

 

 3.这是单层装饰器:

 4.这是一个函数有多个装饰器:(从下往上调用

 5.如何向装饰器里传入参数:

实现原理很简单,多加一层def()

5.lambda表达式

1.定义

lambda表达式也称为 匿名表达式,其存在意义是为了简单的表达式计算,避免麻烦的再去为变量命名。

2.代码 

 6.生成器

1.定义

 除了使用闭包、全局变量

但是过多的使用全局变量会污染空间,而闭包的定义相对复杂,

那么就是使用生成器;  

生成器相当于一个工厂,只有调用一次才从yield处生成一次数据(调用一次执行一次

 2.原理代码

 这是生成器的实现的一个实例:(斐波那契数列)

7.递归

1.定义

函数自己调用自己的过程;

2.例子

        斐波那契列表--兔子繁殖问题

 3.递归的应用(汉诺塔)

游戏规则:

每次只能移动一个;

只能小的在上面,大的在下面;

 

 视频:

汉诺塔 -- 函数

 

8.函数文档、类型注释、内省

1.函数文档

用来说明解释该函数的文档;

help(函数名)显示的部分;

创建方法:

2.类型注释

 只是在形参后面(要用:)注明期望的数据类型,但是不是强制要求,因为这只是给人看的,python不会执行任何操作;

如果想要python帮你检测输入是否否和期望,可以import Mypy第三方模块; 

3.内省

python自我检测

9.高阶函数

1.定义 

前面讲过 函数可以当作变量,那么当一个函数接收一个函数并将它当作参数,那么该接收函数被称为高阶函数;

 前面学的map()、fitter()等只要形参里有Key的;

python中将这类函数放在了functools模块;包含了很多实用的高阶函数和装饰器;

 2.functools里的reduce函数

reduce函数以前是IBF内置函数,和map和fitter一样,后来被移出;只能在functools模块调用了;

3.偏函数

偏函数模块叫做partial(); 

偏函数是指对指定的函数进行二次包装,通常是将现有的函数部分参数预先绑定,从而得到一个新函数,那么该函数被称为偏函数;

说白了,偏函数的作用就是将一个函数的多个参数拆分,多次进行传递

类似于前面讲到的 闭包;

4.@wraps装饰器

之前讲的装饰器有一个副作用,当用到函数的自省的时候,会出现名字错误;如下:

十二、文件存储(操作)

1.定义

储存在硬盘中的文件;

2.文件操作函数

open()、read()、write()

3.路径处理

对路径的一些操作函数:

这一节学的不是很好,视频地址:

http://【【Python教程】《零基础入门学习Python》最新版(2023年04月03日更新)】 https://www.bilibili.com/video/BV1c4411e77t/?p=55&share_source=copy_web&vd_source=42f6b821a056d1a8305a214e0a40efa6

操作符号
符号作用
cwd()获取当前目录的路径
is_dir()判断一个路径是否为文件
is_file()判断一个路径是否为文件夹
exists()检测一个路径是否存在
name获取路径的最后一个部分
stem获取文件名
suffix获取文件后缀
parent获取父级目录
parts

将路径的各个部分拆分成元组

stat()查询文件或文件夹的信息
resolve()将相对路径转化为绝对路径
iterdir()获取当前路径下所有子文件和子文件夹
mkdir()创建文件夹
rename()文件或文件夹的名字
replace()替换指定的文件或文件夹
rmdir()、unlink()删除文件夹、删除文件
glob()功能强大的查找函数

 

 

4.with语句和上下文管理器

 为文件操作提供了更优雅的实现方式;

简化了传统的open打开文件、猜哦文件、关闭文件三步骤,它会自动关闭文件;

使用with上下文的好处就是可以确保文件能够被正确释放,假如文件中途有报错,传统的方式会直接结束程序从而文件关闭失败;

 5.pickle函数

用于解决永久存储python的问题;

允许将字符串、列表、字典这些以文件的形式保存

将python对象序列化,既将其以二进制形式存储

1.dump()写入文件

2.load()读出文件

十三、异常

1.定义 

一种机制;

有异常直接跳出程序;

 异常可以反映出具体问题

2.处理异常

 在代码中去捕获并且处理异常,而不是出错之后再改代码;

1.try-except

  

2.try-except -else

不满足异常条件就会执行else语句的内容;

3.try-except-finally

不管满不满足异常条件,最终都会执行finally的语句;

 

 4.两种形式

 或者

3.异常的嵌套

 

4.raise语句

 

5.assert语句

 与raise语句一样,都是主动异常,但是

 可以用它替换if判断语句哦;

 6.用异常来实现C语言的goto

python中并没有C语言的goto语句,但是可以

 

十四、类和对象

1.定义 

一个对象的静态特征称之为 属性

一个对象所能做的事情称为 方法; 

 2.对象的创建

第一步:

 然后如下图:

定义的类名一般开头字母大写

 3.封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值