您的位置:首页 > 游戏 > 手游 > Python笔记

Python笔记

2024/7/6 18:59:02 来源:https://blog.csdn.net/qq_62015542/article/details/136520177  浏览:    关键词:Python笔记

1. Python概述

1)对象

数据表示为对象:对象本质上是一个内存块,拥有特定的值,支持特定类型的运算操作

Python 3中,一切皆为对象。

每个对象由标识(identity)、类型(type)和值(value)标识

  • 标识(identity)用于唯一标识一个对象,通常对应于对象在计算机内存中的位置。使用内置函数id(obj1)可返回对象obj1的标识 通过内置的id()函数,可以获取一个对象唯一的id标识(CPython的实现为内存存放位置)
  • 类型(type)用于表示对象所属的数据类型(类),数据类型(类)用于限定对象的取值范围,以及允许执行的处理操作。使用内置函数type(obj1)可以返回对象obj1所属的数据类型 通过内置的type()函数,可以判断一个对象的类型
  • 值(value)用于表示对象的数据类型的值。使用内置函数print(obj1)可返回对象obj1的值
2)标识符

标识符的第一个字符必须是字母、下划线(“_”),其后的字符可以是字母、下划线或数字 一些特殊的名称,如if、for等保留关键字,不能作为标识符

注意事项:

        (1)Python标识符区分大小写。例如,ABC和abc视为不同的名称

        (2)以双下划线开始和结束的名称通常具有特殊的含义。例如,__init__为类的构造函数,一般应避免使用

        (3)避免使用Python预定义标识符名作为自定义标识符名。例如:NotImplemented、Ellipsis、int、float、list、str、tuple等

3)关键字

关键字即预定义保留标识符。关键字不能在程序中用作标识符,否则会产生编译错误

4)常量

Python语言不支持常量,即没有语法规则限制改变一个常量的值

Python语言使用约定,声明在程序运行过程中不会改变的变量为常量,通常使用全大写字母(可以使用下划线增加可阅读性)表示常量名

5)Python运算符及其优先级

表达式的组成:操作数、运算符和圆括号按一定规则组成表达式

2. print中的f表示什么?

示例:

字符串格式化

在Python中,代表着格式化字符串(Formatted String)

格式化字符串以字母"f"或"F"作为前缀,后跟一对大括号{},其中可以包含变量名称、表达式或函数调用。

3. 大写字母表示常量

>>> PI = 3.14     #浮点类型常量
Python 语言使用约定,声明在程序运行过程中不会改变的变量为常量,通常使用 全大写字母 (可以使用下划线增加可阅读性)表示常量名

4.不可变对象和可变对象

不可变对象一旦创建,其值就不能被修改,例如:int、str、complex等

Python对象的可变性取决于其数据类型的设计,即是否允许改变其值

5.可变参数(单星参数和双星参数)

在声明函数时,通过 带星的参数 ,如 *param1 ,允许向函数传递 可变数量的实参
 调用函数时,从那一点后所有的参数被收集为一个 元组
在声明函数时,也可以通过 带双星的参数 ,如 **param2 ,允许向函数传递 可变数量的实参
 调用函数时,从那一点后所有的参数被收集为一个 字典
带星或双星的参数 必须位于形参列表的最后位置

例子:

def my_function(*args, **kwargs):  print("单星参数:", args)  # 输出为一个元组  print("双星参数:", kwargs)  # 输出为一个字典  # 调用函数  
my_function(1, 2, 3, name="Alice", age=30)

输出:

单星参数: (1, 2, 3)  #元组形式

双星参数: {'name': 'Alice', 'age': 30} #字典形式:key:value

6.循环结构

1)可迭代对象(iterable)

可迭代对象:一次返回一个元素,适合于循环

2)range对象

range(start, stop[, step])

从start开始,到stop结束(不包含stop)。如果指定了可选的步长step,则序列按步长增长

3)九九乘法表

注意:

str.format("{0:1}*{1:1}={2:<2} ", i, j, i * j)

