python 正则化表达式和泛型函数的使用及异常

9 篇文章 0 订阅
订阅专栏

目录

一、正则表达式

3.1匹配函数

3.2检索和替换

3.3正则表达式对象

 二、常用方法使用

三、泛型函数的使用

四、上下文管理器

五、装饰器

六、异常

6.1抛出和捕获异常


一、正则表达式

正则表达式是一个特殊的字符序列,它帮助检查一个字符串是否与某种模式匹配

python中增加了re 模块,使 Python 语言拥有全部的正则表达式功能

  • re.match():从字符串起始位置匹配,不成功则返回 none。
  • re.search():匹配整个字符串,直到找到一个匹配。
  • re.groups():返回匹配的表达式
  • re.sub():用于替换字符串中的匹配项。
  • re.compile ():用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用
  • re.finditer():在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
  • re.split():匹配的子串将字符串分割后返回列表

(1)特殊字符类及其表示含义

 (2)字符类

 (3)正则表达式模式

模式字符串使用特殊的语法来表示一个正则表达式:

字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。多数字母和数字前加一个反斜杠时会拥有不同的含义标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。反斜杠本身需要使用反斜杠转义(\\)。由于正则表达式通常都包含反斜杠,所以最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 '\\t')匹配相应的特殊字符。

下表列出了正则表达式模式语法中的特殊元素。使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

3.1匹配函数

(1)re.match函数

从字符串的起始位置匹配一个模式,匹配成功,则输出该字符的区间(前闭后开),若不是起始位置匹配成功的话,match() 就返回 none。

re.match(pattern, string, flags=0)   #pattern:匹配的正则表达式;
import re  #导入模块
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配   输出(0,3)
print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配   输出None

使用匹配对象函数来获取匹配表达式:

  •  group(num): 获取对应num下标的元素;
  •  group()  获取所有元素。
  • groups():返回一个所有包含小组字符串的元组,从1到所含的小组号
import re
 
line = "Cats are smarter than dogs"   #定义一个字符串变量
 
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if matchObj:
matchObj:
   print("matchObj.group() : ", matchObj.groups())  #  ('Cats', 'smarter')
   print("matchObj.group() : ", matchObj.group())  #  matchObj.group() :  Cats are smarter than dogs
   print("matchObj.group(1) : ", matchObj.group(1))    #  matchObj.group(1) :  Cats
   print("matchObj.group(2) : ", matchObj.group(2))   #  matchObj.group(2) :  smarter
else:
   print("No match!!")

(2)re.search方法

扫描整个字符串并返回第一个成功的匹配。使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

re.search(pattern, string, flags=0)
import re
print(re.search('www', 'www.runoob.com').span())  #  www所在位置为(0,3)
print(re.search('com', 'www.runoob.com').span())         # com所在位置为(11,14)前闭后开

line = "Cats are smarter than dogs"
 
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if searchObj:
   print("searchObj.group() : ", searchObj.group())  # Cats are smarter than dogs
   print("searchObj.group(1) : ", searchObj.group(1))  # Cats
   print("searchObj.group(2) : ", searchObj.group(2))   # smarter
else:  
   print("Nothing found!!")

(3) re.match与re.search的区别

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到匹配(返回其位置)。

import re  
line = "Cats are smarter than dogs"
 
matchObj = re.match( r'dogs', line, re.M|re.I)  #从字符串开始匹配dog,因为起始值不是dog,所以匹配不成功
if matchObj:
   print("match --> matchObj.group() : ", matchObj.group())
else:
   print("No mtch!!")   # 执行此条语句
 
matchObj = re.search( r'dogs', line, re.M|re.I)   #遍历整个字符串匹配dogs,可以匹配成功
if matchObj:
   print("search --> searchObj.group() : ", matchObj.group())  #执行此语句,输出dogs(具体输出参考matchobj)
else: 
   print("No match!!")

3.2检索和替换

(1)re 模块提供了re.sub用于替换字符串中的匹配项。

re.sub(pattern, repl, string, count=0, flags=0)
  • pattern : 正则中的模式字符串
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
import re
 
phone = "2004-959-559 # 这是一个国外电话号码"
 
# 删除字符串中的 Python注释 
num = re.sub(r'#.*$', "", phone) 
print("电话号码是: ", num)  #电话号码是:  2004-959-559
 
# 删除非数字(-)的字符串 
num = re.sub(r'\D', "", phone)
print("电话号码是 : ", num)  #电话号码是 :  2004959559

