Python学习笔记

一、变量和数据类型

1.二进制与字符编码

在这里插入图片描述
注:不管中文、英文,计算机当中都叫字符,一个字符对应一个整数

2.标识符和保留字

1.)保留字

在这里插入图片描述

3.变量定义与使用

1.)变量是内存中一个带标签的盒子
2.)变量的组成
在这里插入图片描述
3.)变量多次赋值后,变量名会指向新的空间
在这里插入图片描述

4.)常见数据类型

在这里插入图片描述
(1)整数类型
在这里插入图片描述
(2)浮点类型
在这里插入图片描述
(3)布尔类型
在这里插入图片描述
(4)字符串类型
在这里插入图片描述

5.)数据类型转换

在这里插入图片描述
例如:在这里插入图片描述

6.)注释

在这里插入图片描述
(1)中文编码声明格式注释:

#coding:gbk             修改编码格式

二、函数与运算符

4.输入函数input()和运算符

1.)input()函数的使用

在这里插入图片描述
在这里插入图片描述

2.)运算符的使用

(1.)幂运算符(**)

eg:print(2**3)    #表示2的3次方

(2.)算术运算符

eg:print(-9//4)    // =-3    一正一负的整数公式,向下取整
	print(9%-4)    // = -3   公式: 余数=被除数-除数*

在这里插入图片描述
(3.)赋值运算符
在这里插入图片描述a.链式赋值
在这里插入图片描述

(4.)比较运算符

比较运算符的结果为:bool类型
    == 比较的是值,比较对象的标识是is

在这里插入图片描述

(5.)布尔运算符
在这里插入图片描述
(6.)位运算符
在这里插入图片描述
(7.)运算符的优先级
在这里插入图片描述

三、结构和函数

5.选择结构和对象布尔值

1.)if嵌套语句

if 条件表达式1:
         if  内层条件表达式:
                内存条件执行体1
         else:
                内存条件执行体2
    else:
          条件执行体

2.)if多分支结构

if 条件表达式1:
	  条件执行体1
elif 条件表达式2:
      条件执行体2
elif 条件表达式N:
      条件执行体N
[else:]
    条件执行体N+1

3.)条件表达式

x   if    判断条件   else  y 
运算规则:如果判断条件的布尔值为True,
        条件表达式的返回值为x,
        否则条件表达式的返回值为False 

4.)pass语句

只是一个占位符
	注:与哪些语句一起使用:
 		- if语句的条件执行体 	
		- for-in语句的循环体 	
 		- 定义函数时的函数体

6.range()函数和循环结构

1.)range函数
在这里插入图片描述
2.)循环结构
while循环:

   while  条件表达式:
            条件执行体(循环体)

在这里插入图片描述
for-in循环:

for  自定义的变量  in 可迭代对象:
      循环体

遍历对象必须为:可迭代对象,eg:字符串、序列、range()函数等
循环体内不需要访问自定义变量,可以将自定义变量替代为下划线
在这里插入图片描述

区别:

  • If是判断一次,条件为True执行一行
  • while是判断N+1次,条件为True执行N次

3.)else语句
在这里插入图片描述
例如:
在这里插入图片描述

注1:不可变序列与可变序列

  • 不变可变序:字符串、元组
    不变可变序列:没有增、删,改的操作
  • 可变序列:列表、字典
    可变序列:可以对序列执行增、删、改操作,对象地址不发生更改

四、列表

7.列表(类数组)-----可变序列

方法列表的创建
中括号lst=[‘大圣’,‘娟子姐’]
内置函数list()
字典生成式
方法增加操作
append()在列表的末尾添加一个元素
extend()在列表的末尾至少添加一个元素
insert()在列表的任意位置添加一个元素
切片在列表的任意位置添加至少一个元素
方法删除操作
remove()一次删除一个元素
重复元素只删除第一个;
元素不存在,抛出ValueError;
pop()删除一个指定索引位置上的元素;
指定索引不存在,抛出IndexError;
不指定索引,删除列表中的最后一个元素;
clear()清空列表
切片一次至少删除一个元素,将产生一个新的列表对象
del删除列表对象
方法排序操作
sort()排序在原列表基础上执行。默认按照从小到大的顺序进行排序,可以指定 reverse=True,进行降序 排序,eg:lst.sort(reverse=True)
内置函数sorted()产生新的列表对象,可以指定reverse=True,进行降序排序,原列表不发生改变。eg:new_lst=sorted(lst,reverse=True)
方法列表生成式
[ i*i for i in range(1,10) ]列表生成式中通常包含自定义变量,eg:i
  • 列表存储多个对象的引用
    在这里插入图片描述

