wordpress版本对应的php版本号/电商网站seo怎么做

wordpress版本对应的php版本号,电商网站seo怎么做,网站 网页区别,合肥工大建设监理有限公司网站目录 1 正则匹配注意点11.1 正则匹配字符串写法1.2 创建re函数(1)re.search()--搜索第一个匹配项(2)re.match() - 从字符串开头匹配(3)re.findall() - 返回所有匹配项的列表(4)re.fi…

目录

  • 1 正则匹配
    • 注意点1
    • 1.1 正则匹配字符串写法
    • 1.2 创建re函数
      • (1)re.search()--搜索第一个匹配项
      • (2)re.match() - 从字符串开头匹配
      • (3)re.findall() - 返回所有匹配项的列表
      • (4)re.finditer() - 返回匹配项的迭代器(适合大文本)
      • (5)re.sub() - 替换匹配内容
      • (6)re.split() - 按正则表达式分割字符串
  • 2 参数数量/类型/默认值指定
  • 3 引用传递和值传递说明
  • 4 排列组合 itertools
  • 5 内置变量/特殊变量
    • 5.1 内置变量
    • 5.2 类相关的特殊属性
  • 6 try-except-else-finally机制
    • 6.1 基础用法
    • 6.2 else-finally
    • 6.3 向上一级抛出错误
  • 7 Threading - 线程(不是进程,创建进程我用的少)
    • 7.1 讲到线程,就不得不谈线程通信
  • 8 路径操作及路径索引 glob

以下资料参考官网及AI

1 正则匹配

re官网
python 的 re 库能够实现正则匹配功能。

注意点1

注意:在Python中使用正则表达式时要优先使用原始字符串。
(也就是说,字符串不会被python语言解析。而只会被re库里的函数解析)

原因如下:
正则表达式本身用 \ 转义特殊字符(如 \d 表示数字),但Python字符串中的 \ 也是转义符。因此,在普通字符串中写正则表达式时,需用 ‌两个反斜杠‌ 表示一个实际的反斜杠(如 \d)。

原始字符串(前缀 r)会忽略Python字符串的转义规则,直接保留所有字符的字面值。例如,r"\d" 会直接传递给正则引擎 \d,而无需额外转义。

以下为错误案例1:

import repattern = "\\"  # 普通字符串:实际传递的是单个 \,但正则引擎会报错(转义不完整)
re.findall(pattern, "a\\b")  # 报错:因为正则收到的是单个 \

正确写法:

pattern = "\\\\"  # 普通字符串中,四个反斜杠 → Python转义为两个 \,正则引擎收到两个 \
result = re.findall(pattern, "a\\b")  # 成功匹配到 ["\\"]

使用原始字符串的写法:

pattern = r"\\"  # 原始字符串直接保留两个 \,正则引擎收到两个 \
result = re.findall(pattern, "a\\b")  # 成功匹配到 ["\\"]

以下为错误案例2:

pattern = "\b"   # 普通字符串中,\b 是退格符,正则引擎无法识别为单词边界
re.findall(pattern, "hello world")  # 匹配失败

正确写法:

pattern = r"\b"  # 原始字符串直接传递 \b,正则引擎识别为单词边界
result = re.findall(pattern, "hello world")  # 匹配到单词边界的空字符

1.1 正则匹配字符串写法

pattern = r'xxx'