(2)re.compile 函数

用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和 # 后面的注释

 在上面,当匹配成功时返回一个 Match 对象,其中:

  • group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0)
  • start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
  • end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
  • span([group]) 方法返回 (start(group), end(group))

(3)findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表;若有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意!!! match 和 search 是匹配一次, findall 匹配所有。

findall(string[, pos[, endpos]])
  • string : 待匹配的字符串。
  • pos : 可选参数,指定字符串的起始位置,默认为 0。
  • endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
import re
 
pattern = re.compile(r'\d+')   # 只查找数字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
 
print(result1)
print(result2)

多个匹配模式:

result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)  # 输出  [('width', '20'), ('height', '10')]

3.3正则表达式对象

re.compile() 返回 RegexObject 对象。

group() 返回被 RE 匹配的字符串。

  • start() 返回匹配开始的位置
  • end() 返回匹配结束的位置
  • span() 返回一个元组包含匹配 (开始,结束) 的位置

 二、常用方法使用

import re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配(0,3)
print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配none


#------查找字符串中的所有数字--------# 
pattern = re.compile(r'\d+')   # 查找数字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
print(result1)   # ['123', '456']
print(result2)   #['88', '12']


#------#多个匹配模式,返回元组列表--------# 
result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)    #[('width', '20'), ('height', '10')]

1.正则查找网址

import re

str1 = input()
result = re.match("https://www",str1)
print(result.span())    ##输出返回结果的范围
# print(re.match('https://www', str1).span())  #输出网址从开头匹配到第一位不匹配的范围。

2.map()函数:

from collections.abc import Iterator   #导入迭代器

map_obj = map(lambda x: x*2, [1,2,3,4,5])
print(isinstance(map_obj,Iterator))  #True
print(list(map_obj))      #[2, 4, 6, 8, 10]   
 
def square(x):   #定义一个函数square()
    v = x**2
    print(v)
    
print(list(map(square, [1,2,3,4,5]))) 

3.filter()函数:

filter_obj = filter(lambda x: x > 5,range(0,10))
print(list(filter_obj))

4.isinstance() :可以确定一个对象是否是某个特定类型或定制类的实例。

print(isinstance("hello world",str))   #True
print(isinstance(10,int))    #True
print(isinstance(10.0,float))   #True
print(isinstance(5,float))     #False

5.hasattr(obj,attribute):判断目标对象obj是否包含属性attribute

aa = hasattr(json,"dumps")
print(aa)   ##True

bb = getattr(json,"__path__")   #获取属性__path__的值
print(bb)  # ['D:\\Anacoda3\\lib\\json']

6.callable():确定一个对象是否是可调用的(如函数,类这些对象都是可以调用的对象。)

print(callable("hello python"))   #False
print(callable(list))   #True

7.模块

print(json.__doc__)  #查询模块json的文档,它输出的内容和 help() 一样
print(json.__name__)  #查询模块json的名字
print(json.__file__)  #查询模块json的文件路径。若内建的模块没有这个属性,访问它会抛出异常!
print(json.__dict__)  #查询模块json的字典类型对象

三、泛型函数的使用

泛型: Python 中叫 singledispatch:根据传入参数类型的不同调用不同的函数

from functools import singledispatch

@singledispatch
def age(obj):
    print('请传入合法类型的参数!')

@age.register(int)
def _(age):
    print('我已经{}岁了。'.format(age))

@age.register(str)
def _(age):
    print('I am {} years old.'.format(age))


age(23)  # int  我已经23岁了。
age('twenty three')  # str    I am twenty three years old.
age(['23'])  # list    请传入合法类型的参数!

(1)函数的拼接 

from functools import singledispatch

def check_type(func):   #通用的拼接函数
    def wrapper(*args):
        arg1, arg2 = args[:2]
        if type(arg1) != type(arg2):
            return '【错误】:参数类型不同,无法拼接!!'
        return func(*args)
    return wrapper

@singledispatch
def add(obj, new_obj):
    raise TypeError

@add.register(str)
@check_type
def _(obj, new_obj):
    obj += new_obj    #字符串拼接
    return obj

@add.register(list)
@check_type
def _(obj, new_obj):
    obj.extend(new_obj)   #列表拼接
    return obj

@add.register(dict)
@check_type
def _(obj, new_obj):
    obj.update(new_obj)  #字典拼接
    return obj