(1.)创建方式:
(2.)列表的特点:
在这里插入图片描述
(3.)查询操作
在这里插入图片描述
切片操作:

    列表名[start : stop : step]

在这里插入图片描述
判断是否存在:
在这里插入图片描述
(4.)删除操作
切片操作:不产生新的对象,只删除原对象内容
在这里插入图片描述
(5.)修改操作

  • 为指定索引的元素赋予一个新值:在这里插入图片描述
  • 为指定的切片赋予一个新值

(6.)列表生成式
语法:
在这里插入图片描述
使用列表生成式,要求列表当中的元素都有一定的规则

五、字典

8.字典dict(Java中的map)-----可变序列

方法字典创建
花括号{}scores={ ‘张三’ : 100 , ‘李四’ : 90 , ‘王五’ : 110 }
内置函数dict()dict( name=‘jack’ , age=20 )
字典生成式
方法获取字典元素
[]如果字典中不存在指定的key,抛出keyError异常,eg:scores[‘张三’]
get()如果字典中不存在指定的key,并不会抛出keyError异常而是返回None,可通过参数设置默认的value,以便指定的key不存在时返回,eg:scores.get(‘张三’)
方法key的判断
in指定的key在字典中存在返回True,eg:‘张三’ in scores
not in指定的key在字典中不存在返回True,eg:‘wangwu’ not in scores
方法元素的删除
del scores[‘张三’]删除指定的键值对
clear()清空字典的元素
方法元素的新增
scores[‘jack’]=90同时也可以修改
方法获取字典视图
key()获取字典中所有的key
values()获取字典中所有的value
items()获取字典中所有的key,value对
方法字典生成式
内置函数zip()用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表

(1.)字典
以键值对的方式存储数据,字典是一个无序的序列
在这里插入图片描述
(2.)字典的原理
存数据时,采用哈希函数要求放在字典中的key必须是不可变序列(eg:字符串,整数序列都是不可变,不可以执行增删改操作;可变序列:字典和列表,可增删改)
(3.)字典的特点

  • 字典中的所有元素都是 key-value对,key允许重复(如果出现则进行覆盖), value可以重复
  • 字典中的元素是无序的,则不可指定位置进行插入
  • 字典中的key必须是不可变对象
  • 字典也可以根据需要动态地伸缩
  • 字典会浪费较大的内存,是一种使用空间换时间的数据结构

(4.)字典生成式
语法:

//zip()函数,以少的那个为基准
items=['Fruits','Books','Others']
prices=[96,78,85]
lst=zip(items,prices)
print(list(lst))

字典生成式:
在这里插入图片描述

六、元组

9.元组-----不可变序列

方法元组的创建
小括号,可省略t=( ‘python’ , ‘hello’ , 90 )
内置函数tuple()t=tuple( ( ‘python’ , ‘hello’ , 90 ) )
t=( 90, )只包含一个元组的元素需要使用逗号和小括号(不能省),如果不加逗号,则认为数据时本身的数据类型
没有元组生成式不可变序列

(1.)元组
在这里插入图片描述

注:为什么要将元组设计成不可变序列?
在多任务环境下,同时操作对象时不需要加锁,因此在程序中尽量使用不可变序列

(2.)元组的特点
元组中存储的是对象的引用:

  • a)如果元组中对象本身不可变对象,则不能再引用其它对象
  • b)如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变
    在这里插入图片描述

注:不可以修改元组当中的元素引用,但可修改元组中元素的添加内容
在这里插入图片描述

七、集合

10.集合-----可变序列

  • 集合是没有value的字典,底层结构采用哈希表,type:set
  • 集合是和字典相同的底层数据结构,集合中的元素不能重复
方法集合的创建
{}s={ ‘python’, ‘hello’, 90 }
内置函数set()set( [3,4,53,56] )
set()方法,不能直接{},否则出现type为dict,不是set空集合
集合生成式{ i*i for i in range(1,10) }
方法集合的判断
in
not in
方法集合的删除
remove()一次删除一个指定元素,如果指定的元素不存在抛出KeyError
discard()一次删除一个指定元素,如果指定的元素不存在不抛异常
pop(),没有参数不能指定参数一次只删除一个任意元素
clear()清空集合
方法集合的新增
add()一次添加一个元素
update()至少添加一个元素
方法集合之间的关系判断
== 、!=判断两集合是否相等
issubset()一个集合是否为另一个集合的子集
issuperset()一个集合是否为另一个集合的超集
isdisjoint()两集合是否没有交集
方法集合的数学操作
intersection() 等价 &交集操作
&(python中为求交集)两集合是否有交集操作
union() 等价 竖线符号并集操作
竖线符号(python中为求并集)两集合是否有交集操作
difference() 等价 -差集操作
-减号两集合是否有差集操作
symmetric_difference() 等价 ^对称差集操作
^(shift+6)两集合是否有对称差集操作