这里有几个关键点:

  1. {0}{1}{2}:这些是占位符,用于插入参数到字符串中。数字 012 分别对应传递给 format 方法的参数列表中的第一个、第二个和第三个参数。

  2. :1:这是一个格式说明符,它指定了字段的最小宽度为1个字符。如果字段的值少于这个宽度,它不会进行任何填充(因为这里没有指定填充字符)。在这个例子中,它确保 i 和 j 至少占用一个字符的宽度。

  3. :<2:这又是另一个格式说明符。< 表示左对齐,2 表示字段的最小宽度为2个字符。如果字段的值少于这个宽度,它会在右侧(因为是对齐到左侧)用空格填充。在这个例子中,它确保 i * j 的结果和等号 = 至少占用两个字符的宽度,并且等号总是靠左对齐。

7.内置数据类型

  • 数值数据类型:int、bool、float、complex
  • 序列数据类型:不可变(str、tuple、bytes)和可变(list、bytearray)
  • 集合数据类型:set、frozenset
  • 字典数据类型:dict。例如:{1: "one", 2: "two"}
1)数值类型
① int

>>> int(), int(123), int('456'), int(1.23)  #输出:(0, 123, 456, 1)
>>> int('FF', 16), int('100', 2)                 #输出:(255, 4)
② float

③ complex
>>> c = complex(4, 5)
>>> c                              #输出:(4+5j)

属性/方法

说明

示例

real

复数的实部

>>> (1+2j).real                #结果:1.0

imag

复数的

>>> (1+2j).imag              #结果:2.0

conjugate()

共轭复数

>>> (1+2j).conjugate()   #结果:(1-2j)

2)算术运算符 

3)位运算符

4)数制转换函数

5)random模块

8.Python序列数据

  • 数组:将数据存储在一个或多个数组中,通过索引下标访问并处理数组的元素
  • 序列数据类型:元组(tuple)、列表(list)、字符串(str)和字节数据(bytes和bytearray)
1)元组也称之为定值表,用于存储值固定不变的值表

2)列表也称之为表,用于存储其值可变的表

3)字符串是包括若干字符的序列数据,支持序列数据的基本操作

4)字节序列数据是包括若干字节的序列

5)序列的索引访问操作

6)序列的切片操作

s [ i : j ] 表示取下标 [ i , j )的数

s [ : ] 表示取所有的数

s [ : j ] 表示取前 j 的数

s [ :: j ] 表示输出所有间隔 j 的数

s [ :: -1 ] 表示反转

del s[3] 表示删除下标为3的数

7)list对象的方法

假设表中的示例基于 a = [1,3,2]

8)tuple对象创建元组

9)str数据类型(字符串)

Python中没有独立的字符数据类型,字符即长度为1的字符串

Python内置数据类型str,用于字符串处理

  • str对象的值为字符系列
  • str对象(字符串)是不可变对象
  • 使用单引号或双引号括起来的内容,是字符串字面量
10)字节序列 
  • 字节序列(bytes和bytearray)是由8位字节数据组成的序列数据类型,即0<=x<256的整数序列
  • Python内置的字节序列数据类型包括:bytes(不可变对象)、bytearray(可变对象)和memoryview
11)字典(映射) 
  • 字典(dict,或映射map)是一组键/值对的数据结构。每个键对应于一个值。
  • 在字典中,键不能重复。根据键可以查询到值
  • 字典的键只能使用不可变的对象,但字典的值可以使用不可变或可变的对象

9.输入输出和文件

1)命令行参数 
  • 通过列表sys.argv访问命令行参数
  • argv[0]为Python脚本名,argv[1]为第1个参数,argv[2]为第2个参数
2)标准输入和标准输出函数
  • input函数的格式:input()
  • print函数的格式

3)文件和文件对象

  • 通过内置函数open创建或打开文件对象
  • 通过文件对象的实例方法write/writelines,可以写入字符串到文本文件
  • 通过文件对象的实例方法read/readline,可以读取文本文件的内容
  • 文件读写完成后,应该使用close方法关闭文件
