我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python学习笔记(持续更新)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python学习笔记(持续更新)

目录

一、基础语法

1.Print()函数 

2.变量的定义和使用

3.整数类型 

4.浮点类型

5.布尔类型

6.字符串类型

7.数据类型转换

8.注释

9.input()函数

10.算术运算符

11.赋值运算符

12.比较运算符

13.布尔运算符

14.逻辑运算符

15.运算符的优先级

16.对象的布尔值

二、结构

1.分支结构

2.range函数创建列表

3.for-in循环

4.找水仙花数

5.else语句

6.嵌套循环

7.打印九九乘法表

三、列表

1.创建列表的两种方式 

2.列表的特点

3.列表的查询操作 

4.列表的切片操作

5.列表元素的判断以及遍历

6.列表的添加操作

7.列表的删除操作

8.列表的修改操作

9.列表的排序操作

10.列表生成式

四、字典

1.字典的创建

2.字典的增 删 改操作

3.获取字典视图

4.字典元素的遍历

5.字典的特点

6.字典生成式

五、元组

1.元组的创建方式

2.遍历元组

六、集合

1.集合的创建

2.集合的相关操作 

3.集合间的关系

4.集合的数据操作

5.集合生成式

列表、字典、元组、集合总结

七、字符串的驻留机制

字符串的常用操作

字符串的查询操作:

字符串的大小写转换操作:

字符串内容对齐操作: 

字符串劈分操作: 

 字符串判断的相关方法:

字符串操作的其他方法: 

 字符串的切片操作:

 格式化字符串:

字符串的编码转换:

函数的创建和调用

可变的位置参数和关键字参数

函数总结: 

递归函数

bug修复例子 

异常处理机制:

Python常见的异常类型

traceback模块:使用该模块打印异常信息

定义Python中的类

创建对象

动态绑定属性和方法

封装的实现

继承

object类

多态

特殊属性

特殊方法

new与init创建对象过程

类的浅拷贝与深拷贝

模块的导入

常用内容模块

第三方功能包

编码格式

文件读写操作

with语句

os模块的常用函数


一、基础语法

1.Print()函数 

将数据输出到文件中

fp=open('D:/text.txt','a+')print('helloworld',file=fp)fp.close()

 (1)所指定的盘符存在

 (2)使用file = fp

不进行换行输出(输出内容在一行当中)

print('hello','world','Python')

转义字符

print('hello\nworld')print('hello\tworld')#制表符print('helloooo\tworld')print('hello\rworld')#\r后面覆盖前面print('hello\bworld')#\b退格print('http:\\www.baidu.com')print('老师说\'大家好\'')#原字符,不希望字符串中的转义字符起作用,就使用原字符,就是在字符串之前加上r或Rprint(r'hello\nworld')#最后一个字符不能是反斜杠

 4.输出二进制字符

print(chr(0b100111001011000))#输出乘

输出十进制的字符

print(ord('乘'))#输出十进制的乘

显示python中的所有文件 

print(dir(__builtins__))

 

2.变量的定义和使用

变量的标识

name='月亮'print(id(name))#输出结果为2369314240720

变量的类型

name='月亮'print(type(name))#输出结果为

变量的名称

name='月亮'print(name)#输出结果为月亮

多次赋值之后,变量名会指向新的空间

name='大月亮'print(name)#输出结果为大月亮name='小月亮'print(name)#输出结果为小月亮

删除变量 

x=1del x

 

3.整数类型 

整数可以表示为二进制,十进制,八进制,十六进制 

print('十进制',118)#十进制输出结果为118print('二进制',0b10101111)#二进制以0b开头,输出结果为175print('八进制',0o176)#八进制以0o开头,输出结果为126print('十六进制',0x1EAF)#十六进制以0x开头,输出结果为7855

4.浮点类型

 浮点数存储存在不精确性,使用浮点数进行计算时可能会出现小数位数不确定的情况

n1=1.1n2=2.2print(n1+n2)#输出结果为3.3000000000000003#正确输出结果应为3.3

为解决这种情况导入模块decimal

from decimal import Decimalprint(Decimal('1.1')+Decimal('2.2'))#输出结果为3.3

5.布尔类型

 布尔类型可用于计算

f1=Truef2=Falseprint(f1,type(f1))print(f2,type(f2))#布尔类型可以直接用于计算print(1+f1)#True表示1print(1+f2)#False表示0

6.字符串类型

关于定义时引号对于字符串的影响,三引号可用于多行定义

7.数据类型转换

类型不同的字符串合并方法 

name='张三'age=20print(type(name),type(age))#说明name和age类型不同print('我叫'+name+',今年'+str(age)+'岁')#当将str类型与int类型进行连接时,报错,解决方案

 float、bool、int都可直接转化为string类型。

int()将其他类型转化为int类型

s1='128'f1=98.7s2='76.77'ff=Trues3='hello'print(type(s1),type(f1),type(s2),type(ff),type(s3))print(int(s1),type(int(s1)))#将str转成int类型,字符串为数字串print(int(f1),type(int(f1)))#将float转成int类型,截取整数部分,舍掉小数部分#print(int(s2),type(int(s2)))#将str转成int类型,报错,因为字符串为小数串print(int(ff),type(int(ff)))#输出结果为1#print(int(s3),type(int(ff)))#将str转成int类型时,字符串必须为数字串(整数),非数字串不允许转换

float()将其他类型转成float类型

s1='128.98's2='76'ff=Trues3='hello'i=98print(type(s1),type(s2),type(ff),type(s3),type(i))print(float(s1),type(float(s1)))print(float(s2),type(float(s2)))#print(float(ff),type(float(ff)))#字符串中的数据如果是非数字串,则不允许转换print(float(i),type(float(i)))