注2:列表、字典、元组、集合总结

在这里插入图片描述

八、字符串

11.字符串-----不可变序列

方法查询
index()查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError
rindex()查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError
find()查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1
rfind()查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1
方法大小写转换
upper()把字符串中的所有字符都转成大写字母
lower()把字符串中的所有字符都转成小写字母
swapcase()把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母
capitalize()把第一个字符转成大写,把其余字符转换成小写
title()把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
方法内容对齐
center()居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格 ,如果设置宽度小于实际宽度,则返回原字符串
ljust()左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格如果设置宽度小于实际宽度,则返回原字符串
rjust()右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格如果设置宽度小于实际宽度,则返回原字符串
zfill()右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身
方法字符串劈分
split()从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
以通过参数sep指定劈分字符进行劈分
通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分
rsplit()从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
以通过参数sep指定劈分字符进行劈分
通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分
方法判断字符串操作
在这里插入图片描述
方法字符串其他操作
在这里插入图片描述

(1.)字符串驻留机制

  • 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,
  • Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。
    在这里插入图片描述
    (2.)驻留机制的几种情况(交互模式下):
  • 字符串的长度为0或1时
  • 符合标识符的字符串,(不符合标识符的字符串比较时,内容相同,但两块内存空间)
  • 字符串只在编译时进行驻留,而非运行时
  • [-5,256]之间的整数数字
    注:a.) sys中的
    intern方法
    强制2个字符串指向同一个对象
    在这里插入图片描述
    b.) PyCharm对字符串进行了优化处理
    c.) 字符串拼接时建议使用 str类型的join()方法,而非+ ,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高

(3.)比较操作

  • 比较规则:
    首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
  • 比较原理:
    两上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord()可以 得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr(),调用内置函数chr时指定ordinal value可以得到其对应的字符
    在这里插入图片描述
    (4.)格式化字符串
占位符格式化三种方式
%
{ }{0},{1}表示索引位置,使用format()方法
f-string
在这里插入图片描述
宽度和精度表示:
在这里插入图片描述
占位符方式:在这里插入图片描述
(5.)字符串的编码和解码
a.)为什么需要字符串的编码转换在这里插入图片描述
b.)编码与解码的方式
  • 编码:将字符串转换为二进制数据(bytes) ,采用string中的encode()方法,不同的编码格式决定它所占用的字节数
  • 解码:将bytes类型的数据转换成字符串类型,采用byte的decode()方法。编码和解码采用的格式必须相同。
    在这里插入图片描述

九、函数

12.函数应用

1.函数的创建:
 def  函数名( [输入参数] ) :
	    函数体
	[return  xxx]
	
2.函数的调用:
	函数名( [ 实际参数 ] )

(1.)参数传递

  • 位置实参:
    根据形参对应的位置进行实参传递
    在这里插入图片描述
  • 关键字实参:
    根据形参名称进行实参传递
    在这里插入图片描述

(2.)函数调用的参数传递内存分析图
在这里插入图片描述
在这里插入图片描述

(3.)函数返回值

  • 函数返回多个值时,结果为元组
    在这里插入图片描述

(4.)函数的参数定义

以及调用函数时如何传入可变参数和关键字参数的语法:

