在 Python 中有6种标准数据类型,分别为:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)和Dict(字典)。而根据内存中的内容是否可变,分为可变类型与不可变类型。其中,数字、字符串、元组和集合被称为不可变类型,列表和字典称为可变类型。
输出的格式: (a = input() b= input())
①print("{} {}".format(a,b))
②print("%d %d"%(a,b))
注意 如果记不起这些占位符就可以利用第一种输出方式!!%b作为二进制整数
%.xf 实现浮点数保留x位小数
%.1f 实现浮点数保留1位小数
序列操作
all():判断可迭代对象的每个元素是否都为True值
any():判断可迭代对象的元素是否有为True值的元素
sorted():对可迭代对象进行排序,返回一个新的列表。 eg:元组和列表等是可迭代对象
元组与列表很相似,两者之间的差别在于:
-
列表在初始化后其中的元素还可以进行增删改等操作,但是元组在初始化后其中的元素不能进行更改;
-
列表在赋值时使用方括号[],而元组在赋值时使用小括号()。
因为元组具有不可变的特性,所以在能用元组替代列表的地方最好都使用元组,这样代码更安全。
列表可以转换成元组,利用元组的内置函数比如len(tuple)、max(tuple)、min(tuple)、tuple(list)
Python 为列表类型提供了一系列内置操作,包括append()、insert()、pop()、remove()等函数
list.append(obj):向列表的尾部追加一个元素
list.insert(index,obj) : 可以在列表任意指定位置插入元素
obj = list.pop(index) :该方法将从源列表删除对应元素,同时返回被删除的元素。 注意:index参数为可选项,不填则默认删除列表末尾的元素。
del list[index] :删除指定索引位置的元素
list.remove(obj):直接通过元素值来删除对应的元素(当无法确定index索引,无法使用del用法)
list.sort(reverse=Ture) :Ture代表反向从大到小,默认False代表从小到大排序
python 中的切片
eg:记住切片中以冒号(:)隔开!!!!
open()函数的运用
在 Python 中,open
函数用于打开指定文件并返回文件操作对象,通过该对象可以对文件进行读取和写入等操作。open
函数的基本语法如下:
open(file,'r',encoding='utf-8')
其中,file
是要打开的文件名(包括路径),mode
是打开文件的模式,encoding
是文件的编码方式。下面是一些常用的模式。
r
:只读模式(默认)。w
:写入模式,会覆盖已有文件。a
:追加模式,在已有文件末尾追加内容。x
:独占创建模式,只能创建不存在的文件,如果文件已存在则会抛出异常。b
:二进制模式。t
:文本模式(默认)。+
:更新模式,表示可读写(需要放到其他模式的后面)。
python迭代器
迭代器的优点
-
迭代器访问与for循环访问非常相似,但是也有不同之处。对于支持随机访问的数据结构如元组和列表,迭代器并无优势。因为迭代器在访问的时候会丢失数据索引值,但是如果遇到无法随机访问的数据结构如集合时,迭代器是唯一访问元素的方式;
-
迭代器仅仅在访问到某个元素时才使用该元素。在这之前,元素可以不存在,所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合;
-
迭代器提供了一个统一的访问集合的接口,定义iter()方法对象,就可以使用迭代器访问。
可直接作用于for循环的数据类型如list、tuple、dict等统称为可迭代对象:Iterable。使用isinstance()可以判断一个对象是否是可迭代对象。
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。next()函数访问每一个对象,直到对象访问完毕,返回一个StopIteration异常。
eg: 所有的Iterable都可以通过iter()函数转化为Iterator 含义为所有的可迭代对象都可以转换成迭代器
迭代器为IterList,正确对迭代器使用next()方法
rstrip() 可以消除字段中的换行符\n
在 Python 中,r
和f
是两个字符串前缀,它们(r' ',f' ')的含义如下:
r
:在字符串前加r
前缀表示该字符串是原始字符串(Raw String),它会保留字符串中的所有字符,包括转义字符。例如,r'\n'
表示包含一个反斜杠和一个字母n
的原始字符串,而不是表示换行符。原始字符串通常用于正则表达式,对应re
模块。f
:以f
开头表示在字符串内支持大括号内的 Python 表达式。这允许在字符串中嵌入变量或表达式的值。例如,f'my name is {name}, age is {age}'
会将变量name
和age
的值插入到字符串中。可以通过大括号{}
来引用变量或表达式,Python 会将它们的值插入到字符串中。这种方式可以使字符串更具动态性和灵活性。
for i in range(10):
# 循环结构实现循环变量名,利用多个列表名类似的列表存储数据
locals()[f"list{i}"] = [i]
for i in range(10):
# 输出多个列表名类似的列表
print(locals()[f"list{i}"])
eg:实现循环变量名,并输出。
locals()[f"list{i}"] = [i]
:在每次循环中,通过 locals()
函数获取当前命名空间中的所有局部变量,并使用 f"list{i}"
格式化字符串的方式创建一个名为 list[i]
的变量。然后,将当前循环变量 i
作为列表的唯一元素存储在该变量中。
可变参数允许我们在调用函数时传入任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许我们传入任意个含参数名的参数,这些关键字参数在函数调用时自动组装为一个dict
必选参数 def plus(a,b=2):
-
# 定义加法函数plus,参数a是必选参数,参数b是默认值2的参数
-
def plus(a,b=2):
-
c=a+b
-
return(c) #区分与c语言的 return c;
可变参数 def plus(*numbers):
-
# 定义plus函数,完成的功能是返回输入的整数之和。
-
# 参数numbers是可变参数,表示输入的参数个数可以为任意值
-
def plus(*numbers):
-
add = 0
-
for i in numbers:
-
add += i
-
return(add)
关键字参数
python的模块概念
-
from 模块名 import 函数名1,函数名2....
2.from 模块名 import * #导入全部函数
内置模块
内置模块中的内置函数
-
Python 中常见的内置模块如下:
-
os模块:文件和目录,用于提供系统级别的操作;
-
sys模块:用于提供对解释器相关的操作;
-
json模块:处理JSON字符串;
-
logging: 用于便捷记录日志且线程安全的模块;
-
time&datetime模块:时间相关的操作,时间有三种表示方式;
-
hashlib模块:用于加密相关操作,代替了md5模块,主要是提供SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法;
-
random模块:提供随机数。
-
Python 的内置模块中也有很多使用十分方便的内置函数。
-
在 Python 中,正常的函数和变量名是公开的(public),是可以被直接引用的。比如abs()、abc、dir()等。
-
* 类似__xxx__这种格式的变量是特殊变量,允许被直接引用,但是会被用作特殊用途。比如__author__、__name__就是属于特殊变量。hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己编程定义的变量一般不会用这种变量名。
在 Python 代码中,
if __name__ == "__main__":
是一个常用的条件语句,它用于判断当前文件是否作为主模块直接运行。下面是对
if __name__ == "__main__":
的意义和用法的解释:含义:
1.__name__
是一个内置变量,它的值取决于当前代码文件的使用方式。2.如果当前文件作为主模块直接运行,__name__
的值将是"__main__"
。3.而如果该文件被其他模块导入,__name__
的值将是模块的名称。 用途:使用if __name__ == "__main__":
可以在主模块中编写一些只在直接运行时执行的代码,而在被导入时不会执行。这常用于模块的自测、配置文件的读取、数据的初始化等操作。 -
* 类似_xxx和__xxx这种格式的函数和变量就是非公开的(private),不应该被直接引用。
-
* 补充:_xxx的函数和变量是protected,我们直接从外部访问不会产生异常。__xxx的函数和变量是private,我们直接从外部访问会报异常,我们要注意前缀符号的区别。
dir()效果如下图所示:
globals()和locals()函数可被用来返回全局和局部命名空间里的名字。
python的类概念
Python 是一门面向对象的语言。面向对象编程 - Object Oriented Programming(简称 OOP)是一种编程思想,在面向对象编程中,把对象作为程序的基本单元,把程序视为一系列对象的集合。一个对象包括了数据和操作数据的方法,消息传递成为联系对象的方法。
-
class ClassName(bases_classes):#class后面接着是类名ClassName,类名的开头通常是大写。类名后面的(bases_classes)表示这个类是由哪个类继承来的,如果没有合适的继承类,就使用object类,object类是所有类都会继承的基类。
-
'类文档字符串'
-
class_suite # 类体 包含函数和变量
python的类继承覆盖
父类
父类也称基类,其声明方法与一般的类的声明方法一样。父类中存在着一些公共的属性和方法,子类继承于父类。
子类
子类继承于父类,拥有父类中的属性和方法,它自己也可根据实际情况声明一些属于自己的属性和方法。子类声明方法:
-
class subClass(parentClass1,parentClass2,parentClass3,……): #类名括号里填的就是父类的名字
-
class_suite #类的主体内容
对于任何子类来说,__bases__类是一个包含其父类的集合的元组,对于没有父类的类来说,其__bases__属性值为空。
故可以用 Classname.__bases__查询类Classname的包含其父类的一个元组。
通过继承覆盖方法,也就是在子类里再写一个与父类中一样的方法,实现自己想要实现的功能。例如:
-
class Parent:
-
def sayHello(self):
-
print("hello,i am class parent")
-
class Subclass(Parent):
-
def sayHello(self):
-
print("hello,i am class subclass") #直接用同名方法覆盖即可
-
sc = Subclass()
-
sc.sayHello()
基础知识点
类的数据属性只与类绑定,不属于任何实例,如下所示:
-
class DataProperty:
-
theData = 10 #类的数据属性
__init__()是解释器在创建一个实例后调用的第一个方法。在实例化一个对象后,Python 会检查是否实现了__init__()方法。如果没有实现__init__()方法,则不会做其它的操作,直接返回对象,实例化过程完毕。而__init__()方法是用来给类本身初始化的,支持带参数的初始化。
调用绑定方法
在定义方法时,self总是作为第一个参数传递的(self是隐含传递的,即我们在创建实例对象和调用方法不需要输入self)。self代表实例本身,self.变量代表调用此实例的变量,self.方法代表调用实例的方法。因为声明方法时已经传入self,所以在调用时self就不用明确传入了,此时实例是隐含的。调用绑定方法的代码如下:
-
class bindExample:
-
def bindMethod(self):
-
print("绑定方法调用实例")
-
be = bindExample()
-
be.bindMethod()
调用非绑定方法
当调用非绑定方法的时候,因为没有创建实例,所以需要用类去调用方法。在调用的时候需要显式地传入一个实例参数。例如:
-
class bindExample:
-
def bindMethod(self):
-
print("非绑定方法调用实例")
-
be = bindExample()
-
bindExample.bindMethod(be)
静态方法
在声明静态方法的时候,使用函数修饰符@staticmethod 此方法无需传递参数
-
class StaticMethood:
-
@staticmethod
-
def statictest():
-
print("这是静态函数")
-
StaticMethood.statictest()
类方法
在声明类方法的时候,使用函数修饰符@classmethod。例如:此方法传入的参数是类本身,通常用cls作为参数名字
-
class ClassMethod:
-
@classmethod
-
def classtest(cls):
-
print(cls)
-
print("这是类方法")
-
cm = ClassMethod()
-
cm.classtest()