Python基础知识-下

本文介绍了Python的基础知识,包括列表、字典、元组和集合的创建、操作及特性,探讨了字符串的格式化、编码与解码,以及函数的传参和返回值。此外,还涉及类对象、实例对象、装饰器、面向对象的三大特征(封装、继承、多态)以及模块化编程的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


版权声明:转载请联系我获得授权

参考视频:python全套教程

image-20230601140952885

Python基础

列表

相当于其他语言中的数组,存储 N N N个元素

image-20230601110844580

从后往前采取负数索引

image-20230601110954254

# 创建与删除
		# 中括号
lst = [ ]
		# 内置函数list()
lst = list([ ])

# 查询
		# 获取列表中指定元素的索引
lst.index('hello',start,stop)	#相同元素只返回第一个元素的索引,值不存在返回ValueError,索引不存在返回IndexError
# 切片操作
lst[start : stop : step]
lst[1:6:] # 写不写最后一个:都可以,默认步长为1
# 遍历
for item in lst :
for item not in lst:

# 增、删、改
# 排序
lst.sort(reverse=True) 		# 默认升序
new_lst = sorted(lst, reverse=True)
# 列表生成式
[ i for i in range(10) ]

image-20230601111923070

image-20230601112052368

lst.clear()清空列表中的所有元素

del lst 将列表对象删除

修改:

为指定索引的元素赋予新值

为指定切片赋予新值

字典

可变的无序序列,但key是不可变对象,且不允许重复,value可以重复

以键值对的方式存储数据,存储位置根据hash函数计算

image-20230601113546185

# 创建
		# 花括号
dic = {' ':  ,  ' ': }
		# 内置函数dict()
lst = dict( key=' ', value=)

# 查询
dic[key] # 不存在key返回KeyError
dic.get(key)	# 不存在key返回None
key in dic
key not in dic

# 增、删、改
dic[key]=value
del dic[key]  # 删除指定键值对
dic.clear()		# 清空字典的元素

# 视图操作
dic.keys() 			 # 产生list
dic.values()		# 产生list
dic.items()			# 产生tuple

# 字典生成式
lst = zip(keys,values)		# 将对象中的元素打包成元组,返回由这些元组组成的列表

image-20230601114854005

元组

不可变的可迭代序列,没有增删改的操作,没有生成式

优点:多任务环境下,操作对象不需要加锁

# 创建
		# 小括号
tup = {' ' ,  ' '}
		# 内置函数tuple()
lst = tuple( (' ', ' ' ) )
		# 特殊情况,只包含一个元素,需要逗号和小括号
lst = (10, ) 

集合

集合是可变无序的序列,像没有value的字典

image-20230601120259427

# 创建
		# 花括号
s = {' ' ,  ' '}
		# 内置函数set()
s = set( anytype )

# 交集
s1.intersection(s2) 等价于 s1&s2
# 并集
s1.union(s2) 等价于  s1|s2
# 差集
s1.difference(s2) 等价于 s1-s2
# 对称差集
s1.symmetric_difference(s2) 等价于 s1^s2

# 集合生成式
{ i for i in range(10) }

image-20230601121913076

image-20230601120935252

image-20230601121345758

字符串

不可变的字符序列

字符串驻留机制 不同的值被存放在字符串的驻留池中,对相同字符串只保留一份拷贝,后续创建相同字符串不会开辟新空间。

image-20230601122703354

image-20230601122743077

image-20230601122852764

image-20230601122935481

image-20230601123037757

image-20230601123124976

字符串的比较:从两个字符串的第一个字符开始比较,比较其ordinal value原始ASCII值。

ord() 获取字符对应的ASCII编码

chr() 获取ASCII编码对应的字符

字符串是不可变类型,不具备增删改操作,切片操作产生新的对象

格式化字符串

%作占位符

image-20230601123908689

image-20230601123853810

%宽度.精度f
print('%10.3f' % 3.1415926)

{}作占位符

image-20230601123934342

