用ModelArts轻松玩转Python正则表达式和魔法方法

举报
开发者学堂小助 发表于 2021/01/06 11:14:14 2021/01/06
【摘要】 在沙箱实验室中使用AI开发平台ModelArts创建Notebook,并在Notebook编写Python高级编程语言,正则表达式进行文本信息的匹配、多线程执行任务的实现和Python中类的魔法方法的使用。


       相信很多小伙伴体验沙箱实验使用ModelArts中开发工具学习Python(初级)》后,对Python变成语言有了一个基础的认知,掌握了Python基础的语法和使用方式。它的魅力远不止于此,在本文中,我们一起来感受和学习Python变成语言的正则表达式和多线程高级用法,以及神秘的魔法方法。话不多说,进入实验,我们马上体验!

环境准备

       在环境准备中,根据手册提示创建一个用于存放操作数据的对象存储服务OBS:

创建配置:

① 区域:华北-北京四

② 数据冗余存储策略:单AZ存储

③ 桶名称:自定义即可(需要记住此名称以备后续步骤使用)

④ 存储类别:标准存储⑤ 桶策略:私有

⑥ 默认加密:关闭

⑦ 归档数据直读:关闭

Python2.png

(创建对象存储服务OBS)

       创建一个ModelArts Notebook,Notebook创建好后选择conda-python3打开,开始Python的奇妙之旅。

创建配置:

① 计费方式:按需计费

② 名称:任意

③ 自动停止:关闭

④ 工作环境:Python3

⑤ 资源池:公共资源池

⑥ 类型:CPU

⑦ 规格:2核8GiB

⑧ 存储配置:对象存储服务(OBS)

⑨ 存储位置:OBS文件夹

Python3.png

(创建ModelArts Notebook)

Python5.png


多线程体验

       多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。Python的多线程操作跟电脑同时多任务运行,而且不杀后台,这样很多耗时长的任务我们就可以放到后台处理。但是每个现成都需要有一个应用程序来承载,不能够独立的执行任务。运行以下代码,来看看多线程是如何操作的

       运行下方代码,实现Python的多线程:

import threading

from time import sleep,ctime

def work1():

    for i in range(3):

        print("work1正在执行...%d"%i)

        sleep(1)

def work2():

    for i in range(3):

        print("work2正在执行...%d"%i)

        sleep(1)

if __name__ == '__main__':

    print('---开始---:%s'%ctime())

    t1 = threading.Thread(target=work1) # 线程1

    t2 = threading.Thread(target=work2) # 线程2

启动线程

    t1.start()

    t2.start()

sleep(5)

print('---结束---:%s'%ctime())

     运行同步代码,可查看到已经创建2个线程,让他们各自对g_num加1000000次:

import threading

import timeg_num = 0

def test1(num):  

global g_num        # 使用全局变量

for i in range(num):       

mutex.acquire()  # 上锁       

g_num += 1       

mutex.release()  # 解锁   

print("---test1---g_num=d"g_num)

def test2(num): 

global g_num   

for i in range(num):

        mutex.acquire()  # 上锁       

g_num += 1

mutex.release()  # 解锁   

print("---test2---g_num=d"g_num)

创建一个互斥锁

默认是未上锁的状态,可以删除锁后查看资源争夺的结果

mutex = threading.Lock()

创建2个线程,让他们各自对g_num加1000000次

p1 = threading.Thread(target=test1, args=(1000000,))

p1.start()

p2 = threading.Thread(target=test2, args=(1000000,))

p2.start()

等待计算完成time.sleep(5)print("2个线程对同一个全局变量操作之后的最终结果是:s"  g_num)

Python4.png

正则表达式

      正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。re.match 方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。

      运行下方代码,使用re模块进行字符串的匹配

import re

print(re.match('www', 'www.huawei.com').span())  # 在起始位置匹配

print(re.match('com', 'www.huawei.com'))  # 不在起始位置匹配

Python6.png

    返回结果

Python7.png

     运行下方代码,可用re.search 方法扫描整个字符串并返回第一个成功的匹配

import re

line = "Cats are smarter than dogs"

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:

    print("searchObj.group() : ", searchObj.group())

    print("searchObj.group(1) : ", searchObj.group(1))

    print("searchObj.group(2) : ", searchObj.group(2))

else:

    print("Nothing found!!" )

Python8.png

     运行下方代码,一起来感受下Python 的 re 模块,re.sub 方法用于替换字符串中的匹配项:

import re

phone = "2019-0101-000 # 这是一个电话号码"

删除字符串中的 Python注释

num = re.sub(r'#.*$', "", phone)

print("电话号码是: ", num)# 删除非数字(-)的字符串

num = re.sub(r'D', "", phone)

print("电话号码是 : ", num)

Python9.png


魔法方法

       在感受完Python的多线程和正则表达式后,更不能错过这个神奇的东西——魔法方法,所谓魔法方法,是指在Python中,有一些内置好的特定的方法,这些方法在进行特定的操作时会自动被调用,比如_init__:初始化函数,在创建实例对象时,为实例属性赋值使用。不信,我们可以试试运行下方代码,则会返回结果:小狗:dog。

class Dog(object):

    def __init__(self, name):

        self.name = name       

print("小狗:%s"%(self.name))

dog = Dog("dog")

Python0.png

       通过本次实验,可以轻松体验Python编程语言的高级用法,还在等什么?马上进入沙箱实验室,体验沙箱实验《使用ModelArts中开发工具学习Python(高级)》,深入感受正则表达式和魔法方法吧!


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。