Python基本概念与实践

news/2025/1/18 13:48:58/

Python语言,总给我一种“嗯?还能这么玩儿?”的感觉

Python像一个二三十岁的年轻人,自由、年轻、又灵活

欢迎一起进入Python的世界~

本人工作中经常使用Python,针对一些常用的语法概念进行持续记录。

一、类与常见数据结构

1. Python库、模块、类

Python库是一个集合,包含多个模块。模块是单个文件,包含函数、类和变量等。类是模块中的一个组件,用于定义对象的结构和行为。简而言之,库由模块组成,模块由类和其他代码组成。

1) Python库

  • Python库是一组模块的集合,通常是为了实现特定的功能或解决特定的问题而组织在一起的。库可以是一个包(Package),包是一种特殊的模块,可以包含多个子模块和子包。
  • 库用于提供一组相关的功能,这些功能通常比单个模块更复杂、更全面。库可以是第三方库,也可以是Python标准库的一部分。

2) Python模块

在了解Python类与基本数据结构之前,需要了解Python类到底在该语言中处于怎样的位置,即Python类与具体的Python文件之间是什么关系。

Python文件和类的关系:Python文件和类的关系可以类比为容器和内容物的关系。一个Python文件可以包含一个或多个类的定义,也可以包含其他代码,如函数、变量等。

  • 一个Python文件称为一个模块。模块是Python代码的基本组织单位。(模块的名称通常与文件名相同。例如,文件 my_module.py 定义了一个模块 my_module 
  • 在模块中可以定义类:这些类可以相互独立,也可以相互关联。
  • 导入模块和类:可以使用import导入整个模块,然后通过模块名访问其中的类、函数和变量。同样,也可以使用 from ... import ... 语句直接导入模块中的指定类。

 3) Python类

使用class关键词来定义一个类:

python">class MyClass:# 类的属性attribute1 = "value1"attribute2 = "value2"# 类的方法def my_method(self):print("Hello from my_method!")

创建实例,通过类名后跟一对括号创建实例:

python">my_instance = MyClass()
print(my_instance.attribute1)  # 输出: value1
my_instance.my_method()  # 输出: Hello from my_method!

初始化方法:

__init__方法是一个特殊的方法,被成为类的构造函数或初始化方法。当创建一个新的对象实例时,__init__方法会被自动调用。

2. Python基本数据结构

Python提供了几种内置的基本数据结构,这些数据结构在日常编程中非常有用。以下是一些常见的Python基本数据结构及其详细说明:

1) 列表(List)

列表是一种有序的集合,可以包含不同类型的元素。列表是可变的,这意味着你可以修改列表中的元素。

以下代码包含了 创建列表、插入元素和删除元素 的逻辑:

python"># 1. 创建列表:
my_list = [1, 2, 3, 4, 5]
my_list = ['apple', 'banana', 'cherry']
my_list = [1, 'apple', 3.14, True]# 2. 插入元素:
my_list = [1, 2, 3]# 在列表末尾插入一个元素
my_list.append(4)  # [1, 2, 3, 4]# 在列表指定位置插入一个元素
my_list.insert(1, 'a')  # [1, 'a', 2, 3, 4]# 在列表末尾一次性添加多个元素
my_list.extend([5, 6])  # [1, 'a', 2, 3, 4, 5, 6]# 3. 删除元素:
my_list = [1, 'a', 2, 3, 4, 5, 6]# 删除第一个值为 x 的元素
my_list.remove('a')  # [1, 2, 3, 4, 5, 6]# 删除指定位置的元素,并返回该元素。如果不指定位置,默认删除最后一个元素
my_list.pop(2)  # [1, 2, 4, 5, 6],返回3# 删除最后一个位置的元素
my_list.pop()  # [1, 2, 4, 5],返回6# 清空列表
my_list.clear()  # []