1.可变参数既可以直接传入:func(1, 2, 3),
又可以先组装listtuple,再通过*args传入:func(*(1, 2, 3))2.关键字参数既可以直接传入:func(a=1, b=2),
又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})
  • 默认值参数:(默认值参数必须指向不变对象
    函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
  • 可变参数:(仅仅在参数前面加一个 * 号,,参数numbers接收到的是一个tuple
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
  • 个数可变的位置参数-----只能有一个
    定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
    使用*定义个数可变的位置形参
    结果为一个元组
  • 个数可变的关键字形参------只能有一个
    定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
    使用定义个数可变的关键字形参**
    结果为一个字典

注:在函数定义过程中,即有个数可变的关键字形参,也有个数可变的位置形参,要求:个数可变的位置形参,放在个数可变的关键字形参之前。在这里插入图片描述
(5.)变量的作用域

  • 局部变量
    在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会就成全局变量
  • 全局变量
    函数体外定义的变量,可作用于函数内外

(6.)递归函数

  • 递归的调用过程
    每递归调用一次函数,都会在栈内存分配一个栈帧
    每执行完一次函数,都会释放相应的空间

注:重复的过程使用列表

13.异常

(1.)异常处理机制

  • try…except结构:
    捕获异常的顺序按照先子类后父亲类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException
    在这里插入图片描述
  • try…except…else结构:
    如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
  • try…except…else…finally结构
    finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
    在这里插入图片描述
    (2.)常见的异常类型
  • Python中变量是没有数据类型的
    在这里插入图片描述
    (3.)traceback模块
  • 使用traceback模块打印异常信息
    在这里插入图片描述

十、类和对象

14.类和对象

(1.)类的创建

class 类名:
   类的内容

类的组成:类属性、实例方法(传的是实例的对象,self—默认参数)、静态方法@staticmethod、类方法(传的是cls,调用的时候不需要传入cls)
模板:
在这里插入图片描述

(2.)对象的创建

  实例名 = 类名()

在这里插入图片描述

注1:类属性、类方法、静态方法

  • 类属性:类中方法外的变量称为类属性,被该类的所有对象所共享
  • 类方法:使用@classmethod修饰的方法,使用类名直接访问的方法
  • 静态方法:使用@staticmethod修饰的方法,没有任何默认参数,使用类名直接访问的方法

(3.)

15.封装、继承、多态

(1.)封装

  • 在Python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个“_”
    在这里插入图片描述

(2.)继承

  class 子类类名( 父类1 , 父类2 .....) :
        pass
  • 如果一个类没有继承任何类,则默认继承object
  • Python支持多继承
  • 定义子类时,必须在其构造函数中调用父类的构造函数

a.)方法的重写:

  • 如果子类对继承自父类的某个属性 或方法不满意,可以在子类中对其 (方法体)进行重新编写
  • 子类重写后的方法中可以通过super().xxx() 调用父类中被重写的 方法

b.)Obobject类:

  • object类是所有类的父类,因此所有类都有object类的属性和方法。
  • 内置函数**dir()**可以查看指定对象所有属性
  • Object有一个__str__()方法,用于返 回一个对于“对象的描述-----对象的内存地址”,对应于内 置函数str()经常用于print()方法,帮 我们查看对象的信息,所以我们经常会对__str__()进行重写

c.)多重继承:

  • 一个子类可以有多个“直接父类”,这样,就具备了“多个父类”的特点
  • 通过类的特殊属性__mro__ 可以查看类的组织结构
    在这里插入图片描述

(3.)多态

注:静态语言与动态语言(Python)
a.)静态语言实现多态的三个必要条件:

  • 继承
  • 方法重写
  • 父类引用指向子类对象

b.)动态语言的多态:不需要关心对象是什么类型,只关心对象的行为

(4.)特殊的方法和属性
在这里插入图片描述在这里插入图片描述

(5.)深拷贝和浅拷贝
a.)浅拷贝:

  • Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象。copy.copy()方法
    在这里插入图片描述

b.)深拷贝

  • 使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同

16.模块和包

(1.)模块-----modules

  • 在Python中一个扩展名为.py的文件就是一个模块

a.)自定义模块的导入:

1import  模块名称  [as 别名]           #导入模块中的所有2from  模块名称 import 函数/变量/#导入模块中的指定内容

b.)第三方模块:

安装:  pip  install 模块名
使用:  import  模块名

c.)常用的内置模块:
在这里插入图片描述

d.)以主程序形式运行:

  if  __name__  =  '__main__'  :
	  pass
  • 在每个模块的定义中都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其它程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__变量的值为__main__
    在这里插入图片描述

(2.)包package
a.)包与目录(directory)的区别

  • 包含__init__.py文件的目录称为包
  • 目录里通常不包含__init__.py文件

b.)包的导入

  import 包名.模块名

在这里插入图片描述

17.文件读写

(1.)常见的字符编码格式

  • Python的解释器使用的是Unicode(内存)
  • .py文件在磁盘上使用UTF-8存储(外存)
    在这里插入图片描述

2.)文件的读写原理—IO操作
在这里插入图片描述

3.)文件的读写操作

  • 语法规则:
    在这里插入图片描述
  • 内置函数open()方法创建文件对象
    在这里插入图片描述

4.)常用的文件打开模式
按文件中数据的组织形式,文件分为以下两大类:

  • 文本文件 :存储的是普通“字符”文本,默认为unicode字符集,可以使用记本事程序打开
  • 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开 ,举例:mp3音频文件,jpg图片 .doc文档等
    在这里插入图片描述

5.)文件对象常用方法
在这里插入图片描述

6.)with语句(上下文管理器)

  • with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
    在这里插入图片描述

7.)目录操作

  • os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
  • os模块与os.path模块用于对目录或文件进行操作
  • OS模块操作目录相关函数:
    在这里插入图片描述
  • OS.path模块操作目录相关函数:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值