匹配字符含义案例
[ ]一个字符的集合,这写字符可以单独列出,也可以用范围表示(范围用-分隔)[abc],[a-c]
$[akm$] 将会匹配以下任一字符 ‘a’, ‘k’, ‘m’ 或 ‘$’
^^放在字符类的最开头,集合取反来匹配字符类中未列出的字符。(如果放在字符类其他位置,则无意义)[^5] 将匹配除 ‘5’ 之外的任何字符;[5^] 将匹配 ‘5’ 或 ‘^’
\w匹配任何字母数字字符相当于字符类 [a-zA-Z0-9_]
\d匹配任何十进制数字等价于字符类 [0-9]
\S匹配任何非空白字符等价于字符类 [^ \t\n\r\f\v]
\W匹配任何非字母与数字字符等价于字符类 [^a-zA-Z0-9_]
\s匹配任何空白字符[ \t\n\r\f\v]
\D匹配任何非数字字符等价于字符类 [^0-9]
.匹配除换行符之外的任何字符
*定前一个字符可以匹配零次或更多次,而不是只匹配一次ca*t 将匹配 ‘ct’ ( 0 个 ‘a’ )、‘cat’ ( 1 个 ‘a’ )、 ‘caaat’ ( 3 个 ‘a’ )
+匹配一次或更多次ca+t 可以匹配 ‘cat’ ( 1 个 ‘a’ )或 ‘caaat’ ( 3 个 ‘a’),但不能匹配 ‘ct’
{m,n}其中 m 和 n 是十进制整数,该限定符意味着必须至少重复 m 次,最多重复 n 次。a/{1,3}b 可以匹配 ‘a/b’、‘a//b’ 或者 ‘a///b’ ,但不能匹配中间没有斜杆的 ‘ab’,或者四个斜杆的 ‘ab’
()它们将包含在其中的表达式组合在一起,你可以使用重复限定符重复组的内容(ab)*,匹配ab 0到多次

1.2 创建re函数

(1)re.search()–搜索第一个匹配项

import retext = "Python is fun, Python is powerful"
pattern = r"Python"
match = re.search(pattern, text)
if match:print("Found:", match.group())  # 输出: Found: Python

(2)re.match() - 从字符串开头匹配

import re
text = "Python is awesome"
pattern = r"Python"
match = re.match(pattern, text)
if match:print("Match found:", match.group())  # 输出: Match found: Python# 若 text = "I love Python",则 match 为 None

(3)re.findall() - 返回所有匹配项的列表

import re
text = "apple 12, banana 3, cherry 45"
numbers = re.findall(r'\d+', text)
print(numbers)  # 输出: ['12', '3', '45']

(4)re.finditer() - 返回匹配项的迭代器(适合大文本)

import re
text = "a=1, b=2, c=3"
matches = re.finditer(r'\w+=\d+', text)
for match in matches:print(match.group())  # 输出: a=1, b=2, c=3

(5)re.sub() - 替换匹配内容

import re
text = "2023-10-05"
new_text = re.sub(r'-', '/', text)
print(new_text)  # 输出: 2023/10/05# 使用函数处理替换内容
def double_number(match):return str(int(match.group()) * 2)text = "Score: 5, Count: 3"
result = re.sub(r'\d+', double_number, text)
print(result)  # 输出: Score: 10, Count: 6

(6)re.split() - 按正则表达式分割字符串

import re
text = "one,two;three four"
parts = re.split(r'[,; ]+', text)
print(parts)  # 输出: ['one', 'two', 'three', 'four']

2 参数数量/类型/默认值指定

直接通过一个综合案例说明:

from typing import Union, Optional, Anydef generate_user_card(username: str,  # 必选参数(无默认值)age: int = 18,  # 必选但有默认值(可省略)*hobbies: str,  # 不定数量的位置参数(爱好)country: Optional[str] = "未知",  # 可选关键字参数(允许None)**extra_info: Union[str, int, float]  # 不定数量的关键字参数(扩展信息)
) -> dict[str, Any]:"""生成用户信息卡,支持灵活参数输入"""user_data = {"username": username,"age": age,"hobbies": hobbies if hobbies else ("无",),"country": country,"extra": extra_info}return user_data

(1)基础调用:


result1 = generate_user_card("Alice")
print(result1)
# {'username': 'Alice', 'age': 18, 'hobbies': ('无',), 'country': '未知', 'extra': {}}

(2)额外信息传入:

result3 = generate_user_card("Charlie",age=30,country=None,  # 明确设置为Noneemail="charlie@example.com",score=95.5
)
print(result3["extra"])
# {'email': 'charlie@example.com', 'score': 95.5}

3 引用传递和值传递说明

