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

ESP8266上的MicroPython入门(5)

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

函数,即是将一段代码封装起来,用来实现特定的功能。

函数定义

除了MicroPython内建的函数,用户也可以使用def语句自定义的函数。定义格式如下:

代码语言:javascript
复制
def <函数名> (<参数1, 参数2, ……>) :
    <函数体>
      ...
      ...
      ...

示例:

代码语言:javascript
复制
>>> def my_print():
...   print("hello world!")
... 
>>>

函数调用

函数定义完成后,使用函数名来调用函数,从而使用其功能。 示例:

代码语言:javascript
复制
>>> def my_abs(x):  #求x的绝对值
>>>   if x >= 0:
>>>     return x
>>>   else:
>>>     return -x
...     
...     
... 
>>> a = my_abs(-5)
>>> print(a)
5

函数参数

函数可以接收输入的值,并利用这些值做一些事。 多个参数传递需要用逗号隔开。 示例:

代码语言:javascript
复制
>>> def print_max(a, b):
...   if a > b:
...     return a
...   else:
...     return b
...     
...     
... 
>>> a = print_max(4, 6)
>>> print(a)
6

默认值参数

在定义函数的过程中如果指定了参数,那么调用函数时一定要给所有的参数传递值,否则会出错。 但是在一些情况下,可能又希望它的参数是可选的,即不要求调用函数时一定要给所有参数都传递值,那么可以通过默认值参数来完成。 示例:

代码语言:javascript
复制
>>> def say_message(message, times=2):
...   print(message*times)
... 
>>> say_message("hello", 3)
hellohellohello
>>> say_message("look")
looklook

关键参数

在调用函数时,还可以使用另外一种方式给函数传递值,即使用参数的名字(关键字)而不是位置,这被称为关键参数。 使用关键参数的优势:不需要担心参数顺序,使函数调用更简单。 示例:

代码语言:javascript
复制
>>> def print_abc(a, b, c):
...   print(a, b, c)
... 
>>> print_abc(1,2,4)
1 2 4
>>> print_abc(c=4, b=2, a=1) #使用关键参数
1 2 4

return语句

return用来退出一个函数,也可以使用return从函数返回一个值,并且这个值可以赋给其他变量。 如果return语句没有返回值,等价于return None,表示无返回值。如果函数中没有明确指定return语句,都在结尾暗含有return None语句。 示例:

代码语言:javascript
复制
>>> def print_max(x, y):
>>>   if x > y:
>>>     return x
>>>   elif x < y:
>>>     return y
>>>   else:
...     return
...     
...     
... 
>>> print_max(5, 3)
5
>>> print_max(5, 5)
>>> a = print_max(5, 5)
>>> print(a)
None

1.2.5.7 lambda表达式

lambda 表达式可以返回一个函数,使用lambda表达式可明显减少函数数量。定义格式如下:

代码语言:javascript
复制
lambda <参数1, 参数2, ……> : <表达式>

示例:

代码语言:javascript
复制
  >>> def make_incrementor(n):

...   return lambda x : x+n
... 
>>> f = make_incrementor(32)
>>> print(f(3))
35
>>> sum = lambda x,y : x+y
>>> print(sum(32, 3))
35

全局变量、局部变量

前面讲过变量(有关内容查看前面小节),变量有局部变量和全局变量。

全局变量

定义在整个文件中但在函数外部,作用域为全局范围的变量称为全局变量。 如果需要在函数内使用全局变量,同时又为全局变量赋值,则使用global关键字来实现。 示例:

代码语言:javascript
复制
>>> x = 0       #声明全局变量x
>>> def print_x():
...   global x  #使用变量x
...   x = 5
...   print(x)
... 
>>> print_x()
5
>>> print(x)
5
局部变量

在函数定义内声明的变量,只在当前函数内有效,即使函数外有同名变量存在,它们也没有任何关系,这样的变量称为局部变量。 示例:

代码语言:javascript
复制


>>> x = 10     #全局变量
>>> def print_x():
...   x = 6    #局部变量
...   print(x)
... 
>>> print_x()
6
>>> print(x)
10

关键字nonlocal的作用与关键字global类似,使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量。 示例:

代码语言:javascript
复制


>>> def fun():
...   num = 3
...   def fun2():
...     nonlocal num
...     num *= 2
...     print(num)
...   return fun2()
... 
>>> fun()
6

前面学习了如何使用函数,通过函数能够在程序中实现代码的重用,那么当需要在程序中重用其他程序内的代码,应该怎么办? 我们可以通过模块来调用,通过在程序中引用模块,就可以使用其中的函数和变量,这也是使用Python标准库的方法。 在模块中,模块的名称(作为字符串)可用作全局变量值name(有关内容查看第3章)。

import语句

MicroPython中要引入模块,使用import语句,格式如下:

代码语言:javascript
复制
import <模块名>

注意: 如果是直接引入模块,在使用模块中函数或属性(常量、变量)时一定要指出函数或属性的所属模块,格式为:<模块名>.<函数或属性>,否则会出错。 示例:

代码语言:javascript
复制


>>> import random
>>> 
>>> num = random.randint(1, 100) #使用random模块中的randint()函数
>>> print(num)
7

from…import语句

如果只想引入模块中的某个函数或属性,使用from…import语句,格式如下:

代码语言:javascript
复制
    from <模块名> import <函数名或变量名>

示例:

代码语言:javascript
复制
>>> from random import randint
>>> 
>>> num = randint(1, 100)
>>> print(num)
95

在使用from...import语句从模块中引入函数时,为避免冲突和便于理解,可以使用as语句给引入的函数换个名字,如下

代码语言:javascript
复制
    from <模块名> import <函数名或变量名> as <自定义名>

示例:

代码语言:javascript
复制


>>> from random import randint as ra
>>> 
>>> num = ra(1, 100)
>>> print(num)
30

自定义的模块

每个Python文件,只要它保存在MicroPython的文件系统中,就是一个模块。 引入自定义的模块,需要模块文件位于MicroPython环境变量路径下或与当前运行程序在同一路径下。

注意:

不能引入workSpace目录中的文件,编写好后,必须要下载到板子上才可以引入它.

示例:

1) 自定义模块,命名为 DefMod.py

2) RefMod.py 中引入自定义模块

dir()函数

dir()函数是micropython内置的函数,用来列出模块中的函数、类和属性。 如果给dir()函数提供一个模块名称,它返回该模块中的名称列表,如果不提供,则返回当前模块的名称列表。 示例:

代码语言:javascript
复制
>>> import random
>>> 
>>> dir(random) 
['__name__', 'getrandbits', 'seed', 'randrange', 'randint', 'choice', 'random', 'uniform']
>>> print( dir() )
['myfile', 'print_x', 'a', 'gc', 'print_abc', 'num', 'sys', 'bdev', 'randint', '__name__', 'os', 'x', 'random', 'print_max', 'ra', 'uos']

dir()函数没有列出内置函数和变量的名字,这些函数和变量定义在builtins模块中,通过它你可以看到具体的内容。 示例:

代码语言:javascript
复制
>>> import builtins
>>> dir(builtins)
['__name__', '__build_class__', '__import__', '__repl_print__', 'bool', 'bytes', 'bytearray', 'comp
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数定义
  • 函数调用
  • 函数参数
  • 默认值参数
  • 关键参数
  • return语句
  • 1.2.5.7 lambda表达式
  • 全局变量、局部变量
    • 全局变量
      • 局部变量
      • import语句
      • from…import语句
      • 自定义的模块
      • dir()函数
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档