@add.register(tuple)
@check_type
def _(obj, new_obj):
    return (*obj, *new_obj)   #元组拼接

print(add('hello',', world'))    #hello, world
print(add([1,2,3], [4,5,6]))         #[1, 2, 3, 4, 5, 6]
print(add({'name': 'wangbm'}, {'age':25}))    #{'name': 'wangbm', 'age': 25}
print(add(('apple', 'huawei'), ('vivo', 'oppo')))   #('apple', 'huawei', 'vivo', 'oppo')

#list 和 字符串 无法拼接(不同类型无法拼接)
print(add([1,2,3], '4,5,6'))  # 输出:【错误】:参数类型不同,无法拼接!!

四、上下文管理器

上下文管理器的好处:提高代码的复用率、优雅度、可读性;

(1)读取文件内容

file = open("C:\\Users\HY\\Desktop\\Autotest\\1.txt")
print(file.readline())  #读取首行
print(file.read())   #读取文件全部内容
file.close()    #手动关闭文件句柄

(2)使用with关键字读取文件,读取结束后可自动关闭文件句柄(with即是上下文管理器

  • 上下文表达式:with open('test.txt') as file:
  • 上下文管理器:open('test.txt')
  • file 是资源对象
with open("C:\\Users\HY\\Desktop\\Autotest\\1.txt") as file:
    print(file.read())

(3)在类里实现一个上下文管理器:也即是在类里定义:__enter__和__exit__方法,这个类的实例也即是上下文管理器

class Resource():
    def __enter__(self):
        print("-----connect to resource-----")
        return self
    
    def __exit__(self,exc_type,exc_val,exc_tb):
        print("-----close resource connection------")
        
    def func(self):
        print("----执行函数内部的逻辑")
    
with Resource() as result:
    result.func()

#输出:
# -----connect to resource-----
# ----执行函数内部的逻辑
# -----close resource connection------

在 写__exit__ 函数时,需要注意的事,它必须要有这三个参数:

  • exc_type:异常类型

  • exc_val:异常值

  • exc_tb:异常的错误栈信息

当主逻辑代码没有报异常时,这三个参数将都为None。

(4)使用 contextlib构建一个上下文管理器(通过一个函数来实现上下文管理器,而不用一个类)

python中,contextlib 的协议实现了一个打开文件(with open)的上下文管理器。

import contextlib

@contextlib.contextmanager
def open_func(file_name):
    
# __enter__方法
    print("open file:",file_name,"in__enter__")
    file_handler = open(file_name,"r")   #打开文件
    
    yield file_handler    #生成器(带有yield)
    
# __exit__方法
    print("close file:",file_name,"in__exit")
    file_handler.close()   #关闭句柄
    return

with open_func("C:\\Users\HY\\Desktop\\Autotest\\1.txt") as file_in: 
    for line in file_in:
        print(line)

上面这段代码只能实现上下文管理器的第一个目的(管理资源),并不能实现第二个目的(处理异常)如果要处理异常,可以改成:

import contextlib

@contextlib.contextmanager
def open_func(file_name):
    
# __enter__方法
    print("open file:",file_name,"in__enter__")
    file_handler = open(file_name,"r")   #读取文件
    
    try:
        yield file_handler    #生成器(带有yield)
    except Exception as exc:
        print("the exception was thrown")
    finally:   
        print("close file:",file_name,"in__exit")     # __exit__方法
        file_handler.close()   #关闭句柄
        return

with open_func("C:\\Users\HY\\Desktop\\Autotest\\1.txt") as file_in: 
    for line in file_in:
        1/0
        print(line)

五、装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

常用于有切面需求的场景:如插入日志、性能测试、事务处理、缓存、权限校验等场景。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

装饰器的使用方法:

  • 先定义一个装饰器decorator(帽子)

  • 再定义你的业务函数或者类(人)wrapper

  • 最后把这装饰器(帽子)扣在这个函数(人)头上

#=================装饰器的使用==========================
# 定义装饰器
def decorator(func):
    def wrapper(*args,**kw):
         return func()
    return wrapper

# 定义业务函数并进行装饰
@decorator
def function():
    print("hello world")

(1)普通装饰器

#=================普通装饰器的使用==========================
#定义装饰器函数,logger是装饰器,参数func是被装饰的函数

def logger(func):
    def wrapper(*args,**kw):
        print('开始执行{}函数:'.format(func.__name__))   #
        
        #函数逻辑体:真正需要执行的逻辑
        func(*args,**kw)
        
        print('执行完毕')
    return wrapper
        
#写函数,具体功能
@logger
def add(x,y):
    print(f"{x}+{y}={x+y}")  #两种输出都可
    print("{}+{}={}".format(x,y,x+y))

add(20,30)

六、异常

异常:导致程序在运行过程中出现异常中断和退出的错误。正常情况下,异常都不会被程序处理,而是以错误信息的形式展现出来。所有异常都是异常类,首字母是大写的!

  • SyntaxError:语法错误
  • TypeError:类型错误,也就是说将某个操作或功能应用于不合适类型的对象时引发,比如整型与字符型进行加减法
  • IndexError:索引出现了错误,比如最常见下标索引超出了序列边界
  • KeyError:关键字错误,主要发生在字典中,比如当用户试图访问一个字典中不存在的键时会被引发。
  • ValueError:传入一个调用者不期望的值时引发,即使这个值的类型是正确的,比如想获取一个列表中某个不存在值的索引。
  • AttributeError:属性错误,试图访问一个对象不存在的属性时引发。(如字典有get方法,列表没有,若列表对象调用get方法就会引发该异常。)
  • NameError:变量名称发生错误,如用户试图调用一个未被赋值或初始化的变量时被触发。
  • IOError:打开文件错误,当用户试图以读取方式打开一个不存在的文件时引发。
  • StopIteration:迭代器错误,当访问至迭代器最后一个值时仍然继续访问,就会引发这种异常,提醒用户迭代器中已经没有值可供访问了
  • AssertionError:断言错误,当用户利用断言语句检测异常时,如果断言语句检测的表达式为假,则会引发这种异常。
  • IndentationError:缩进异常
  • ImportError:导包过程中出现的错误,包名错误或者路径不对、包未安装,抛出 ImportError

6.1抛出和捕获异常

异常处理工作包括:抛出、捕获。

捕获指的是使用try....except包裹特定语句,而raise则是主动抛出异常

(1)抛出异常

异常产生有两种来源:

  • 程序自动抛出:如 1/0 会自动抛出 ZeroDivisionError

  • 开发者主动抛出:使用 raise 关键字抛出。

def demo_func(filename):
    if not os.path.isfile(filename):
        raise Exception       #raise抛出异常

(2)捕获异常

异常的捕获的语法有如下四种:

#====================只捕捉,不获取异常信息===================#
try:
    代码A
except [EXCEPTION]:
    代码B

#=========捕捉了,还要获取异常信息,赋值给 e 后,把异常信息打印到日志中。================#
try:
    代码A
except [EXCEPTION] as e:
    代码B

#==================代码A发生了异常,则会走到代码B的逻辑=======================#
try:
    代码A
except [exception] as e :
    代码B

#============代码A发生了异常,则走到代码B的逻辑,如果没有发生异常,则会走到代码C=============#
try:
    代码A
except [exception] as e:
    代码B
else:
    代码C

#============代码A发生了异常,则走到代码B的逻辑,最后不管有没有异常都会执行代码C=============#
try:
    代码A
except [exception] as e:
    代码B
finally:
    代码C

(3)捕获多个异常:except可以捕获一个或者多个异常

        1)每个except捕获一个异常

