利用ModelArts的开发工具Notebook来学习Python|【玩转华为云】

举报
真爱无敌 发表于 2022/01/06 15:12:38 2022/01/06
【摘要】 一、前言作为开发者来讲,对于Python应该都不陌生,似乎从编程语言的热门度和受欢迎程度来看,Python还一直名列前茅。Python语言有很多的优势和特点,这个在各大技术网站上都能够检索到,在此就不一一展开。作为一个刚入门Python的开发者来说,如何快速的了解Python的语法以及如何进行入门体验,这点是最最基础的,今天就借用华为云ModelArts开发平台的notebook工具来进行p...

一、前言

作为开发者来讲,对于Python应该都不陌生,似乎从编程语言的热门度和受欢迎程度来看,Python还一直名列前茅。

Python语言有很多的优势和特点,这个在各大技术网站上都能够检索到,在此就不一一展开。

作为一个刚入门Python的开发者来说,如何快速的了解Python的语法以及如何进行入门体验,这点是最最基础的,今天就借用华为云ModelArts开发平台的notebook工具来进行python基础语法的学习。


二、华为云ModelArts介绍

说到华为云ModelArts,在这里简单进行一个介绍:

ModelArts 是面向开发者的一站式 AI 开发平台,为机器学习与深度学习提供海量数据预处理及交互式智能标注、大规模分布式训练、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。

ModelArts有一下几个特点:

1)低门槛:开箱即用,零基础3步即可构建AI模型

2)高效率:AI开发全流程可视化管理,生产效率百倍提升

3)高性能:华为自研MoXing框架,极致提升开发效率和训练速度

4)易运维:灵活支持多厂商多框架多功能模型统一纳管


下图是ModelArts的能力模型:


三、Python入门

Python是一门解释型、面向对象、带有动态语义的高级程序设计语言。

接下来我们就以ModelArts平台来进行Python基础的学习

3.1 准备基础数据

登录华为云平台,点击“控制台”->“服务列表”-> 选择“存储”的“对象存储服务 OBS”,进入对象存储页面后,右上角点击“创建桶”。

参数:

①复制桶配置:不选

②区域:华北-北京四

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

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

⑤ 存储类别:标准存储

⑥桶策略:私有

⑦ 默认加密:关闭

⑧归档数据直读:关闭

点击右下角“立即创建”,如下图所示:

这里有几个注意事项:

1)对象存储的区域在实际使用过程中尽量选择跟业务所在区域一直,以减少网络延迟

2)桶名称不能重复

3)存储策略一旦选择就不可修改(本次考虑是学习用,因此选择“单AZ存储”)

创建完成回到对象存储服务列表,点击刚刚创建的OBS桶名称进入详情页,选择左侧“对象”->“新建文件夹”(存放后续步骤的数据文件)。

文件夹名称:data;

点击“确定”,如下图:

3.2 创建ModelArts Notebook

点击此链接:https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/create_v2,开始创建notebook。

进入Notebook创建页面。

参数:

① 计费方式:按需计费

② 名称:任意

③ 自动停止:关闭

④ 工作环境:Multi-Engine 1.0 Python3

⑤ 资源池:公共资源池

⑥ 类型:CPU

⑦ 规格:2核8GiB

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

⑨ 存储位置:如下图(选择已创建的OBS及文件夹)

参数填写完毕后,点击“下一步”,查看Notebook实例预览信息,确认无误后点击“提交”。

创建任务提交成功,点击页面的“返回Notebook列表”,返回Notebook列表页,等待Notebook创建成功,创建成功后状态会变成“运行中”,如下图所示:

3.3 创建Notebook Python开发环境

点击“打开”按钮进入Notebook。点击“New” ->”TensorFlow-1.8”创建 Notebook Python开发环境。如下图所示:

重命名刚刚创建的Notebook Python开发环境。点击“Untitled”,名称为:python-basics,然后点击“Rename”按钮,如下图所示:

打印一行字符串,按Shift+Enter(该组合键是Notebook中执行代码的快捷键)或者点击下图“Run”

print("hello notebook!")

查看代码执行结果,代码执行成功,点击保存按钮。如下图所示:

3.4 Python代码实操

执行以下代码观察程序执行顺序。

print("上")
print("中")
print("下")

结果如下图所示:

执行以下代码了解Python基础语法:

# 导入工具包
import sys   # 导入sys模块
print(sys.platform)  # 打印系统平台
# 多行注释
"""
这是多行注释
.....
"""
# 多行语句写在一起
print("语句1");print("语句2")

执行结果如下图所示:

执行以下代码了解Python标识符。

# 查看关键字
import keyword
keyword.kwlist

执行结果如下图所示:

执行以下代码了解Python变量命名:

Name = "张三"
print(Name)

不可以使用关键字作为变量名称,执行以下代码出现语法错误。

if = "张三" # 使用关键字作为变量名
print(if)

输出结果如下图所示:

变量名不可以以数字开头,执行以下代码出现语法错误。

0Name = "张三" # 变量名以数字开头
print(0Name)

输出结果如下图所示:

变量名中含有特殊字符,执行以下代码出现语法错误。

Name$ = "张三" # 变量名中含有特殊字符
print(Name$)

输出结果如下图所示:

基础函数使用,执行以下代码输入任意后回车:

s = input("请输入:")
print(s)
print(type(s))

输出结果如下图所示:

dir函数查看函数方法和属性,执行以下代码:

dir(print)

输出结果如下图所示:

help函数可以查看函数详细信息,执行以下代码:

help(print)

输出结果如下图所示:

3.5 Python编程基础

3.5.1 数据类型:数值

熟悉Python中数值的基本运算。注意,Python中的“与或非”布尔操作不是使用操作符,而是使用关键词 and/or/not。

print(True+False)   # 输出1,True默认为1,False为0   
print(True or False)  # 输出True,关键字or执行“或”操作
print(5//2)   # 输出2,//为取整运算符 
print(5%2)   # 输出1,为取余运算符  
print(3**2)  # 输出9,**表示乘方操作 
print(5+1.6)   # 输出6.6,不同精度的类型的数字相加默认取高精度类型作为结果

代码执行成功,点击保存按钮,输出结果如下:


3.5.2 数据类型:字符串

1)字符串的基本操作。

S = 'python'   # 给变量S赋值 python
# len(obj): 返回对象的长度
print(len(S))   # 输出6 
print(S[0],S[1],S[-1])    # 输出pyn ,按照索引获取元素
print(S+'1',S*2)   # 输出python1 pythonpython:合并和重复

执行结果如下图所示:

2)字符串的不可变性。

S = 'python'								# 变量赋值
S[0] = 'Z' 								# 程序异常
S1 ='Z'+S[1:]								# 生成了新的字符串 zython,并赋值给S1
print("S:%s,S1:%s"%(S,S1))				# 输出S:python,S1:zython

执行结果:

代码执行出现异常,注释错误代码(代码前加“#”注释),执行成功如下图所示:

3)字符串的常用操作。

S = "python"								# 变量赋值
# str.split(str="", num=-1):通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,-1表示分割所有。
print(S.split('h'))						# 输出[‘pyt’,‘on’],根据h对字符串切割# str.replace(old, new[, max]):返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
print(S.replace('py','PY'))				# Python,将字符串中的py替换为PY# str.upper():返回小写字符转化为大写后的值。
print(S.upper())							# PYTHON# str.lower():返回大写字符转化为小写后的值。
print('PYTHON'.lower())					# python,字符串转小写
line='aa,bb,ccc,ddn'						# n 为换行# str.join(sequence):sequence:要连接的序列,返回指定字符连接序列中元素后生成的新字符串。
print(''.join(['life', 'is' ,'short']))	# 输出life is short,join拼接字符串
hw12='%s %s %d' % ('hello','world',12) 	# 格式化字符串
print(hw12)								# 输出hello world 12

3.5.3 数据类型:列表