4)with语句
  • 实现上下文管理协议的对象
  • 文件对象支持使用with语句,确保打开的文件自动关闭 
5)文本文件的写入和读取

6)二进制文件的读取和写入

7)CSV文件格式的读取和写入

import csv
def writecsv1(csvfilepath): #使用writer对象将数据写入csv文件headers = ['学号', '姓名', '性别', '班级', '数据库应用课程设计', '移动互联网应用开发实践', '计算机组成原理', '科技金融概论', '多媒体技术', '人工智能基础及应用']rows = [('1111111', '张三', '男', '软件工程', '88', '90', '97', '84', '90', '89'),('1111112', '李四', '男', '软件工程, '88', '90', '97', '84', '90', '89'),('1111113', '王五', '男', '软件工程', '88', '90', '97', '84', '90', '89'),('1111114', '李明', '男', '软件工程', '88', '90', '97', '84', '90', '89'),('1111115', '小亮', '男', '软件工程', '88', '90', '97', '84', '90', '89'),('1111116', '丽丽', '女', '软件工程', '88', '90', '97', '84', '90', '89'),]with open(csvfilepath,'w', newline='') as f:  #打开文件f_csv = csv.writer(f)       #创建csv.writer对象f_csv.writerow(headers)    #写入1行(标题)f_csv.writerows(rows)     #写入多行(数据)
def readcsv1(csvfilepath): #使用reader对象读取csv文件数据with open(csvfilepath,'r' ,newline='') as f:  #打开文件f_csv = csv.reader(f)    #创建csv.reader对象headers = next(f_csv)   #标题print(headers)         #打印标题(列表)for row in f_csv:      #循环打印各行(列表)print(row)csvfilepath = './data/course.csv' #csv文件存放路径
writecsv1(csvfilepath) #调用写入函数
readcsv1(csvfilepath) #调用读取函数

 10.程序的错误

1)语法错误

语法错误是指其源代码中拼写语法错误,这些错误导致Python编译器无法把Python源代码转换为字节码,故也称之为编译错误

2)运行时错误

运行时错误是在:

  • 程序中没有导入相关的模块(例如,import random)时,解释器将在运行时抛出NameError错误信息
  • 程序中包括零除运算,解释器将在运行时抛出ZeroDivisionError错误信息
  • 程序中试图打开不存在的文件,解释器将在运行时抛出FileNotFoundError错误信息
3)逻辑错误

逻辑错误是程序可以执行(程序运行本身不报错),但执行结果不正确。对于逻辑错误,Python解释器无能为力,需要读者根据结果来调试判断

4)异常处理
  • 通过try语句来定义代码块,以运行可能抛出异常的代码;
  • 通过except语句,可以捕获特定的异常并执行相应的处理;
  • 通过finally语句,可以保证即使产生异常(处理失败),也可以在事后清理资源等

 

  • finally块 始终在执行完 try和except块 之后执行,而与是否引发异常或者是否找到与异常类型匹配的except块无关
  • finally块用于清理在try块中执行的操作,如释放其占有的资源(如文件流、数据库连接和图形句柄),而不用等待由运行库中的垃圾回收器来完成对象

11.Python函数分类 

(1)内置函数。Python语言内置了若干常用的函数,例如abs()、len()等等,在程序中可以直接使用

(2)标准库函数。Python语言安装程序同时会安装若干标准库,例如math、random等等。通过import语句,可以导入标准库,然后使用其中定义的函数

(3)第三方库函数。Python社区提供了许多其他高质量的库,如Python图像库等等。下载安装这些库后,通过import语句,可以导入库,然后使用其中定义的函数

(4)用户自定义函数。本章将详细讨论函数的定义和调用方法

1)Lamda表达式/匿名函数

Lambda是一种简便的、在同一行中定义函数的方法。lambda实际上生成一个函数对象,即匿名函数

