1-05-2 lambda 与模块

lambda 表达式
lambda表达式的作用:

  • 使用 lambda 就可以省下定义函数过程。
  • 对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,使用 lambda 就不需要考虑命名的问题了。
  • 简化代码,提高可读性。

可以用 lambda 关键字来创建一个简单的匿名函数。这个函数返回两个参数的和:
lambda a, b: a+b
lambda 函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上来说,它们只是正常函数定义的语法。与嵌套函数定义一样,lambda 函数可以引用所包含域的变量。

chap1-5-3-lambda.py

def make_incrementor(n):
    return lambda x: x + n

f = make_incrementor(42)
print(f(0)) # x=0, n=42
print(f(1)) # x=1, n=42

------------------------------------------
# 输出结果如下:
42
43

递归

递归是函数调用自身的行为。使用递归算法在逻辑上比较直觉。以下是斐波那契数列的递归实现。

def fab(n):
  if n < 1:
    print('输入有误!')
    return -1

  if n == 1 or n == 2:
      return 1
  else: # 调用自身
      return fab(n-1) + fab(n-2) 

number = int(input('请输入数字:'))
result = fab(number)
if result != -1:
  print('数字为 %d ,结果为 %d !' % (number,result))

模块

从 Python 解释器退出并再次进入,之前的定义(函数和变量)都会丢失。因此,如果你想编写一个稍长些的程序,最好使用文本编辑器为解释器准备输入并将该文件作为输入运行。这被称作编写脚本 (script) 。随着程序变得越来越长,你或许会想把它拆分成几个文件,以方便维护。你亦或想在不同的程序中使用一个便捷的函数,而不必把这个函数复制到每一个程序中去。为支持这些需求,Python 有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们。这样的文件被称作模块 (module),模块中的定义可以导入 (import) 到其它模块或者主模块。

模块是一个包含 Python 定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。在一个模块内部,模块名可以通过全局变量 __name__ 的值获得。例如,使用你最喜爱的文本编辑器在当前目录下创建一个名为 calc.py 的文件, 文件中含有以下内容:

calc.py

def add(a,b):
    return a + b
def sub(a,b):
    return a - b

现在进入 Python 解释器,并用以下命令导入该模块,在当前的符号表中,这并不会直接进入到定义在 calc 函数内的名称,它只是进入到模块名 calc 中。你可以用模块名访问这些函数

>>>
>>> import calc
>>> calc.add(10,20)
30
>>> calc.sub(30,20)
10
>>> calc.__name__
'calc'

import 语句有一个变体,它可以把名字从一个被调模块内直接导入到现模块的符号表里;可以导入模块内定义的所有名称,这会调入所有非以下划线(_)开头的函数名称,但在多数情况下,Python 程序员都不会使用这个功能,因为它在解释器中引入了一组未知的名称,而它们很可能会覆盖一些你已经定义过的东西;模块名称之后带有 as,则跟在 as 之后的名称将直接绑定到所导入的模块,这种方式也可以在用到 from 的时候使用,并会有类似的效果;内置函数 dir() 用于查找模块定义的名称。 它返回一个排序过的字符串列表,列出所有类型的名称:变量,模块,函数,等等。

>>> from calc import add, sub
>>> add(50,20)
70
>>> from calc import *
>>> add(50,20)
70
>>> import calc as c
>>> c.add(50,20)
70
>>> from calc import add as addOperation
>>> addOperation(50,20)
70
>>> dir(calc)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'sub']

当要导入 calc 模块的时候,解释器首先寻找具有该名称的内置模块。如果没有找到,然后解释器从 sys.path 变量给出的目录列表里寻找名为 calc.py 的文件。sys.path 初始有这些目录地址:

  • 包含输入脚本的目录(或者未指定文件时的当前目录)。
  • PYTHONPATH (一个包含目录名称的列表,它和shell变量 PATH 有一样的语法)。
  • 取决于安装的默认设置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值