常用方法:

  • 添加元素:
    • append(x) :在列表末尾添加一个元素
    • insert(i, x) : 在指定位置插入一个元素
    • extent(iterable):在列表末尾一次性添加多个元素 

当需要处理一个动态的数据集合,列表是一个很好的选择。

2) 元组(Tuple)

元组是一种有序的集合,与列表类似,但元组是不可变的,这意味着一旦创建,就不能修改元组中的元素。

python"># 创建元组
my_tuple = (1, 2, 3, 4, 5)
my_tuple = ('apple', 'banana', 'cherry')
my_tuple = (1, 'apple', 3.14, True)# 1. 访问元组,可以通过索引进行访问
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple[2])  # 3# 2. 其他方法
my_tuple = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
my_tuple.count(5)  # 3 返回值为5的元素个数
my_tuple.index(4)  # 2 返回第一个值为x的元素的索引

元组相对于列表,其优势在于 不可变性。由于一经创建就不可变,一方面,可以存储固定的数据,例如存储不可修改的数据、或者作为字典的键。另一方面,由于其不可变,内存占用紧凑,更加节省内存空间。

3) 字典(Dictionary)

字典是一种无序的键值对集合。字典是可以变的,可以通过键来访问、添加、删除和修改值。

python"># 1. 创建字典
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(my_dict['name'])  # Alice# 2. 访问元素
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(my_dict['name'])  # Alice# 3. 添加和修改元素
my_dict['gender'] = 'Female'  # 添加新键值对
my_dict['age'] = 31  # 修改现有键值对# 4. 删除元素
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
# 删除指定键值对
del my_dict['city']  # {'name': 'Alice', 'age': 30}
# 删除指定键值对,并返回值。如果键不存在,返回默认值。
my_dict.pop('age')  # 30,{'name': 'Alice'}
# 删除并返回最后一对键值对(Python 3.7+)。
my_dict.popitem()  # ('name', 'Alice'),{}
# 清空字典。
my_dict.clear()  # {}# 5. 其他方法
# 返回字典的键视图
print(my_dict.keys())  # dict_keys(['name', 'age', 'city'])
# 返回字典的值视图。
print(my_dict.values())  # dict_values(['Alice', 30, 'New York'])
# 返回字典的键值对视图。
print(my_dict.items())  # dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])
# 返回指定键的值,如果键不存在,返回默认值。
print(my_dict.get('name'))  # Alice
print(my_dict.get('gender', 'Unknown'))  # Unknown

4) 集合(Set)

集合是一种无序的不重复元素集合。集合是可变的,可以进行集合运算,如并集、交集、差集等。

python"># 1. 创建集合
my_set = {1, 2, 3, 4, 5}
my_set = set([1, 2, 3, 4, 5])# 2. 添加元素
my_set = {1, 2, 3}
# 添加一个元素
my_set.add(4)  # {1, 2, 3, 4}
# 添加多个元素
my_set.update([5, 6])  # {1, 2, 3, 4, 5, 6}# 3. 删除元素
my_set = {1, 2, 3, 4, 5}
# 删除元素x,如果元素不存在,抛出KeyError。
my_set.remove(3)  # {1, 2, 4, 5}
# 删除元素x,如果元素不存在,不抛出异常。
my_set.discard(6)  # {1, 2, 4, 5}
# 删除并返回一个任意元素,如果集合为空,抛出KeyError。
my_set.pop()  # 返回一个任意元素,例如1,{2, 4, 5}
# 清空集合。
my_set.clear()  # {}# 4. 集合运算
# union(*others):返回并集。
# intersection(*others):返回交集。
# difference(*others):返回差集。
# symmetric_difference(other):返回对称差集。
# issubset(other):判断是否是子集。

二、Python进行HTTP请求

1. 示例代码

Python进行HTTP请求,通常使用 requests库

下面是一个经典的,使用requests请求并返回数据的Python代码:

python">import requests
import jsonapi_key = 'xxx'# 设置params(如果有的话)
params = {'key1': 'value1','key2': 'value2'
}# 设置请求头
headers = {'Authorization': f'Bearer {api_key}','Content-Type' : 'application/json'
}# 设置payload数据
data = {"inputs": {"title" : "托尼老师,你睡了吗?我睡不着"},"query": "1","response_mode": "streaming","conversation_id": "","user": "xxx"
}# 发送请求
# data从json变成json字符串格式
response = requests.post('https://xxx/v1/chat-messages', headers=headers, params=params, data=json.dumps(data))# 输出返回值
print(response.text)

最后返回的response对象是一个requests.Response对象,它包含了服务器返回的所有信息。虽然它是一个Python对象,但是并不是一个简单的数据结构,而是封装了多种属性和方法的复杂对象。可以通过访问它的属性和调用它的方法来获取和处理响应内容。

  • response.status_code:返回HTTP状态码,例如200表示成功,404表示未找到等。

  • response.headers:返回一个字典,包含响应头信息。

  • response.cookies:返回一个RequestsCookieJar对象,包含响应中的cookies。

  • response.url:返回请求的URL,包括查询字符串。

  • response.encoding:返回响应内容的编码。

  • response.text:返回响应内容的字符串形式,自动根据响应的编码进行解码。

  • response.content:返回响应内容的字节形式,适用于二进制数据,如图片、文件等。

  • response.json():将响应内容解析为JSON对象,前提是响应内容是JSON格式。

这里简单了解下就好,使用debug模式可以直接看到具体返回情况。

2. JSON数据处理

使用JSON函数需要导入json库:import json

函数描述
json.dumps将 Python 对象编码成 JSON 字符串
json.loads将已编码的 JSON 字符串解码为 Python 对象

1) json.dumps

json.dumps用于将Python对象编码成JSON字符串

语法:

python">json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

实例:

以下实例将数组编码为JSON格式数据:

python">#!/usr/bin/python
import jsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]data2 = json.dumps(data)
print(data2)

以上代码执行结果为:

python">[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]

使用参数让JSON数据格式化输出:

python">#!/usr/bin/python
import jsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]data2 = json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
print(data2)

以上代码执行结果为:

python">{"a": "Runoob","b": 7
}

python原始类型向 json 类型的转化对照表

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

2) json.loads

json.loads用于解码JSON数据。该函数返回Python字段的数据类型。

语法:

python">json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

实例:

以下实例展示了Python 如何解码 JSON 对象:

python">#!/usr/bin/python
import jsonjsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';text = json.loads(jsonData)
print(text)

以上代码执行结果为:

python">{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}

json类型转换到python的类型对照表

JSONPython
objectdict
arraylist
stringunicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone

三、Python文件处理

1. 文件目录:os模块

我们都知道,os中文是操作系统的意思,顾名思义,Python 的 os 模块提供了各种操作系统的接口,这些接口主要是用来操作文件和目录。

Python中所有依赖于操作系统的内置模块,对于不同系统提供了相同接口,大大提升其可移植性。

查看路径,代码示例:

python">import os# 1. 查看路径
# 查看当前路径
print(os.getcwd())# 返回指定目录下包含的文件和目录名列表。
print(os.listdir('E:/'))# 返回路径 path 的绝对路径。
print(os.path.abspath('.'))# 将路径 path 拆分为目录和文件两部分,返回结果为元组类型。
print(os.path.split('E:/tmp.txt'))# 将一个或多个 path(文件或目录) 进行拼接。
print(os.path.join('E:/', 'tmp.txt'))# 2. 查看 path 时间相关参数(path可以是文件、可以是路径)
# 返回 path 在系统中的创建时间。
print(datetime.datetime.utcfromtimestamp(os.path.getctime('E:/tmp.txt')))# 返回 path 的最后修改时间。
print(datetime.datetime.utcfromtimestamp(os.path.getmtime('E:/tmp.txt')))# 返回 path 的最后访问时间。
print(datetime.datetime.utcfromtimestamp(os.path.getatime('E:/tmp.txt')))# 3. 判断 path 存在性、确认文件大小
# 判断是否存在
print(os.path.exists('E:/tmp.txt'))# 判断是否为目录
print(os.path.isdir('E:/'))# 判断是否为文件
print(os.path.isfile('E:/tmp.txt'))# 返回 path 的大小,以字节为单位,若 path 是目录则返回 0。
print(os.path.getsize('E:/tmp.txt'))
print(os.path.getsize('E:/work'))# 4. 创建、更改功能
# 创建一个目录
os.mkdir('E:/test')# 创建多级目录
os.makedirs('E:/test1/test2')# 将当前工作目录更改为 path。
print(os.getcwd())
os.chdir('/test')
print(os.getcwd())# 5. 调用shell脚本
print(os.system('ping www.baidu.com'))

2. 读取与写入:open函数

open 函数是Python内置的函数,对文本文件和二进制文件采用同样的操作步骤,和把大象放冰箱里一样分三步:打开-操作-关闭。

在Python中,使用 open() 函数来打开文件。这个函数需要两个参数:文件名和打开模式。文件名可以是相对路径或绝对路径,打开模式决定了文件的打开方式,如读取、写入等。

常见的打开模式mode:

  • 'r':读取模式,默认值。如果文件不存在,会抛出FileNotFoundError
  • 'w':覆盖写入模式。如果文件已经存在,会被覆盖。
  • 'a':追加写入模式。如果文件已存在,写入的数据会被追加到文件末尾。

读取文件代码:

python"># 1. 读取文件
# 逐行读取文件的内容
# for循环配合文件对象迭代器
with open('example.txt', 'r') as file_object:for line in file_object:print(line.strip())  # 使用strip()去除行尾的换行符# 读取全部内容
# 使用read方法可以一次性读取文件的全部内容,并将其作为一个字符串返回
with open('example.txt', 'r') as file_object:content = file_object.read()print(content)# 按行读取到列表
# 使用readlines方法可以读取文件的全部行,并将其作为一个列表返回
with open('example.txt', 'r') as file_object:lines = file_object.readlines()for line in lines:print(line.strip())

写入文件:

python"># 2. 写入文件
# 覆盖写入:'w'模式打开文件,然后使用write()方法写入内容。
with open('output.txt', 'w') as file_object:file_object.write('Hello, world!\n')file_object.write('This is a test.\n')# 追加写入:'a'模式打开文件,然后使用write()方法写入内容。
with open('output.txt', 'a') as file_object:file_object.write('This is appended text.\n')

使用with语句可以自动关闭文件,但在不使用with语句的情况下,需要手动的关闭文件,以释放系统资源。可以使用close方法关闭文件。

实际开发中,推荐实用 with 语句来处理文件,因为它可以自动管理文件的打开和关闭,使代码更加简洁和安全。

注意,上面只给出了 'w' 和 'r' 两种模式,还有一些其他打开模式可供选择,例如:

  • 'x':独占创建模式。如果文件已存在,会抛出FileExistsError;如果文件不存在,会创建一个新文件。

  • 't':文本模式,默认值。以文本形式处理文件,读取时会自动将内容解码为字符串,写入时会自动将字符串编码为字节。

  • 'b':二进制模式。以二进制形式处理文件,读取和写入的内容都是字节序列。

  • '+':更新模式。用于读写文件,可以和rwa等模式组合使用。

3. 处理Excel:openpyxl库

openpyxl是一个Python库,用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。它提供了丰富的功能,可以创建、修改和查询Excel文件中的数据,支持复杂的Excel操作,如处理公式、图表和样式等。

一个Excel电子文档中可以包含多个表,每个表里面有行、列、单元格

用户正在查看的当前表(或者关闭Excel前最后查看到表)称为活动表