animals = ['cat', 'dog', 'monkey']
# list.append(obj):在列表末尾添加新的对象。
animals.append('fish')			# 追加元素
print(animals)					# 输出 ['cat', 'dog', 'monkey', ‘fish’]
# list.remove(obj):移除列表中某个值的第一个匹配项。
animals.remove('fish')			# 删除元素fish
print(animals)					# 输出 ['cat', 'dog', 'monkey']
# list.insert(index, obj):用于将指定对象插入列表的指定位置。index:插入位置
animals.insert(1,'fish')			# 在下标1的地方插入元素fish
print(animals)					# 输出 ['cat', 'fish', 'dog', 'monkey']
# list.pop([index=-1]):要移除列表中对下标对应的元素(默认是最后一个)。Index:下标
animals.pop(1)					# 删除下标为1的元素
print(animals)					# 输出 ['cat', 'dog', 'monkey']
#遍历并获取元素和对应索引  
# enumerate(sequence) :将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
for i in enumerate(animals): 
    print(i)						# 元素下标和元素所组成的索引
#输出:(0, cat)
#	   (1, dog)
#	   (2, monkey)
#列表推导式
squares = [x*2 for x in animals]	# 批量生成符合规则的元素组成的列表
print(squares)					#['catcat ', 'dogdog ', 'monkeymonkey ']
list1 = [12,45,32,55]
# list.sort(cmp=None, key=None, reverse=False):cmp为可选参数, 如果指定了该参数,会使用该参数的方法进行排序。key是用来进行比较的元素。reverse为排序规则,False为升序。
list1.sort()						# 对列表进行排序
print(list1)						# 输出[12,32,45,55]
# list.reverse():反向列表中元素。
list1.reverse()					# 对列表进行逆置
print(list1)						# 输出[55,45,32,12]

执行结果:


3.5.4 数据类型:元组

元组的常用操作。

T=(1,2,3)	 						#创建元组
print(T+(4,5)) 					#元组合并,输出:(1, 2, 3, 4, 5)
t=(42,) 							#只有一个元素的元组,区别于数字
tuple1 = (12,45,32,55,[1,0,3])	# 创建元祖
tuple1[0] = "good"				# 程序异常,元组的不可变性
tuple1[4][0] = 2					# 元组中可变的元素是可以变的
print(tuple1)						# (12,45,32,55,[2,0,3])

执行结果,出现异常:

注释掉异常代码,再次执行:


3.5.5 数据类型:字典

字典的常用操作。

# 字典的三种赋值操作
x = {'food':'Spam','quantity':4,'color':'pink'}
X =dict(food='Spam',quantity=4, color='pink')
x = dict([("food", "Spam"),("b", "2"),("color","pink")])
# dict.copy():拷贝数据
d =x.copy()
d['color'] = 'red'
print(x)							# {'food':'Spam','quantity':4,'color':'pink'} 
print(d)							# {'food':'Spam','quantity':4,'color':'red'}
#元素访问
print(d['name']) 					# 得到错误信息
print(d.get('name')) 				# 输出None
print(d.get('name','键值不存在!'))	# 输出 键值不存在
print(d.keys()) 					# 输出dict_keys(['food', 'quantity', 'color'])
print(d.values())					# 输出dict_values(['Spam', 4, 'pink'])
print(d.items())					# 输出 dict_items([('food', 'Spam'), ('quantity', 4), ('color', 'pink')])
d.clear()							# 清空字典中的所有数据
print(d)							# 输出 {}
del(d)								# 删除字典
print(d)							# 程序异常,提示"d"未定义

执行结果,出现异常:

注释掉异常代码,再次执行:


3.5.6 数据类型:集合

集合的常用操作。

sample_set = {'Prince', 'Techs'}
print('Data' in sample_set)   	# 输出False,in的作用是检查集合中是否存在某一元素
#set.add(obj):给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作
sample_set.add('Data')      		# 向集合中增加元素Data
print(sample_set)					# 输出 {'Prince', 'Techs', 'Data'}
print(len(sample_set))      	 	# 输出3 
# set.remove(obj):移除集合中的指定元素
sample_set.remove('Data')    		# 删除元素Data  
print(sample_set)					# {'Prince', 'Techs'}
list2 = [1,3,1,5,3]
print(list(set(list2)))			# 输出 [1,3,5],利用集合元素的唯一性进行列表去重
sample_set = frozenset(sample_set)# 不可变集合

执行结果:


3.5.7 深拷贝和浅拷贝

使用Python中的copy模块来实现深拷贝的功能。

import copy
Dict1 = { 'name': 'lee', 'age':89, 'num':[1,2,8]}	# 新建字典
Dict_copy = Dict1.copy()			# 浅拷贝
Dict_dcopy = copy.deepcopy(Dict1)	# 深拷贝
Dict1['num'][1] = 6				# 修改原数据中嵌套列表的值
print('Dict1:'+str(Dict1),' Dict_copy:'+ str(Dict_copy),' Dict_dcopy:'+ str(Dict_dcopy))

执行结果:


3.5.8 if语句

接收一个用户输入的分数,然后判断用户所输入的分数属于什么级别。使用Python中的if语句可以完成此功能。

#根据输入的分数判断
# input():用于接收输入。
score = input("请输入你的分数")						# input函数接收输入,为字符串类型
score = float(score)								# 将分数转化为数字类型
# try:...except Exception:.... 是Python中用于捕获异常的语句,如果try中的语句出现错误,则会执行except中的语句。
try:
    if 100>=score>=90:								# 判断输入的值是否大于等级分数        
        print("优")									# 满足条件后输出等级    
    elif 90 > score >= 80:        
        print("良")    
    elif 80>score>0:        
        print("中")    
    else:        
        print("差")
except Exception:	
    print("请输入正确的分数")


3.5.9 循环语句

当满足条件时循环执行语句块,想要结束循环时,使用break或continue结束循环。

#while循环
i = 0     # 新建i变量
while i<9:         # 设置循环条件	
    i+=1            # 每次循环i增加1	
    if i == 3:      # 判断条件是否满足 
        print("跳出此次循环")
        continue   # continue跳出当前的这一次循环	    
    if i == 5: 
        print("跳出当前大的循环") 
        break      # 跳出当前的大的循环	
    print(i)

执行结果:


3.5.10 自定义函数

自定义一个函数,返回一个序列。序列中每个数字都是前两个数字之和(斐波那契数列)。

def fibs(num):    # 位置参数    
    result = [0,1]								# 新建列表存储数列的值    
    for i in range(2,num):						# 循环num-2次        
        a = result[i-1] + result[i-2]			        
        result.append(a)						# 将值追加至列表    
    return result								# 返回列表
fibs(5)# 输出:[0, 1, 1, 2, 3]

执行结果:


自定义函数,打印不同方式传入的参数。

def hello(greeting='hello',name='world'):		# 默认参数    
    print('%s, %s!' % (greeting, name))		# 格式化输出	
hello() 							# hello,world    默认参数
hello('Greetings') 				# Greetings,world     位置参数
hello('Greetings','universe') 	# Greetings,universe     位置参数
hello(name='Gumby')				# hello,Gumby	关键字参数

执行结果:


3.5.11 类的基本操作

定义一个类,并实例化对象。

class Greeter(object):						# 新建类,继承object    
    def __init__(self, name):					# 初始化类        
        self.name = name  						# 创建一个实例变量    
    # 实例方法    
    def greet(self, loud=False):        
        if loud:            
            print('HELLO, %s!' % self.name.upper())        
        else:            
            print('Hello, %s' % self.name)
g = Greeter('Fred')  	# 创建Greeter类的一个实例
g.greet()            	# Hello,Fred    调用实例方法,使用默认参数
g.greet(loud=True)   	# HELLO, FRED  调用实例方法,自定义参数

执行结果:

3.5.12 文件操作

读写文件操作

# 使用write方法写文件
with open("f.txt", "w") as f:    
    f.write( "www.huawei.com")# 使用read方法读取
with open("f.txt", "r") as f:    
    print(f.read())

执行结果:

四、小结

通过使用ModelArts开发工具,可以快速搭建python体验环境,在短短的时间中可以快速体验python编程。

更重要的是现在ModelArts开发工具Notebook还有显示免费算力提供,可以选择免费资源进行测试和学习,非常方便!


2022年,快来参与博主活动吧~

【月度博主评选】岁末将至,新年伊始,博主更文挑战玩法多,华为 FreeBuds 3 无线耳机等你拿!

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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