前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESP8266上的MicroPython入门(6)

ESP8266上的MicroPython入门(6)

作者头像
云深无际
发布2021-04-14 14:19:21
6580
发布2021-04-14 14:19:21
举报
文章被收录于专栏:云深之无迹云深之无迹

类定义格式如下:

代码语言:javascript
复制
class <类名>:
    类体

类中除了定义函数,还可以包含其他语句。一个类中的函数定义通常有一个特殊的参数列表形式,以在类外调用这个函数。

类对象

类支持两种操作:属性引用和实例化。

属性引用

调用类的属性:obj.name,name是类中定义的变量或函数的名字。 示例:

代码语言:javascript
复制
class MyClass:
  i=12345

  def f(self):
    print("hello world")

上面示例中MyClass.i和MyClass.f是有效的属性引用,分别引用一个整数和一个函数。

类实例化

示例:

代码语言:javascript
复制
1

x = MyClass()

上面的示例,创建该类的新实例并将对象分配给本地变量x。 一个类可以定义一个名为init()的特殊方法。 示例:

代码语言:javascript
复制
def __init__(self, data):
  self.data=23

当一个类定义了一个init()方法时,类会自动调用init()新创建的类实例。可以通过x=MyClass()的方式获得。在这种情况下,赋予类实例化的参数被传递给init()。 示例:

代码语言:javascript
复制
>>> class ComplexClass:
...   def __inis__(self, r, i):
...     self.r = r
...     self.i = i
...     print(self.r + self.i)
...     
...     
... 
>>> x = ComplexClass(3, 6)
9
>>> x.r, x.i
(3, 6)

实例对象

示例:

代码语言:javascript
复制
class Complex:
  def __init__(self, r, i):
    self.r = r
    self.i = i
    print(self.r + self.i)

x = Complex(3, 6)
x.counter = 1
while x.counter < 10:
    print("hello",x.counter)
    x.counter = x.counter * 2
print(x.counter)
del x.counter

运行结果:

代码语言:javascript
复制
9
hello 1
hello 2
hello 4
hello 8
16

你可以将程序产生的数据保存在文件中,也可以从文件中读取数据。

文件读取

想要读取文件中的数据,首先要打开文件(文件已存在)。

代码语言:javascript
复制
open(filename, mode)
代码语言:javascript
复制
mode:模式
    r :以只读方式打开
    rw:以读写方式打开

示例:

代码语言:javascript
复制
1

f = open ( 'test.py', 'r')

注意: 只能打开下载到板子中的文件。 示例:

代码语言:javascript
复制
1

print(f.read())

读取完成后,记得使用close()关闭文件,释放资源。 示例:

代码语言:javascript
复制
1

f.close()

综合示例:

代码语言:javascript
复制
>>> f = open('test.py', 'r')
>>> print(f.read())
import time
from machine import Pin
led=Pin(2,Pin.OUT)       

while True:
  led.value(1)            
  time.sleep(0.5)
  led.value(0)           
  time.sleep(0.5)
>>> f.close()

文件写入

向文件中写入数据同样要先打开文件(文件已存在)。

代码语言:javascript
复制
f = open(filename, mode)

然后向文件中写入数据。

代码语言:javascript
复制
fd.write(str)

示例:

代码语言:javascript
复制
fd.write('hello dfrobot')

最后不要忘了关闭文件以释放资源。

代码语言:javascript
复制
f.close()

综合示例:

代码语言:javascript
复制
>>> f = open('test.py', 'w')
>>> f.write('#DFRobot')
8
>>> f.close()
>>> f = open('test.py', 'r')
>>> print(f.read())
#DFRobot
>>> f.close()

注意: 向一个已经存在内容的文件写入数据时,会覆盖原来的内容。

程序在运行时出错会被中断执行,终端打印出错误信息,这样的问题大家在编写代码的过程中经常遇到。引发程序出错的事件源称为异常,处理程序异常并使程序继续执行的方法叫做异常处理。

异常

即使语句或表达式在语法上是正确的,但是执行它时却出现错误,我们把这种在执行过程中检测到的错误称为异常。 示例:

代码语言:javascript
复制
c = 10/0
print(c)

运行结果:

代码语言:javascript
复制
syntax finish.
>>> 
>>> 
Ready to download this file,please wait!
download ok
exec(open('test.py').read(),globals())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
ZeroDivisionError: division by zero

上面的例子语法没有错误,但是引发ZeroDivisionError异常而产生中断,使后面的程序不能正确执行。

处理异常

try……except

在MicroPython中用try……except语句来处理异常,将可能引发异常的语句放到try中执行,当异常发生时,跳过try中剩余的语句,直接跳转至except中的语句来处理异常。 示例:

代码语言:javascript
复制
>>> try:
...   a = 10/0
...   print(a)
... except:
...   print("error")
... 
error

except语句也可以专门处理指定的异常,即在except语句后跟异常名称,如果不指定异常名称则表示处理所有异常。 示例:

代码语言:javascript
复制


def divide(x, y):
  try:
    i = x/y
  except ZeroDivisionError:
    print("division by zero!")
  else:
    print("result is", i) 

divide(5, 0)
divide(5, 2)

运行结果:

代码语言:javascript
复制


division by zero!
2.5

在上面的示例中,try……except语句有一个可选的else子句。如果try子句不引发异常,则必须执行该代码。

try……finally

无论是否发生异常都会执行finally中的语句块,它可以和try……except……else一起使用。 示例:

代码语言:javascript
复制
def divide(x, y):
  try:
    i = x/y
  except ZeroDivisionError:
    print("division by zero!")
  else:
    print("result is", i)
  finally:
    print("executing finally clause")

divide(5,0)
print() #打印一个空行
divide(5, 2)

运行结果:

代码语言:javascript
复制
division by zero!
executing finally clause

result is 2.5
executing finally clause

嘿,客官,看到这里么有?Python得基础教程到此就结束了,不知道你是不是看的意犹未尽呢???这种东西不难,你一定要去自己写,去尝试.这些东西熟能生巧.以上是python得冰山一角,对其感兴趣可以再研究.也可以私信我要资料.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类对象
    • 属性引用
      • 类实例化
      • 实例对象
      • 文件读取
      • 文件写入
      • 异常
      • 处理异常
        • try……except
          • try……finally
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档