一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序,但是最多会执行一个处理程序。

try:
    1/0     #此处抛出异常,因为除数不能为0
except IOError:
    print("IO读写出错")
except FloatingPointError:
    # 浮点计算错误
    print("计算错误")
except ZeroDivisionError:   #因此这里捕捉到异常,执行这部分的代码,其余异常代码不执行
    # 除数不能为 0
    print("计算错误")    #最后输出为:计算错误

        2)一个except捕获多个异常

except 后面可以接多个异常的,多个异常之间使用括号包裹。只要匹配上一个就算捕获到,就会进入相应的代码分支。

try:
    1/0
except IOError:
    print("IO读写出错")
except (ZeroDivisionError, FloatingPointError):    #此处捕获到异常
    print("计算出错")

(4)自定义异常

自定义异常应该继承 Exception 类,直接继承或者间接继承都可

自定义的异常或错误类,下面使用 InputError (异常的名字都以Error结尾,我们在为自定义异常命名的时候也需要遵守这一规范,就跟标准的异常命名一样),表示接受用户输入时发生问题。

class InputError(Exception):
    def __init__(self, msg):
        self.message = msg

    def __str__(self):
        return self.message

def get_input():
    name = input("请输入你的姓名:")
    if name == '':
        raise InputError("未输入内容")
    