在 Python 中,变量传递的本质是 对象引用的传递‌,所有操作都是基于对象的引用(可以理解为“指针”)。

  • 不可变对象‌(int, float, str, tuple 等)
    传递的是对象的引用,但修改时会创建新对象,原始对象不受影响(类似“值传递”的效果)

  • ‌可变对象‌(list, dict, set, 自定义类实例等)
    传递的是对象的引用,修改内容时会影响原始对象(类似“引用传递”的效果)

案例说明1

def modify_data(num: int, lst: list, obj: object):num += 10      # 不可变对象:创建新对象lst.append(4)  # 可变对象:修改原对象obj.value = 5  # 可变对象:修改原对象# 初始化数据
original_num = 5
original_list = [1, 2, 3]
class MyClass:def __init__(self):self.value = 0
original_obj = MyClass()# 调用函数
modify_data(original_num, original_list, original_obj)print(original_num)    # 输出 5(未改变)
print(original_list)   # 输出 [1, 2, 3, 4](已改变)
print(original_obj.value)  # 输出 5(已改变)

案例2

class DataHolder:def __init__(self, data):self.data = data  # data 是可变/不可变对象的引用# 不可变对象操作
holder1 = DataHolder(10)
temp = holder1.data
temp += 5  # 创建新对象,不影响原数据
print(holder1.data)  # 输出 10# 可变对象操作
holder2 = DataHolder([1, 2])
holder2.data.append(3)  # 直接修改原对象
print(holder2.data)     # 输出 [1, 2, 3]

案例3:修改和赋值的本质区别

a = [1, 2]
b = a       # 引用传递(指向同一对象)
b.append(3) # 修改原对象
print(a)    # 输出 [1, 2, 3]c = [4, 5]
d = c
d = [6, 7]  # 创建新对象(重新绑定引用)
d.append(10)
print(c)    # 输出 [4, 5](原对象未变)

注意,这里:
lst = lst + (创建新列表,不影响原对象)
lst.append(4)(原地修改,影响原对象)

案例4:默认参数陷阱

# 错误示例:默认参数为可变对象
def buggy_func(data=[]):  # 默认列表会持续保留data.append(1)return data# 正确做法
def safe_func(data=None):data = data if data is not None else []data.append(1)return data

错误案例的进一步测试:

def func(data=[]):data.append(1)return datafunc()
data = func()
data.append(10)
func()
print(data) # 输出:[1, 1, 10, 1]

4 排列组合 itertools

tee 生成迭代器副本(副本的修改不影响原始数据)
islice 切片
zip_longest 合并多个迭代器

import itertoolsl = [1,2,3,4]
iter1, iter2 = itertools.tee(l, 2)
for x in iter1:
# 
itertools.zip_longest()

5 内置变量/特殊变量

5.1 内置变量

python所有的内置变量:

dir(__builtins__)

__name__
如果当前运行的python文件为主文件,则该文件:
__name__ == __main__
如果当前文件被其他文件调用,则该文件:
__name__ == [文件名](不带.py后缀)
参考文章

5.2 类相关的特殊属性

__slots__
限制class可绑定的类的属性。

__slots__ = ['属性名1','属性名2','属性名3']

定义的属性仅对当前类实例起作用,对继承的子类是不起作用的。
除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__。
__init__
类默认构造函数 ,第一个参入参数为self
__lt__
@property装饰器
将方法变成属性调用。
__str__

6 try-except-else-finally机制

6.1 基础用法

try:with open('example.txt', 'r') as file:content = file.read()print(content)
except FileNotFoundError:print("文件未找到,请检查文件路径是否正确。")
except PermissionError:print("没有权限读取该文件。")
except Exception as e:# 捕获所有其他类型的异常print(f"发生了一个错误:{e}")

try: 放置可能引发异常的代码。‘
except:如果try中的代码引发异常,会跳转到指定的except 块儿中
as: as e是可选的,允许你将异常实例赋值给变量e,这样就可以在except块中访问到异常信息。
Exception :代表不指定异常类型(反之捕获所有异常)

Python会按照except块的顺序检查,一旦找到匹配的异常类型,就会执行该块中的代码,并且跳过后续的except块。

6.2 else-finally

try:# 尝试执行的代码pass
except SomeException:# 处理异常的代码pass
else:# 如果没有异常发生,执行这里的代码pass
finally:# 无论是否发生异常,都执行这里的代码pass