2)位置参数和命名参数 
  • 函数调用时,实参默认按位置顺序传递形参。按位置传递的参数称之为位置参数
  • 函数调用时,也可以通过名称(关键字)指定传入的参数,例如:my_max1(a=1, b=2); my_max1(b=2, a=1)
  • 按名称指定传入的参数称为命名参数,也称之为关键字参数
  • 使用关键字参数具有三个优点:
    • 参数按名称意义明确;
    • 传递的参数与顺序无关;
    • 如果有多个可选参数,则可以选择指定某个参数值
  • 带星号的参数后面声明的参数强制为命名参数,如果这些参数没有默认值,且调用时必须使用命名参数赋值,则会引发错误
  • 如果不需要带星号的参数,只需要强制命名参数,则可以简单地使用一个星号,如def total(initial=5, *, vegetables)
3)可变参数(单星参数和双星参数)

在声明函数时,通过 带星的参数 ,如 *param1 ,允许向函数传递 可变数量的实参
 调用函数时,从那一点后所有的参数被收集为一个 元组
在声明函数时,也可以通过 带双星的参数 ,如 **param2 ,允许向函数传递 可变数量的实参
 调用函数时,从那一点后所有的参数被收集为一个 字典
带星或双星的参数 必须位于形参列表的最后位置

例子:

def my_function(*args, **kwargs):  print("单星参数:", args)  # 输出为一个元组  print("双星参数:", kwargs)  # 输出为一个字典  # 调用函数  
my_function(1, 2, 3, name="Alice", age=30)

输出:

单星参数: (1, 2, 3)  #元组形式

双星参数: {'name': 'Alice', 'age': 30} #字典形式:key:value

12.类和对象

 1)类、对象

2)属性
  • 通过 self.变量名 定义的属性

  • 类属性:类本身的变量

  • 私有属性和公有属性

两个下划线开头,但是不以两个下划线结束的属性是私有的(private),其他为公共的(public)

  • @property装饰器 

 

3)静态方法(@staticmethod)
  • 声明属于与类的对象实例无关的方法
  • 静态方法不对特定实例进行操作,在静态方法中访问对象实例会导致错误
  • 静态方法通过装饰器@staticmethod来定义
  • 静态方法一般通过类名来访问,也可以通过对象实例来调用
4)类方法(@classmethod)
  • 允许声明属于类本身的方法,即类方法
  • 类方法不对特定实例进行操作,在类方法中访问对象实例属性会导致错误
  • 类方法通过装饰器@classmethod来定义,第一个形式参数必须为类对象本身,通常为cls 
  • 类方法一般通过类名来访问,也可通过对象实例来调用
5)__init__方法(构造函数)

__init__方法即构造函数(构造方法),用于执行类的实例的初始化工作。创建完对象后调用,初始化当前对象的实例,无返回值

6)__new__方法

__new__方法是一个类方法,创建对象时调用,返回当前对象的一个实例,一般无需重载该方法

7)__del__方法(析构函数) 
  • __del__方法即析构函数(析构方法),用于实现销毁类的实例所需的操作,如释放对象占用的非托管资源(例如:打开的文件、网络连接等)
  • 默认情况下,当对象不再被使用时,__del__方法运行,由于Python解释器实现自动垃圾回收,即无法保证这个方法究竟在什么时候运行
  • 通过del语句,可以强制销毁一个对象实例,从而保证调用对象实例的__del__方法

8)私有方法与公有方法 
  • 两个下划线开头,但不以两个下划线结束的方法是私有的(private),其他为公共的(public)
  • 以双下划线开始和结束的方法是Python的专有特殊方法。不能直接访问私有方法,但可以在其他方法中访问

9)继承

13.模块化编程

1)概念
  • 如果程序中包含多个可以复用的函数或类,则通常把相关的函数和类分组包含在单独的模块(module)中。这些提供计算功能的模块称之为模块(或函数模块),导入并使用这些模块的程序,则称之为客户端程序
  • 把计算任务分离成不同模块的程序设计方法,称之为模块化编程(modular programming)。使用模块,可以将计算任务分解为大小合理的子任务,并实现代码的重用功能
2)模块的API 

模块和客户端之间遵循的契约称之为API((Application Programming Interface,应用程序编程接口)

API用于描述模块中提供的函数的功能和调用方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com