try:
    get_input()  
except InputError as e:
    print(e)

(5)如何关闭异常自动关联上下文

如果在异常处理程序或 finally 块中引发异常,默认情况下,异常机制会隐式工作会将先前的异常附加为新异常的 __context__属性。这就是 Python 默认开启的自动关联异常上下文。

若想控制这个上下文,可以加个 from 关键字(from 语法会有个限制,就是第二个表达式必须是另一个异常类或实例。),来表明你的新异常是直接由哪个异常引起的

try:
    print(1/0)    #抛出异常
except Exception as exc:
    raise RuntimeError("Something bad happened") from exc   #执行此语句抛出RuntimeError同时抛出1/0产生的ZeroDivisionError异常

也可以通过with_traceback()方法为异常设置上下文__context__属性,这也能在traceback更好的显示异常信息。

try:
    print(1 / 0)
except Exception as exc:
    raise RuntimeError("bad thing").with_traceback(exc)

总结:

  • 只捕获可能会抛出异常的语句,避免含糊的捕获逻辑

  • 保持模块异常类的抽象一致性,必要时对底层异常类进行包装

  • 使用“上下文管理器”可以简化重复的异常处理逻辑

python3内置re模块操作正则表达式
蛐蛐的博客
07-27 369
1.match re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回no re.match(pattern, string, flags=0) pattern:需要匹配的正则表达式,默认从字符串开头匹配,如果包含匹配组,则从字符串中提取匹配组 string:需要匹配的字符串 flags:匹配的标志位,是否区分大小写,多行匹配 1.1 默认从字符串开头匹配 import re print(re.match('www', 'www.ru.
你需要知道的 Python 3.10 和 Python 3.9 之间的差异
weixin_73136678的博客
12-12 3020
在过去的几十年里,Python 在编程或脚本语言领域为自己创造了一个名字。python 受到高度青睐的主要原因是其极端的用户友好性。Python 还用于处理复杂的程序或编码挑战。机器学习 (ML)、人工智能 (AI) 和数据科学等新兴领域也满足了学习这种语言的高需求。与 Java、C# 和其他语言等传统语言相比,Python 是一种强大的编程语言,迅速成为开发人员、数据科学家和 AI/ML 爱好者的最爱。Python 作为一种编程语言,有许多用例吸引了 IT 行业的学习者和专家。
白学这么多年 Python ?连泛型函数都不会写?
王炳明
10-11 6767
泛型,如果你尝过java,应该对他不陌生吧。但你可能不知道在 Python 中(3.4+ ),也可以实现 简单的泛型函数。 在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式,官方名称 是 single-dispatch。你或许听不懂,说人话,就是可以实现第一个参数的数据类型不同,其调用的函数也就不同。 singledispatch 是 PEP443 中引入的,如果你对此有兴趣,PEP443 应该是最好的学习文档:https://www.python.org/dev/peps/pe
Python 正则表达式
最新发布
2201_75479454的博客
09-15 1314
正则表达式是一种用于描述字符串匹配规则的表达式。它由普通字符和元字符(特殊字符)组成,通过这些字符的组合,可以构建出具有强大匹配能力的规则。正则表达式在处理文本时能够实现高度灵活的模式匹配,从而满足不同场景下的需求。
python基础-单分派泛函数singledispatch
全干工程师
03-31 7949
函数使用 对象中使用 singledispatch是标准库functools模块的函数 可以把整体方案拆成多个模块,甚至可以为你无法修改的类提供专门的函数使用@singledispatch装饰的函数会变成泛函数 1、singledispatch:标记处理object类型的基函数 2、各个专门函数使用@<<base_function>>.r...
Python中re(正则表达式)模块函数学习 分类: python ...
weixin_30725467的博客
05-22 2043
今天学习了Python中有关正则表达式的知识。关于正则表达式的语法,不作过多解释,网上有许多学习的资料。这里主要介绍Python中常用的正则表达式处理函数。 方法/属性 作用 match() 决定 RE 是否在字符串刚开始的位置匹配 search() 扫描字符串,找到这个 RE 匹配的位置 findall() 找到 RE 匹配的所...
python 成员函数 泛型函数_关于python中的泛型函数python中的泛型函数 – 调用具有未知数量参数的方法...
weixin_39625747的博客
03-01 322
我对python不熟悉,需要帮助…我正在实现一个通用搜索函数,它接受一个参数"边缘",它可以是多种类型的数据结构。在搜索方法中,我有一行:fringe.push(item, priority)问题是不同数据结构中的push方法采用不同数量的参数(有些需要优先级,有些不需要)。是否有一种Ellegant方法来传递该参数并使"push"方法只从发送的参数列表中获取所需的参数数量?谢谢!获取不同数量的参...
9 Java数据结构(上):包装类、数组(Array工具类)、lambda表达式、ArrayList、泛型
smalltorch的博客
08-22 738
本节会总结Java中各种数据结构里面的使用方法,包括之前的学过的数组、ArrayList、还包括链表、哈希表、树等数据结构一起其中的高级实用API。本博客会详细记录各种用法,作为个人的查询文档。在学习这些数据结构前,前面有必要先来好好学习一下包装类,由于Java基本数据类型(可变)大部分集合都是不允许放进去的,我们必须要放其对应的包装类(不可变)才被允许放进去,所以学习这些集合第一关就是对应的包装类。
python定义定长数组_python 初始化一个定长的数组实例
weixin_39881575的博客
12-05 7368
python 初始化一个定长的数组实例​# 有时候我们提前知道了一个数组的大小,需要给每个元素赋值,此时append好像不管用。我们需要定义一个定# # 长的数组,python中代码如下:b = [0 for _ in range(10)] #也可以b = [0]*10for i in range(10):pass # 赋值语句以上这篇python 初始化一个定长的数组实例就是小编分享给大家的全部...
Python 基础教程】错误与异常的处理_python自己定义syntaxerror
2401_84520093的博客
04-21 801
继续更新Python基础语法,到目前为止Python基础语法已经接近了尾声,本次错误与异常处理更新完后会对文件、数据库、包管理、模块管理、正则表达式使用进行更新。完成这几个大致的任务之后将会更新爬虫与数据分析。本专栏所写的东西非常的适用初学者,当然也非常适合老手,每一部分都有很全面的编程技巧。相信大家看完后会感觉受益匪浅。(文末附有常见异常表)
Python 3.9.2标准库详细指南:函数、常量与内置类型详解
- 上下文管理器(context manager)在资源管理和异常处理中扮演重要角色,例如with语句的使用。 - GenericAliasType和StandardGenericCollections涉及到泛型编程的概念,展示了Python在处理不同类型数据时的灵活...
python泛型
weixin_54279427的博客
07-26 1503
指定类型的时候用list、set、dict、tuple也是可以的,但是不能指定里面的元素类型。当你传入参数与设置的参数类型不一样时,只会warning,而不会报错。Tuple[T]指定一个类型的时候,仅针对同一个索引下的元素类型。如果想向List[T]一样指定全部的类型,可以Tuple[T,…Dict[T,T]第一个参数指定键的类型,第二个参数指定值得类型。Union[int,str]表示既可以是int,也可以是str。且List[T]、Set[T]只能传一个类型,传多个会报错。...
python正则化函数,python正则常用函数
weixin_30387635的博客
03-26 363
1. compile 编译后执行速度更快,findall 返回匹配列表>>> import re>>> r=r'a[bcd]e'>>> p=re.compile(r)>>> print p.findall('abe,ace,ade,afe')['abe', 'ace', 'ade']>>> print re....
python 成员函数 泛型函数_PEP 443 单分派泛型函数 -- Python官方文档译文 [原创]
weixin_39983912的博客
12-11 170
用户 API(User API)若要定义泛型函数,请用 @singledispatch 装饰器进行装饰。注意分派将针对第一个参数的类型进行。创建函数的过程应如下所示:>>> from functools import singledispatch>>> @singledispatch... def fun(arg, verbose=False):... ...
Python中的泛型编程
03-08 2070
泛型编程的引入主要是为了解决代码重用的问题。在没有泛型的情况下,如果你想要实现一个功能(比如排序或查找),对于不同类型的数据(整数、浮点数、字符串等)你可能需要写多个几乎相同的函数。这不仅增加了代码量,也增加了维护成本和出错的机会。泛型编程允许你编写与类型无关的代码,从而使得一个函数或一个类可以用于多种类型,减少了代码的重复,提高了代码的复用性和可维护性。
python机器学习】——正则化
m17635262186的博客
05-06 1628
本文介绍了正则化 基本概念及常见的L1与L2范数是什么,后续将继续介绍机器学习相关内容,下一节介绍Lasso回归、Ridge回归、多项式回归及保险花销预测实战案例。
python 成员函数 泛型函数_python – 从泛型函数定义函数列表
weixin_39610807的博客
12-11 174
说我有一个功能def my_meta_function (a, b, c):pass我想定义一个函数数组myfunctions = [f1,f2,f3,… f100],其中参数c固定为每个这样的函数的不同值,例如: c = [1,2,3,.. 100],函数只接受参数a和b.在实践中,我正在考虑的论点更复杂,但我试图理解如何在语言中这样做.>这种类型的元编程有名字吗?>装饰者是否适合这...
入门 python 正则化表达式
THE XING
11-11 1556
以前一直没看,觉得复杂,当下稍微闲了一点,恰小雨,学性大发,记之。 正则表达式通俗说就是与字符串打交道,所以我们得知道除了平常说的“普通字符”外,还有“元字符”。元字符的字典很多,比如http://www.runoob.com/regexp/regexp-metachar.html。 看着很复杂,其实也是用到的时候再找。 1.导入 re In [3]: import re 这个是py...
python-正则化RE
GHOUOOOL的博客
03-18 806
RE使用大致步骤 1.使用compile将表示正则的字符串编译为一个pattern对象 2.通过pattern对象提供一系列方法对文本进行查找匹配,找到匹配结果,一个Match对象3. 3.最后使用Match对象提供的属性和方法获取信息,根据需要进行操作 Re常用函数 group():获得一个或多个分组匹配的字符串,当要获取整个匹配的子串时,直接使用group或者group(0) star...
python泛型函数
03-22
在上面的示例中,我们使用`TypeVar`定义了一个泛型类型变量`T`,然后在函数参数和返回值上使用了这个泛型类型变量。这样,我们就可以在函数内部使用`item`参数的类型,而不需要事先指定具体的类型。 需要注意的是,...
写文章

热门文章

  • HTML初识——网页设计html基础 5549
  • 软件测试——selenium环境搭建及相关语法和使用 3942
  • 软件测试——测试用例 3495
  • 【python】函数和模块 2516
  • 自动化测试——unittest框架(单元测试) 2356

分类专栏

  • 软件测试 5篇
  • JAVAWeb 10篇
  • python 9篇
  • 每日练习 4篇
  • 算法 4篇
  • HTML 2篇
  • MySQL数据库
  • 数据结构 10篇

最新评论

  • 【javaEE】——synchronized使用和单例模式(线程安全)03

    新手学习录: 是的,我这一块写的有问题,我去改一改,感谢指正表情包

  • 【javaEE】——synchronized使用和单例模式(线程安全)03

    sheclockes: 引用「synchronized可保证原子性和可见性和禁止指令重排序」 synchronized是不能禁止指令重排的吧?只是保证同步块之间串行执行。

  • 【javaEE】——synchronized使用和单例模式(线程安全)03

    sheclockes: 引用「volatile只能保证可见性」 volatile不是可以禁止指令重排吗?

最新文章

  • Python3一些常用的SSH连接_paramiko使用
  • 操作系统的了解及安装
  • GDB调试——用gdb查看coredump
2024年7篇
2023年6篇
2022年44篇
2021年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家萍乡环保玻璃钢雕塑优势许昌玻璃钢雕塑哪家好玻璃钢 雕塑 维修玻璃钢小品雕塑工程贵阳玻璃钢雕塑制作厂家盐城商场国庆美陈雕塑制作玻璃钢玻璃钢人物雕塑厂家报价四川主题商场美陈订购四川玻璃钢孔雀雕塑东营玻璃钢卡通动物雕塑价格遵义商场美陈报价鼓楼商场秋季美陈小品系列玻璃钢雕塑公司鹤岗玻璃钢雕塑生产厂家惠州玻璃钢雕塑摆件仿真石玻璃钢雕塑深圳欧式玻璃钢人物雕塑玻璃钢铜像雕塑益阳玻璃钢南瓜屋雕塑玻璃钢生蚝雕塑商场生动化美陈宁德玻璃钢牌匾雕塑深圳 玻璃钢雕塑中卫园林玻璃钢雕塑海淀区商场美陈效果图安徽玻璃钢卡通雕塑价格玻璃钢雕塑招标户外玻璃钢卡通雕塑天津玻璃钢园林雕塑厂家直销香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化