else:如果你想要在没有异常发生时执行一些代码,可以使用else块。它紧跟在所有的except块之后,只有在try块没有引发任何异常时才会执行。
finally:无论是否发生异常,finally块中的代码都会被执行。这通常用于执行一些清理工作,比如关闭文件或释放资源。

6.3 向上一级抛出错误

raise [error]
注意:如果不抛出错误,程序在执行换except后就会退出吗?
当except块内部的操作执行完成后,程序并不会自动退出,除非你在except块中显式地调用了sys.exit()、exit()、os._exit()等函数来终止程序,或者异常没有被捕获并且传播到了程序的顶层(即没有被任何try块捕获)。

7 Threading - 线程(不是进程,创建进程我用的少)

感谢大佬的总结:
https://liaoxuefeng.com/books/python/process-thread/thread/index.html
说实话,之前只用过C thread,没用过python。
这里对大佬的 文章列出一些关键点:
(1)启动一个线程就是把一个函数传入并创建Thread实例,然后==调用start()==开始执行。
(2)在Python中,可以使用多线程,但不要指望能有效利用多核


有一些久远的记忆似乎在逐渐复苏

7.1 讲到线程,就不得不谈线程通信

线程的特点就是,共享资源,任务间需要频繁通信。
线程的关键点就是:通信和同步。
要避免的问题:死锁
(1)互斥锁
(2)信号量
(3)条件变量
(4)事件
(5)消息队列
(6)管道

8 路径操作及路径索引 glob

主要利用glob2库

from glob2 import globpaths = glob(file_path) # 搜索文件file_path下所有文件,返回list变量# 返回该路径下所有文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习Note.4(机器学习实践)

线性回归 零. 1.paddle库的一些API paddle.rand(shape,dtype None, name None) *随机生成符合均匀分布的Tensor paddle.nromal(mean 0.0, std 1.0, shape None, name None) *随机生成符合正态分布的Tensor *输入正态分布均值,标准差, 生成结果的…

UE5学习笔记 FPS游戏制作29 更换武器时更换武器的图标

文章目录 制作物体图标UI添加获取武器图标的方法使用事件分发器,通知UI要换枪定义事件分发器调用事件分发器注册事件分发器 制作物体图标UI 在Fpp-UI上添加一个图片,改名为五weaponIcon,勾选SizeToContent,锚点放在右下角,对齐改…

RCE(自增、取反、异或)

自增: 也就是说,a > b,b > c... 所以,我们只要能拿到一个变量,其值为a,通过自增操作即可获得a-z中所有字符。 无字母数字构造: 所有敏感字符串(ASSERT、_POST)通过自增动态生…

Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)

——国产工具链的崛起与智能汽车测试新范式 引言:新能源汽车测试的国产化突围 随着新能源汽车智能化、网联化程度的提升,研发测试面临三大核心挑战:多协议融合(CAN FD/LIN/以太网)、高实时性数据交互需求、复杂工况下…

【Verilog】实验十 带倒计时交通灯控制电路设计

目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理与实验步骤 1. 实验原理 2. 实验步骤 五、实验思考 代码 TOP.v trafic2_2.v shumaguan.v clk_div.v 一、实验目的 1. 掌握同步有限状态机的设计方法。 2. 采用状态机的设计方法,设计实现带倒…

Linux : System V 共享内存