使用 openpyxl 库操作Excel表,主要包括读取某个单元格、按照范围读取、按照行或列读取等。代码如下:

python">import openpyxl# 加载工作簿
workbook = openpyxl.load_workbook('example.xlsx')
# 获取工作表
sheet = workbook['Sheet1']# 1. 读取单元格A1的值
cell_value = sheet['A1'].value
print(cell_value)  # 输出: 单元格A1的值# 2. 通过行和列索引读取数据
cell_value = sheet.cell(row=2, column=3).value
print(cell_value)  # 输出: 单元格C2的值# 3. 读取A1:C3区域的值
cells = sheet['A1:C3']
for row in cells:for cell in row:print(cell.value, end=" ")print()# 4. 按行获取值
for row in sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):for cell in row:print(cell.value, end=" ")print()# 5. 按列获取值
for col in sheet.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3):for cell in col:print(cell.value, end=" ")print()

持续加载 ing ~


http://www.ppmy.cn/news/1564162.html

相关文章

《机器学习》——SVD(奇异分解)降维

文章目录 SVD基本定义SVD降维的步骤SVD降维使用场景SVD 降维的优缺点SVD降维实例导入所需库定义SVD降维函数导入图像处理图像处理图像打印降维结果并显示处理后两个图像的对比图 SVD基本定义 简单来说就是,通过SVD(奇异值分解)对矩阵数据进行…

vulnhub靶场【Raven系列】之2 ,对于mysql udf提权的复习

前言 靶机:Raven-2,IP地址为192.168.10.9 攻击:kali,IP地址为192.168.10.2 都采用虚拟机,网卡为桥接模式 文章所用靶机来自vulnhub,可通过官网下载,或者通过链接:https://pan.quark.cn/s/a65…

Java中 try-with-resources 自动关闭资源的使用

目录 前言 一、基本概念 二、语法 三、使用方法与代码示例 示例 1:使用 try-with-resources 读取文件 示例 2:多个资源的管理 四、注意事项 五、优缺点 优点 缺点 六、总结 前言 在 Java 开发中,资源管理是一个非…

【Flink系列】6. Flink中的时间和窗口

6. Flink中的时间和窗口 在批处理统计中,我们可以等待一批数据都到齐后,统一处理。但是在实时处理统计中,我们是来一条就得处理一条,那么我们怎么统计最近一段时间内的数据呢?引入“窗口”。 所谓的“窗口”&#xff…

软考中级 软件设计师 第一章 第六节 流水线技术

目录 1、概念 2、图解 3、算法 3.1、时间算法 3.2、吞吐率 1、概念 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。 各种部件同时处理是针对不同指令而言的,它们可以同时为多条指令的不同部分进行工作,以提高各部件的利用…

EE213 Lab2 hspice simulation Static Device Characteristics

目录 0 前言 1 仿真目标 2 IDS-VDS 3 IDS-VGS 4 VTH 5 IDS-VGS(log) 6 Body bias(Ids-Vbs) 7 Body bias(Vth-Vbs) 8 Ids-Temperature 0 前言 记录一下来到skd上的强度比较大的一门课,数字集成电路2的lab设计还是蛮好的,该帖非详细教程只是单纯…

Java进阶-在Ubuntu上部署SpringBoot应用

随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。Java 作为一种跨平台的编程语言,具有广泛的应用场景。本文将详细介绍如何在 Ubuntu 服务器上部署 Java 应用,包括环境准备、应用发布、配置反向代理&#…

hive连接mysql报错:Unknown version specified for initialization: 3.1.0

分享下一些报错的可能原因吧 1.要开启hadoop 命令&#xff1a;start-all.sh 2.检查 hive-site.xml 和 hive-env.sh。 hive-site.xml中应设置自己mysql的用户名和密码 我的hive-site.xml如下&#xff1a; <configuration><property><name>javax.jdo.opt…