`f格式化

f'我叫{name}, 今年{age}岁'
# .3表示一共三位数
print( '{0:.3}'.format(3.1415926) )
# .3f 表示共3位小数
print( '{0:.3f}'.format(3.1415926) )

字符串的编码与解码

# 编码与解码的格式要相同
byte = s.encode(encoding='UTF-8')	# 一个中文占两个字节
print(byte.decode(encoding='UTF-8'))		# 一个中文占三个字节

函数

传参

image-20230601133543244

个数不可变

位置实参:根据形参对应位置进行实参传递

关键字实参:根据形参名称进行实参传递

个数可变(只能是1个)

位置参数:*args 为形参时,结果为一个包含所有值的元组

关键字参数:**args为形参时,结果为一个包含所有变量名和变量值字典

局部变量和全局变量

global声明局部变量可以将其变成全局变量

返回值

函数返回多个值时,结果为元组;返回1个值时,结果为原始类型

如果不需要给调用处提供数据,return可以不写。

bug常见类型

image-20230601142036373

异常处理机制

image-20230601141606641

try-except-else :try中抛出异常执行else,不抛出异常执行except。

try-except-else-finally : 无论是否有异常都会执行finally。

import traceback
try:
except:
    traceback.print_exc()

类对象与实例对象

比如类对象<class 'int'>和它的实例对象1。实例对象中有一个类指针指向类对象。

编程界两大阵营

image-20230601143019051

# 类的创建
class Student:
    # 类属性 (直接写在类里的变量)
    native_place='湖南'		
    #name,age为实例属性
    # 初始化方法
    def __init__(self,name,age):		
        self.name = name
        self.age = age
     # 实例方法	(类之外定义的为函数,类之内定义的为方法)
    def info(self):
        pass
    # 类方法
    @classmethod
    def cm(cls):
        pass
    # 静态方法
    @staticmethod
    def sm():	# 无任何默认参数
        pass
# 类的实例化
stu = Student('Jack', 20)

# 为实例动态绑定属性		应在类对象和实例对象创建后添加
stu1.gender='女'  # 此时stu1有该属性而stu2没有
# 为实例动态绑定方法 
def show():
    pass
stu1.show = show
stu1.show()

装饰器和语法糖

面向对象的三大特征

封装

将数据属性和行为方法包装到类对象中

如果不希望该属性在类对象外部被访问,前边加“__”

继承

class Child(Parents):
    def __init__(self, name, age, score):
        super().__init__(name, age)
        self.score = score

子类的方法可以从父类继承过来

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

object类是所有类的父类 dir()可以查看指定对象的所有属性。没有继承任何类默认继承object类。

经常对父类的def __str__(self): return '姓名:{0}, 年龄:{1}'.format(self.name, self.age)进行重写,该方法常用来返回对于对象的描述。

多态

def fun(aniaml):
    animal.eat()
# 这里的animal可以传入父类的 Animal(),也可以传入 Dog()、Cat()、Person()等子类。

动态语言只关心是否具有这个方法,而不关心对象的类型

静态语言实现多态的三个必要条件:

(1)继承

(2)方法重写

(3)父类引用指向子类对象

Java是静态语言,Python是动态语言。

特殊方法和特殊属性

image-20230601162238923

类的浅拷贝和深拷贝

  • 变量的赋值操作

形成两个变量,实际上指向同一对象。即地址相同。

  • 浅拷贝(未特殊说明类一般都是浅拷贝)

只拷贝源对象,生成一个不同地址的拷贝对象。源对象和拷贝对象引用同一个子对象。

import copy
computer2 = copy.copy(computer)
print(computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)
# computer与computer2的地址不同,但子对象cpu和disk地址相同
  • 深拷贝

递归拷贝对象中包含的子对象,源对象和拷贝对象所有子对象也不相同。

import copy
computer2 = copy.deepcopy(computer)
print(computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)
# computer与computer2的地址不同,子对象cpu和disk地址也不同

模块化编程

一个.py文件 就是一个模块(Modules)。

# 模块的导入
import modules as M
from modules import function, classes, variables

当导入模块报错时,去当前所在包在右键 ‘Mark Directory as’ 选择’Source Root’

常用内置模块

image-20230601174609547

schedule 周期任务神器

第三方模块的安装

pip install module
import mudule

主程序形式运行

if __name__ = '__main__':
# 只有运行当前程序时会执行,如果该程序是被动调用则不执行

包package

import package.module as m

编码格式

处理全球范围内的字符集,优先使用UTF-8,只处理中文字符,使用gbk编码更合适。

文件读写

文件读写俗称IO操作,实际是队列数据结构。

.py从File中读数据。写入数据到File中。

image-20230601181307302

image-20230601181635006

file = open('a.txt', 'r')	# 打开文件
print(file.readlines())		# 按行读文件	 readlines()返回列表
# file.read() 读取全部内容
file.close()						# 关闭资源

如果此时乱码,reload in GDK

image-20230601182233673

文件对象的常用方法

image-20230601182602134

with上下文管理器

无论什么原因跳出with块,都能确保文件正确关闭,以此来释放资源

无须手动 file.close()

image-20230601183347034

with open('a.txt', 'r') as file:
    print(file.read())

os模块

import os
os.system('notepad.exe')
os.startfile(r'C:\filename')

image-20230601184921511

import os.path
os.path.abspath('name.py')

image-20230601185038674

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值