目录 一 前言 二 共享内存概念 三 共享内存创建 四 查看共享内存 五 共享内存的删除 六 共享内存的关联 七 共享内存去关联 八 共享内存的使用(通信) 九 共享内存的特点 一 前言 共享内存区是最快的IPC形式(进程间通信&#xff1…

创建私人阿里云docker镜像仓库

一.登录阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances 二.创建个人实例 【实例列表】 》【创建个人实例】 》【设置Registry登录密码】 三.创建命名空间 步骤:【个人实例】》【命名空间】》【创建命名空间】 注:一个账号最多可以创建3个命名空…

oracle基础知识视图的定义和应用

1.1 视图的定义 视图(View)是数据库中非常重要的内容,在实际开发中必须学会视图的编写。 用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。视图是可以嵌套的。 视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中…

12-SpringBoot3入门-项目打包和运行

1、打包 1&#xff09;打包插件 pom.xml <!--SpringBoot应用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plu…

【PCIE711-214】基于PCIe总线架构的4路HD-SDI/3G-SDI视频图像模拟源

产品概述 PCIE711-214是一款基于PCIE总线架构的4路SDI视频模拟源。该板卡为标准的PCIE插卡&#xff0c;全高尺寸&#xff0c;适合与PCIE总线的工控机或者服务器&#xff0c;板载协议处理器&#xff0c;可以通过PCIE总线将上位机的YUV 422格式视频数据下发通过SDI接口播放出去&…

PipeWire 音频设计与实现分析一——介绍

PipeWire 是一个基于图的媒体处理引擎&#xff0c;一个可以运行多媒体节点图的媒体服务器&#xff0c;是 Linux 的音频/视频总线&#xff0c;它管理 Linux 系统中&#xff0c;不同应用程序对音频和视频设备的共享访问。它提供了一个本地客户端音频 API&#xff0c;但也提供兼容…

使用卷积神经网络识别MNIST数据集

卷积神经网络 卷积神经网络本质是共享权重稀疏链接的全连接网络 编写步骤 构建一个神经网络&#xff0c;步骤是几乎不变的&#xff0c;大概有以下几步 准备数据集 #更高级的CNN网络 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…

力扣125.验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

CST学习笔记(三)MATLAB与CST联合仿真-远场数据批量导出

CST学习笔记&#xff08;三&#xff09;MATLAB与CST联合仿真-远场数据批量导出 一、直接数据导出 &#xff08;1&#xff09;打开远场&#xff0c;调至笛卡尔坐标系 &#xff08;2&#xff09;然后点击post processing → Import/Export → Plot Data (ASCII) &#xff0c;即…

蓝桥杯---BFS解决FloofFill算法1---图像渲染

文章目录 1.算法简介2.题目概述3.算法原理4.代码分析 1.算法简介 这个算法是关于我们的floodfill的相关的问题&#xff0c;这个算法其实从名字就可以看出来&#xff1a;洪水灌溉&#xff0c;其实这个算法的过程就和他的名字非常相似&#xff0c;下面的这个图就生动的展示了这个…

利用 SSRF 和 Redis 未授权访问进行内网渗透

目录 环境搭建 ​编辑 发现内网存活主机 ​编辑 扫描内网端口 ​编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步骤 2&#xff1a;写入 Webshell&#xf…

ORB-SLAM学习感悟记录

orb特征点的旋转不变性 利用灰度质心法求出的质心后&#xff0c;与形心连线所形成的角度如下图所示&#xff1a; 这里容易对上图进行误解&#xff1a; 为了保证旋转不变性&#xff0c;这里注意ORB-slam是利用这个角度旋转坐标系&#xff0c;以新坐标系为标准从图像中采点进行…

搜索算法------深度优先搜索

1. 介绍 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法通过尽可能深地搜索图的分支来探索解决方案空间&#xff0c;直到达到一个没有分支的点&#xff0c;然后回溯 1.1 原理 选择起始点&#xff1a;从…

4.2 单相机引导机器人放料-仅考虑角度变化

【案例说明】 本案例产品在托盘中,角度变化不大(<15度);抓取没有问题,只是放的穴位只能容许3度的角度偏差,因此需要测量产品的角度。 思路是:机器人抓料后、去固定拍照位拍照(找到与标准照片的角度偏差),机器人在放料的位置上多旋转这个角度偏差,把产品放进去。 …

突发,国行 iPhone 17,支持 eSIM

古人云“无心生大用”&#xff0c;往往你感到绝望的时候&#xff0c;转机就莫名其妙的来了。 根据供应链的最新消息&#xff0c;国行 iPhone 17 Air&#xff0c;有望用上 eSIM。 不仅如此&#xff0c;国产手机厂商&#xff0c;也计划推出类似iPhone 17 Air的超薄机型&#xf…