8.注释

中文编码声明注释在文件开头加上注释,用以指定源码文件的编码格式。

#coding:gbk#coding:utf-8

 单行注释和多行注释

#单行注释print('hello')#多行注释'''我是多行注释'''

9.input()函数

input()函数的基本使用 

 如果引号里放中文字符报错就可以在模板第一行添加utf-8编码

# -*-coding:utf-8-*-present=input('大圣想要什么礼物呢?')#输入定海神针print(present,type(present))#输出结果为定海神针 

类型转换

a=int(input('请输入一个加数:'))b=int(input('请输入另一个加数:'))print(a+b)

10.算术运算符

print(11/2)#除法运算,结果为5.5print(11//2)#整除运算,结果为5print(11%2)#取余运算,结果为1print(2**2)#幂运算,表示2的2次方,结果为4

11.赋值运算符

链式赋值id相同

#链式赋值a=b=c=20print(a,id(a))print(b,id(b))print(c,id(c))'''输出结果20 14073439792563220 14073439792563220 140734397925632'''

解包赋值

#解包赋值a,b,c=20,30,40print(a,b,c)#左右数量不同会报错#交换两个变量print('交换之前:',a,b)a,b=b,aprint('交换之后:',a,b)'''输出结果交换之前: 20 30交换之后: 30 20'''

12.比较运算符

 比较value(值)是否相等用==,比较标识是否相等用is和is not

a=10b=10print(a==b)#Trueprint(a is b)#Trueprint(a is not b)#False
lst1=[11,22,33,44]lst2=[11,22,33,44]print(lst1==lst2)#Trueprint(lst1 is lst2)#Falseprint(lst1 is not lst2)#True

13.布尔运算符

a,b=1,2print(a==1 and b==2)#Trueprint(a==1 or b==2)#Truef=Trueprint(not f)#Falses='helloworld'print('w' in s)#判断w在不在helloworld中,输出Trueprint('k' in s)#Falseprint('w' not in s)#Falseprint('k' not in s)#True

14.逻辑运算符

print(4&8)#按位与&,同为1时结果为1,结果为0print(4|8)#按位或|,同为0才为0,结果为12print(4<<1)#左移1位,高位溢出截断,低位补0相当于乘于2,结果为8print(4<<2)#左移2位,结果为16print(4>>1)#向右移动1位,相当于除2,结果为2

15.运算符的优先级

算术运算>位运算>比较运算>布尔运算>赋值运算

16.对象的布尔值

print(bool(False))#Falseprint(bool(0))#Falseprint(bool(0.0))#Falseprint(print(''))#Falseprint(bool(""))#Falseprint(bool([]))#False空列表print(bool(list()))#False空列表print(bool(()))#False空元组print(bool(tuple()))#False空元组print(bool({}))#空字典print(bool(dict()))#空字典print(bool(set()))#空集合

以上对象布尔值为False其他均为True

二、结构

1.分支结构

money=1000s=int(input('请输入取款金额:'))#取款金额if money>=s:    money=money-s    print('取款成功,余额为:',money)

多分支结构

score=int(input('请输入一个成绩:'))if score>=90 and score<=100:    print('A级')elif score>=80 and score<=89:    print('B级')elif score>=70 and score<=79:    print('C级')elif score>=60 and score<=69:    print('D级')elif score>=0 and score<=59:    print('E级')else:    print("对不起,您的输入有误")

 python独特的写法

score=int(input('请输入一个成绩:'))if 90<=score<=100:    print('A级')elif 80<=score<=89:    print('B级')elif 70<=score<=79:    print('C级')elif 60<=score<=69:    print('D级')elif 0<=score<=59:    print('E级')else:    print("对不起,您的输入有误")

 if-else的简写

num_a=int(input())num_b=int(input())print(str(num_a)+'大于等于'+str(num_b) if num_a>=num_b else str

 pass可用于占坑

2.range函数创建列表

#range的三种创建方式r=range(10)#默认从0开始,默认相差1print(r)#range(0,10)print(list(r))#可用该方法查看range对象中的整数序列r=range(1,10)#指定了起始值,从1开始不包含10print(list(r))r=range(1,10,2)#指定了起始值结束值和单位差print(list(r))

 不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,才会去计算序列中的相关元素。

in和not in 判断整数序列中是否存在指定的整数。

a=0sum=0while a<=100:    if not bool(a%2):        sum+=a    a+=1print('1-100的偶数和',sum)

3.for-in循环

for item in 'Python':    print(item)for i in range(10):    print(i)for _ in range(5):    print('人生苦短')

4.找水仙花数

for item in range(100,1000):    ge=item%10    shi=item//10%10    bai=item//100    #print(bai,shi,ge)    #判断    if ge**3+shi**3+bai**3==item:        print(item)

5.else语句

 else可与if搭配,也能与for、while语句搭配,与for语句和while语句搭配时,若程序没有执行break语句,则执行else语句

# -*-coding:utf-8-*-for item in range(3):    pewd=input('请输入密码:')    if pewd=='8888':        print('密码正确')        break    else:        print('密码不正确')else:    print('对不起,三次密码均输入错误')
# -*-coding:utf-8-*-a=0while a<3:    pewd=input('请输入密码:')    if pewd=='8888':        print('密码正确')        break    else:        print('密码不正确')    a+=1else:    print('对不起,三次密码均输入错误')

6.嵌套循环

不换行输出小技巧 

# -*-coding:utf-8-*-for i in range(1,4):    for j in range(1,5):        print('*',end='\t') #不换行输出    print()#换行

7.打印九九乘法表

# -*-coding:utf-8-*-for i in range(1,10):    for j in range(1,i+1):        print(i,'*',j,'=',i*j,end='\t') #不换行输出    print()#换行

三、列表

1.创建列表的两种方式 

# -*-coding:utf-8-*-#创建列表的第一种方式,使用[]lst=['hello','world',98]#创建列表的第二种方式,使用内置函数list()lst2=list(['hello','worl

2.列表的特点

列表元素按顺序有序排序

索引映射唯一一个数据(正序索引从0开始递增,逆序索引从-1开始递减)

列表可用存储重复数据

任意数据类型混存

根据需要动态分配和回收内存

3.列表的查询操作 

根据元素查索引

# -*-coding:utf-8-*-lst=['hello','world',98,'hello']print(lst.index('hello'))#查找元素索引print(lst.index('hello',0,3))#设置start和stop

 根据索引查元素

# -*-coding:utf-8-*-lst=['hello','world',98,'hello']print(lst[2])#98print(lst[-3])#'world'

4.列表的切片操作

# -*-coding:utf-8-*-lst=[10,20,30,40,50,60,70,80]print('切的片段:',lst[1:6:1])#start=1,stop=6,step=1print(lst[1:6:])print(lst[1:6:2])#step也可为负数print(lst[-1:-6:-1])

5.列表元素的判断以及遍历

# -*-coding:utf-8-*-lst=[10,20,'python','hello']print(10 in lst)#Trueprint(100 not in lst)#Truefor item in lst:    print(item)

6.列表的添加操作

# -*-coding:utf-8-*-#列表元素的增加操作lst=[10,20,30]print('添加元素之前',lst,id(lst))lst.append(100)#在列表末尾添加一个元素print('添加元素之后',lst,id(lst))lst2=['hello','world']lst.append(lst2)#将list2作为一个元素添加到lst的末尾print(lst)lst.extend(lst2)#在lst尾部一次性添加多个元素print(lst)#在任意位置上添加一个元素lst.insert(1,90)print(lst)lst3=[True,False,'hello']#在任意个位置上添加N个元素,切片操作lst[1:]=lst3print(lst)

输出结果: 

添加元素之前 [10, 20, 30] 1603301146880
添加元素之后 [10, 20, 30, 100] 1603301146880
[10, 20, 30, 100, ['hello', 'world']]
[10, 20, 30, 100, ['hello', 'world'], 'hello', 'world']
[10, 90, 20, 30, 100, ['hello', 'world'], 'hello', 'world']
[10, True, False, 'hello']

7.列表的删除操作

# -*-coding:utf-8-*-#列表元素的删除操作lst=[10,20,30,40,50,60,30]lst.remove(30)#从列表中移除一个元素,如果有重复元素,只移除第一个元素print(lst)#pop()根据索引移除元素lst.pop(1)#如果不指定参数,那么将删除列表中的最后一个元素print(lst)#切片操作,删除至少一个元素,将产生一个新的列表对象new_lst=lst[1:3]print('原列表',lst)print('切片后的列表',new_lst)#不产生新的列表对象,而是删除原列表中的内容lst[1:3]=[]print(lst)#清楚列表中的所有元素lst.clear()print(lst)#del将列表对象删除del lst

输出结果

[10, 20, 40, 50, 60, 30]
[10, 40, 50, 60, 30]
原列表 [10, 40, 50, 60, 30]
切片后的列表 [40, 50]
[10, 60, 30]
[]

8.列表的修改操作

# -*-coding:utf-8-*-#列表元素的修改操作lst=[10,20,30,40,50,60,30]lst[2]=100lst[1:3]=[300,400,500,600]

9.列表的排序操作

# -*-coding:utf-8-*-#列表元素的排序操作lst=[70,20,30,40,50,60,30]print('排序前的列表',lst,id(lst))lst.sort()#默认为升序print('排序后的列表',lst,id(lst))#指定关键词参数,将列表中元素进行降序排序lst.sort(reverse=True)print(lst)#使用内置函数sorted()对列表进行排序,将产生一个新的列表对象lst=[20,40,10,98,54]new_list=sorted(lst)#指定关键字参数,实现列表降序排序desc_list=sorted(lst,reverse=True)

10.列表生成式

# -*-coding:utf-8-*-lst=[i*i for i in range(1,10)]#i*i表示列表存储的内容print(lst)#[1, 4, 9, 16, 25, 36, 49, 64, 81]

四、字典

1.字典的创建

# -*-coding:utf-8-*-#使用{}创建字典scores={'张三':100,'李四':98,'王五':45}print(scores)print(type(scores))#使用dict()创建字典student=dict(name='jack',age=20)print(student)#空字典d={}

输出结果

{'张三': 100, '李四': 98, '王五': 45}

{'name': 'jack', 'age': 20}

2.字典的增 删 改操作

scores={'张三':100,'李四':98,'王五':45}print('张三' in scores)#Trueprint('张三' not in scores)#Falsedel scores['张三'] #删除指定的键值对scores.clear()#清空字典的元素scores['陈六']=98#新增元素scores['陈六']=100#修改value

3.获取字典视图

scores={'张三':100,'李四':98,'王五':45}#获取所有的keykeys=scores.keys()print(keys)print(type(keys))#dict类型print(list(keys))#获取所有的valuevalues=scores.values()print(values)print(type(values))#dict类型print(list(values))#获取所有键值对items=scores.items()print(items)#元组列表

4.字典元素的遍历

方括号形式若键不存在会抛出异常,而get方法不会

scores={'张三':100,'李四':98,'王五':45}#字典元素的遍历for item in scores:   print(item, scores[item],scores.get(item))#方括号形式若键不存在会抛出异常,而get方法不会

5.字典的特点

d={'name':'张三','name':'李四'} #key 不允许重复print(d)#name:李四d={'name':'张三','nikename':'张三'}print(d)##字典的元素是无序的

6.字典生成式

items=['Fruits','Books','Others']prices=[96,78,85]d={item.upper():price for item ,price in zip(items, prices) }#加了.upper()key全变大写.lower变小写print(d)#zip以短的元素来生成

不可变序列:字符串/元组(没有增删改操作)

可变序列:列表/字典(可以对序列执行增删改操作,对象地址不发生更改)

五、元组

1.元组的创建方式

#直接小括号t=('Python','hello',90)#使用内置函数tuple()t=tuple(('Python','hello',90))#只包含一个元组的元素需要使用逗号和小括号t=(10,)

为什么要将元组设计成不可变序列:

   在多任务环境下,同时操作对象时不需要加锁

   元组中储存对象的引用:

        如果元组中对象本身是不可变对象,则不能再引用其他对象

        如果元组中的对象时可变对象,则可变对象的引用不允许改变,但数据可以改变 

t=(10,[20,30],40)#t[1]=100元组不允许修改元素t[1].append(100)

2.遍历元组

t=tuple(('Python','hello',90))for item in t:   print(item)

六、集合

1.集合的创建

# -*-coding:utf-8-*-#使用{}创建集合s={2, 3, 4, 5, 5, 6, 7, 7}#集合中元素不允许重复print(s)#第二种创建方式使用set()s1 = set(range(5))print(s1, type(s1))s2 = set([1,2,3,4,5,5,5,6,6])#列表转集合print(s2, type(s2))s3 = set((1,2,4,4,5,65))#元组转集合print(s3, type(s3))s4 = set('python')#字符串转集合print(s4,type(s4))s5 = set({124, 3, 4, 55, 6, 6})#集合转集合print(s5, type(s5))s6 = {}print(s6, type(s6))s7 = set()#生成空字典print(s7, type(s7))s8 = {''}print(s8, type(s8))

输出结果 

{2, 3, 4, 5, 6, 7}
{0, 1, 2, 3, 4}
{1, 2, 3, 4, 5, 6}
{65, 1, 2, 4, 5}
{'o', 't', 'p', 'y', 'h', 'n'}
{3, 4, 6, 55, 124}
{}
set()
{''}

2.集合的相关操作 

# -*-coding:utf-8-*-#集合元素的判断操作s = {10, 20, 30}print(10 in s)#True#集合元素的新增操作#一次添加一个s.add(80)print(s)#一次至少添加一个s.update({200, 400, 300})print(s)s.update([100, 99, 8])s.update((78, 64, 56))#集合元素的删除操作s.remove(100)print(s)#s.remove(500)#KeyError: 500#discard()删除指定元素,不抛出异常s.discard(500)print(s)#pop()任意删除一个s.pop()print(s)s.clear()

输出结果

True
{80, 10, 20, 30}
{80, 400, 20, 200, 10, 300, 30}
{64, 200, 8, 10, 78, 80, 400, 20, 30, 99, 300, 56}
{64, 200, 8, 10, 78, 80, 400, 20, 30, 99, 300, 56}
{200, 8, 10, 78, 80, 400, 20, 30, 99, 300, 56}

3.集合间的关系

# -*-coding:utf-8-*-#一个集合是否是另一个集合的子集s1 = {10, 20, 30, 40, 50, 60}s2 = {10, 20, 30, 40}s3 = {10, 20, 90}print(s2.issubset(s1))#Trueprint(s3.issubset(s1))#False#一个集合是否是另一个集合的超集print(s1.issuperset(s2))#Trueprint(s1.issuperset(s3))#False#两个集合是否含有交集print(s2.isdisjoint(s3))#False 有交集为Falses4 = {400, 200, 300}#True

4.集合的数据操作

#交集操作s1 = {10,20,30,40}s2 = {20,30,40,50,60}print(s1.intersection(s2))print(s1 & s2)#intersection 与 &等价#并集操作print(s1.union(s2))print(s1|s2)#union与|等价#差集操作print(s1.difference(s2))print(s1-s2)#对称差集print(s1.symmetric_difference(s2))print(s1^s2)

输出结果

 {40, 20, 30}
{40, 20, 30}
{40, 10, 50, 20, 60, 30}
{40, 10, 50, 20, 60, 30}
{10}
{10}
{50, 10, 60}
{50, 10, 60}

5.集合生成式

#列表生成式lst=[i*i for i in range(6)]print(lst)#集合生成式s={ i*i for i in range(10) }print(s)

输出结果

[0, 1, 4, 9, 16, 25]
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

列表、字典、元组、集合总结

数据结构    是否可变 是否重复是否有序定义符号
列表(list)可变可重复有序[]
元组(tuple)不可变可重复有序()
字典(dict) 可变

key不可重复

value可重复

无序{key:value}
集合(set)可变不可重复无序{}

七、字符串的驻留机制

仅保存一份相同且不可变的字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。

驻留机制的几种情况(交互模式) :

字符串的长度为0或1时

符合标识符的字符串

字符串只在编译时进行驻留,而非运行时

[-5,256]之间的整数数字

sys中的intern方法强制两个字符串指向同一个对象 

PyCharm对字符串进行了优化处理,所以没驻留的id也显示相同

>>> s1=''>>> s2=''>>> s1 is s2True>>> s1='abc%'>>> s2='abc%'>>> s1 == s2True>>> s1 is s2False>>> s1='abcx'>>> s2='abcx'>>> s1 is s2True>>> a='abc'>>> b='ab'+'c'>>> c=''.join(['ab','c'])>>> a is bTrue>>> a is cFalse>>> type(c)>>> type(a)>>> a=-5>>> b=-5>>> a is bTrue>>> a=-6>>> b=-6>>> a is bFalse>>> import sys>>> a='abc%'>>> b='abc%'>>> a is bFalse>>> a=sys.intern(b)>>> a is bTrue>>>

字符串驻留机制的优缺点: 

当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。

在需要进行字符串拼接是建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比“+”高。

a = 'Python'b = "Python"c = '''Python'''print(a,id(a))print(b,id(b))print(c,id(c))

 输出结果

Python 2495641118512
Python 2495641118512
Python 2495641118512

字符串的常用操作

字符串的查询操作:

#字符串的查询操作s='hello,hello'#index()查询字串第一次出现的位置,若不存在则抛出ValueErrorprint(s.index('lo'))#3#index()查询字串最后一次出现的位置,若不存在则抛出ValueErrorprint(s.find('lo'))#3#index()查询字串第一次出现的位置,若不存在则返回-1print(s.rindex('lo'))#9#index()查询字串最后一次出现的位置,若不存在则返回-1print(s.rfind('lo'))#9

字符串的大小写转换操作:

#字符串的大小写转换操作s='hello,python'#把字符串中所有字符都转成大写字母a=s.upper()#转成大写之后,会产生一个新的字符串对象print(a,id(a))print(s,id(s))#把字符串中所有字符都转成小写字母b=s.lower()#转换之后,产生新的字符串对象print(b,id(b))print(s,id(s))#把字符串中所有大写字符都转成小写字母,小写转成大写s2='hello,Python'print(s2.swapcase())#把字符串中第一个字符转成大写字母,其余转成小写print(s2.capitalize())#把字符串中每个单词的第一个字符都转成大写字母,剩余字符转为小写print(s2.title())

输出结果:

HELLO,PYTHON 1416246594288
hello,python 1416246594544
hello,python 1416246591600
hello,python 1416246594544
HELLO,pYTHON
Hello,python
Hello,Python

字符串内容对齐操作: 

s='hello,Python'print(s.center(20,'*'))#居中对齐,若第二个参数不指定填充符,默认为空格,指定小于原字符串则返回原字符串print(s.ljust(20,'*'))#左对齐print(s.rjust(20,'*'))#右对齐print(s.zfill(20))#右对齐,左侧用0对齐print('-8910'.zfill(8))

输出结果:

****hello,Python****
hello,Python********
********hello,Python
00000000hello,Python
-0008910

字符串劈分操作: 

#split()s='hello world Python'lst=s.split()#默认分割符为空格print(lst)s1='hello|world|Python'print(s1.split(sep='|'))print(s1.split(sep='|',maxsplit=1))#设置最大劈分次数,剩余的会单独作为一部分#rsplit()print(s.rsplit())print(s1.rsplit(sep='|'))print(s1.rsplit(sep='|',maxsplit=1))

输出结果:

['hello', 'world', 'Python']
['hello', 'world', 'Python']
['hello', 'world|Python']
['hello', 'world', 'Python']
['hello', 'world', 'Python']
['hello|world', 'Python']

 字符串判断的相关方法:

s='hello,python'print(s.isidentifier())#判断是否是合法的标识符字符串print('\t'.isspace())#判断是否是全部由空白字符组成(回车、换行、水平制表符)print('abc张三'.isalpha())#判断是否全部由字符组成print('123'.isdecimal())#判断是否全部是十进制数字print('123四Ⅳ'.isnumeric())#判断是否全由数字组成print('abc1'.isalnum())#是否全部由字母和数字组成

输出结果:

False
True
True
True
True
True

字符串操作的其他方法: 

#repalce()s='hello,Python'print(s.replace('Python','Java'))s1='hello,Python,Python,Python'print(s1.replace('Python','Java',2))#join()将列表或元组中的字符串合并成一个字符串lst=['hello','Java','Python']print('|'.join(lst))t=('hello','Java','Python')print(''.join(t))print('*'.join('Python'))

输出结果:

hello,Java
hello,Java,Java,Python
hello|Java|Python
helloJavaPython
P*y*t*h*o*n

print(ord('a'))可获得a字符的原始值97 

print(chr(97))根据原始值获得字符a

 字符串的切片操作:

s='hello,Python's1=s[:5]s2=s[6:]s3='!'newstr=s1+s3+s2print(s1,s2,s3,newstr)

输出结果: 

hello        Python        !           hello!Python

 格式化字符串:

#第一种占位符name='张三'age=20print('我叫%s,今年%d岁' % (name,age))#第二种占位符print('我叫{0},今年{1}岁'.format(name,age))#只有一个可用花括号内不写索引#第三种占位符print(f'我叫{name},今年{age}岁')#精度print('{0:.3}'.format(3.1415926))#输出3.14表示一共输出3位数print('{0:.3f}'.format(3.1415926))#输出3.142输出三位小数

字符串的编码转换:

s='海上生明月'#编码print(s.encode(encoding='GBK')) #在GBK这种编码格式中,一个中文占两个字节print(s.encode(encoding='UTF-8'))#一个中文占三个字节#解码byte=s.encode(encoding='GBK')print(byte.decode(encoding='GBK'))#编码格式和解码格式要相同

输出结果:

b'\xba\xa3\xc9\xcf\xc9\xfa\xc3\xf7\xd4\xc2'
b'\xe6\xb5\xb7\xe4\xb8\x8a\xe7\x94\x9f\xe6\x98\x8e\xe6\x9c\x88'
海上生明月

函数的创建和调用

def calc(a,b):#形参    c=a+b    return cresult=calc(10,20)#实参print(result)res=calc(b=10,a=20)#关键词参数print(result)

函数返回值如果是多个,则返回元组

可变的位置参数和关键字参数

参数只能定义一个,但是在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求个数可变的位置形参,放在个数可变的关键字形参之前

#个数可变的位置参数def fun(*args):    print(args)#返回元组fun(10)fun(10,20)fun(20,34,55)#个数可变的关键字形参def fun1(**args):    print(args)#返回字典fun1(a=10)fun1(a=20,b=90,c=89)

输出结果:

(10,)
(10, 20)
(20, 34, 55)
{'a': 10}
{'a': 20, 'b': 90, 'c': 89} 

函数总结: 

def fun(a,b,c):    print(a)    print(b)    print(c)lst=[11,22,33]fun(*lst)#在函数调用时,将列表中的每个元素都转换为位置实参传入dic={'a':111,'b':222,'c':333}fun(**dic)#在函数调用时,将字典中的键值对都转换为关键字实参传入def fun1(a,b,*,c,d):#c和d的实参只能用关键字实参传递    print(a)    print(b)    print(c)    print(d)fun1(10,20,c=30,d=40)def fun4(**a):    print(a)fun4(**dic)#顺序问题def fun5(a,b,*,c,d,**args):    passdef fun6(*args,**args2):    passdef fun7(a,b=10,*args,**arg2s):    pass

输出结果:

 11
22
33
111
222
333
10
20
30
40
{'a': 111, 'b': 222, 'c': 333}

函数内部定义的变量前面加global可以让该变量变为全局变量

递归函数

每递归调用一次都会在栈内存分配一个栈帧 。

斐波那契数列实例:

def fib(n):    if n==1:        return 1    elif n==2:        return 1    else:        return fib(n-1)+fib(n-2)for i in range(1,7):    print(fib(i))

bug修复例子 

lst=[{'title':'肖申克的救赎','actor':['蒂姆罗宾斯','摩根里夫曼']},     {'title':'霸王别姬','actor':['张国荣','张丰毅','功利','葛优']},     {'title':'阿甘正传','actor':['汤姆汉克斯','罗宾怀特']}     ]name=input('请输入你要查询的演员:')for item in lst:    namelst=item['actor']    for actor in namelst:        if name in actor:            print(f'{name}出演了%s' % item['title'])

异常处理机制:

try:    n1=int(input('请输入一个整数:'))    n2=int(input('请输入另一个整数'))    result=n1/n2    print('结果为',result)except ZeroDivisionError:    print('对不起,除数不允许为0')except ValueError:    print('只能输入数字串')except BaseException:    print('出错')print('程序结束')

try...except...else结构,如果try没有抛出异常,则执行else块,如果try中抛出异常,则执行except块。

try:    a = int(input('请输入第一个整数'))    b = int(input('请输入第二个整数'))    result = a / bexcept BaseException as e:    print('出错了',e)else:    print('结算结果为',result)

 try...except...else...finally,finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源

try:    a = int(input('请输入第一个整数'))    b = int(input('请输入第二个整数'))    result = a / bexcept BaseException as e:    print('出错了',e)else:    print('结算结果为',result)finally:    print('谢谢您的使用')

Python常见的异常类型

序号异常类型描述
1ZeroDivisionError

除(或取模)零(所有数据类型)

2IndexError序列中没有此索引(index)
3KeyError映射中没有这个键
4NameError未声明/初始化对象(没有属性)
5SyntaxErrorPython 语法错误
6ValueError传入无效的参数

traceback模块:使用该模块打印异常信息

import tracebacktry:    print('----------')    print(1/0)except:    traceback.print_exc()

定义Python中的类

class Student:    native_place='深圳'#直接写在类里的变量,称为类属性    def __int__(self,name,age):        self.name=name  #实体属性        self.age=age    def eat(self):        print('学生在吃饭...')#类里定义的叫方法,类外叫函数    @staticmethod    def method():        print('静态方法')    @classmethod    def cm(cls):        print('我是类方法')#Python中的一切皆是对象,内存有开空间。

创建对象

class Student:    native_place='深圳'#直接写在类里的变量,称为类属性    def __init__(self,name,age):        self.name=name  #实体属性        self.age=age    def eat(self):        print('学生在吃饭...')#类里定义的叫方法,类外叫函数    @staticmethod    def method():        print('静态方法')    @classmethod    def cm(cls):        print('我是类方法')#Python中的一切皆是对象,内存有开空间。stu1=Student('张三',20)print(id(stu1))#输出地址print(type(stu1))#类型print(stu1)#地址print('===============')print(id(Student))print(type(Student))print(Student)Student.eat(stu1)#两种调用方法

输出结果:

1792242521376

<__main__.Student object at 0x000001A149FA9520>
===============
1792235695104

类属性:类中方法外的变量称为类属性,被该类的所有对象所共享

类方法:使用@classmethod修饰的方法,使用类名直接访问的方法

静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法

动态绑定属性和方法

class Student:    native_place='深圳'#直接写在类里的变量,称为类属性    def __init__(self,name,age):        self.name=name  #实体属性        self.age=age    def eat(self):        print(self.name+'学生在吃饭...')#类里定义的叫方法,类外叫函数stu1=Student('张三',20)stu2=Student('李四',30)stu2.gender='女'#动态绑定属性def show():    print('定义在类之外的')stu1.show=show()#动态绑定方法

封装的实现

在Python中,没有专门的修饰符属于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个"__"

class Student:    def __init__(self,name,age):        self.name=name        self.__age=age#年龄不希望在类的外部被使用    def show(self):        print(self.name,self.__age)stu = Student('张三',20)stu.show()#在类的外使用使用name和age#print(stu.__age)print(dir(stu))print(stu._Student__age)#可以访问但不建议

继承

class Person(object):    def __init__(self,name,age):        self.name=name        self.age=age    def info(self):        print(self.name,self.age)class Student(Person):    def __init__(self,name,age,stu_num):        super().__init__(name,age)        self.stu_num=stu_numclass Teacher(Person):    def __init__(self,name,age,yearofteaching):        super().__init__(name,age)        self.yearofteaching=yearofteachingstu=Student('张三',20,1)tea=Teacher('李四',30,3)stu.info()tea.info()

并且python中可以有多继承

重写正常写方法就可以 

object类

内置函数dir()可以查看指定对象的所有属性。

Object有一个__str__()方法,用于返回一个’对于对象的描述‘对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们常会对__str__()进行重写

class Student:    def __init__(self,name,age):        self.name=name        self.age=age    def __str__(self):        return '我的名字是{0},今年{1}岁'.format(self.name,self.age)stu=Student('张三',20)print(dir(stu))print(stu)print(type(stu))

多态

鸭子类型,动态语言Python只关心是否具有这个方法不管你是否有父子类关系

class Animal(object):    def eat(self):        print('动物会吃')class Dog(Animal):    def eat(self):        print('狗吃骨头')class Cat(Animal):    def eat(self):        print('猫吃鱼')class Person:    def eat(self):        print('人吃五谷杂粮')def fun(obj):    obj.eat()fun(Cat())fun(Dog())fun(Animal())print('--------')fun(Person())

特殊属性

#__dict__获得类对象或实例对象所绑定的所有属性和方法的字典class A:    passclass B:    passclass C(A,B):    def __init__(self,name,age):        self.name=name        self.age=agex=C('Jack',20)print(x.__dict__)#输出实例对象的属性字典print(C.__dict__)#输出类的对象字典print(x.__class__)#输出了对象所属的类print(C.__bases__)#输出C类父类类型的元组print(C.__base__)#离他最近的父类print(C.__mro__)#类的层次结构print(A.__subclasses__())#输出A的子类列表

特殊方法

#add和len方法class Student:    def __init__(self,name):        self.name=name    def __add__(self, other):        return self.name+other.name    def __len__(self):        return len(self.name)stu1=Student('张三')stu2=Student('李四')s=stu1+stu2print(s)print(stu1.__len__())print(len(stu1))

new与init创建对象过程

#new方法class Person(object): def __new__(cls, *args, **kwargs):        print('new被调用执行了,cls的id值为{0}'.format(id(cls)))        obj=super().__new__(cls)        print('创建的对象id为{0}'.format(id(obj)))        return obj    def __init__(self,name,age):        self.name=name        self.age=age   print('object这个类的对象id为{0}'.format(id(object)))print('Person这个类对象的id为{0}'.format(id(Person)))p1=Person('张三',20)print('p1这个Person类的实例对象id为{0}'.format(id(p1)))

输出结果:

object这个类的对象id为140717676194640
Person这个类对象的id为2649027430288
new被调用执行了,cls的id值为2649027430288
创建的对象id为2649027214400
p1这个Person类的实例对象id为2649027214400

类的浅拷贝与深拷贝

class CPU:    passclass Disk:    passclass Computer:    def __init__(self,cpu,disk):        self.cpu=cpu        self.disk=diskcpu1=CPU()cpu2=cpu1print(cpu1,id(cpu1))print(cpu2,id(cpu2))print('---------')disk=Disk()computer=Computer(cpu1,disk)import copycomputer2=copy.copy(computer)print(computer,computer.cpu,computer.disk)print(computer2,computer2.cpu,computer2.disk)print("---------------")#深拷贝computer3=copy.deepcopy(computer)print(computer,computer.cpu,computer.disk)print(computer3,computer3.cpu,computer3.disk)

输出结果:

<__main__.CPU object at 0x00000285642B8400> 2771934479360
<__main__.CPU object at 0x00000285642B8400> 2771934479360
---------
<__main__.Computer object at 0x0000028564827C70> <__main__.CPU object at 0x00000285642B8400> <__main__.Disk object at 0x0000028564296100>
<__main__.Computer object at 0x0000028564839520> <__main__.CPU object at 0x00000285642B8400> <__main__.Disk object at 0x0000028564296100>
---------------
<__main__.Computer object at 0x0000028564827C70> <__main__.CPU object at 0x00000285642B8400> <__main__.Disk object at 0x0000028564296100>
<__main__.Computer object at 0x000002856486AD90> <__main__.CPU object at 0x00000285648771C0> <__main__.Disk object at 0x0000028564877190>
 

变量的赋值操作:

只是形成两个变量,实际上还是指向同一个对象 

浅拷贝:

Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

深拷贝:

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

模块的导入

import math#数学运算print(id(math))print(type(math))print(math)print('--------')print(math.pi)print(dir(math))print(math.pow(2,3),type(math.pow(2,3)))print(math.ceil(9.001))#向上取整print(math.floor)#向下取整from math import  piprint(pi)

 右键目录标记为根目录可导入自己创建的模块

 以主程序方式运行:

def add(a,b):    return a+bdef div(a,b):    return a/bif __name__ == '__main__':#只有点击运行该文件时,才会执行运算     print(add(2,3))

import package1.module_A as ma#包名.模块名称print(ma.a)#导入带有包的模块时注意事项import package1import calc#使用import方式进行导入时,只能根包名或模块名from package1 import module_Afrom package1.module_A import a#使用from...impor可以导入包,模块,函数,变量

常用内容模块

import sys#与Python解释器及其环境操作相关的标准库print(sys.getsizeof(24))print(sys.getsizeof(28))print(sys.getsizeof(True))print(sys.getsizeof(False))import time#提供了事件相关的各种函数的标准库print(time.time())print(time.localtime(time.time()))import urllib.request#用于读取来自网上服务器的数据标准库print(urllib.request.urlopen('http://www.baidu.com').read())import math#提供标准算术运算函数的标准库print(math.pi)import decimal#用于进行精确控制运算精度、有效数位和四舍五入的十进制运算import os#提供了访问操作系统服务功能的标准库import calendar#提供了与日期相关的各种函数的标准库import json#用于JSON序列化和反序列化对象import re#用于在字符串中执行正则表达式匹配和替换import logging#提供了灵活的记录事件、错误、警告和调试信息等日志信息功能

第三方功能包

import schedule#pip install schedule安装import timedef job():    print('哈哈-')schedule.every(3).seconds.do(job)while True:    schedule.run_pending()    time.sleep(1)

编码格式

#Python的解释器使用的是Unicode(内存)#.py文件在cipanshang#通过encoding=gbk改编码格式,默认为utf-8

文件读写操作

#读取文件file=open('a.txt','r')print(file.readlines())file.close()#写文件file1=open('b.txt','w')file1.write('helloworld')file1.close()

with语句

with open('a.txt','r') as file:#with调用上下文管理器执行enter和exit方法    print(file.read())

os模块的常用函数

#os模块与操作系统相关的一个模块import os'''os.system('notepad.exe')os.system('calc.exe')'''os.startfile('C:\\Program Files (x86)\\Tencent\\QQ\\Bin')

 

来源地址:https://blog.csdn.net/yueliangmua/article/details/125966434

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python学习笔记(持续更新)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 学习(持续更新......

1、Python没有数组,但是列表 (list) 跟数组很像;Python的元组 (tuple) 与列表相似,但是元组的元素不能 修改;      列表使用方括号,元组使用小括号,其实可以把元组看成是只读的列表;      在Python中
2023-01-31

Python 学习笔记 - 不断更新!

太久不写python,已经忘记以前学习的时候遇到了那些坑坑洼洼的地方了,开个帖子来记录一下,以供日后查阅。 摘要:一些报错;为啥Python没有自增 ++ 和自减 --; 0x01  字符串的单双引号问题:    Python不是JS,也不
2023-01-31

Python学习笔记

Python介绍Python是一种解释型、面向对象的语言。官网:www.python.orgPython环境解释器:www.python.org/downloads运行方式:交互模式。在IDLE中运行。脚本模式。文件的后缀名为.py。
2023-01-30

Python 学习笔记

rs=Person.objects.all()all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。print rs.query 会打印出原生sql语句rs=Person
2023-01-31

python学习笔记--趣学Python

由反弹球和球拍构成的游戏。球会在屏幕上飞过来,玩家要用球拍把它弹回去画布和画弹球引入模块#Tkinter -- Python的标准GUI库,Tk 接口,是python 内置的安装包from tkinter import *import ra
2023-01-31

Python学习笔记(1)

1 def sum_args(*args):2 return sum(args))3 4 def run_with_positional_args(func, *args):5 return func(*args)6
2023-01-31

Python 学习笔记 - SQLAlc

继续上一篇SQLAlchemy的学习之旅。多对多表的创建表Host和表HostUser通过表HostToHostUser关联在一起from sqlalchemy import create_enginefrom sqlalchemy.ext
2023-01-31

python scapy学习笔记

1. ubuntu下安装gnuplot 转自:http://blog.163.com/gz_ricky/blog/static/182049118201362501316961/2.安装PyX sudo pip install pyx==0
2023-01-31

python scrapy学习笔记

scrapy是python最有名的爬虫框架之一,可以很方便的进行web抓取,并且提供了很强的定制型。一、安装scrapy# pip install scrapy二、基本使用1、初始化scrapy项目# scrapy startproject
2023-01-31

python egg学习笔记

原文链接:http://www.worldhello.net/2010/12/08/2178.html经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install
2023-01-31

Python 学习笔记 - Memcac

Memcached是一个分布式内存对象缓存系统,他把数据缓存在内存里面来减少对数据库的访问,从而提高动态网页的访问速度。他的基本结构是key/value(键值对)。下面看看在Python里面如何使用。首先来安装一下服务器端,豆子直接在一个C
2023-01-31

Python学习笔记(matplotli

Python学习笔记--在Python中如何调整颜色和样式  参靠视频:《Python数据可视化分析 matplotlib教程》链接:https://www.bilibili.com/video/av6989413/?p=6所用的库及环境:
2023-01-30

python-memcached学习笔记

介绍:  memcached是免费、开源、高性能、分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态web应用程序的使用。  数据类型:只用一种字符串类型1:安装sudo apt-get install memcache
2023-01-31

Python学习笔记四(Python

Python os模块提供了一个统一的操作系统接口函数,通过python os模块可以实现对系统本身的命令,文件,目录进行操作,官方参考文档( http://docs.python.org/library/os)。1)os.sep 可以取代
2023-01-31

Python学习笔记-SQLSERVER

环境 : python3.6 / win10 / vs2017 / sqlserver2017一、需要安装的包pymssqlpip install pymssql二、pymssql模块的介绍pymssql 包 有modules:pymssq
2023-01-30

Python Paste 学习笔记

一、写在前面这篇文章主要介绍了Python的Paste库的使用,学习过程中主要参考官网文档以及自己的理解,整理成笔记以便后续自己查阅。 如果转载,请保留作者信息。 邮箱地址:jpzhang.ht@gmail.com Python Pa
2023-01-31

python学习笔记 --- prin

print 输出直接到文件里主要是python版本问题,语法不一样,这里记录一下。python 3.x#!/usr/bin/env python3 #coding:utf-8K = 10f = open("./output/recard"
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录