美文网首页
python--函数作用域与匿名函数

python--函数作用域与匿名函数

作者: 昆仑草莽 | 来源:发表于2019-03-22 14:23 被阅读0次

在上一章节我们知道了函数,并学会了定义函数,以及一些python的自带函数。这一节,我们学习函数的作用域与匿名函数。

函数的作用域:

在函数内部可以定义变量,但是当函数外部与函数内部的自定义变量相同(名字相同),他们之间会互相影响吗。带着这个问题,我们来看下面的函数。

#函数1
a = 'hello'
def test():
   b = a + 'world'
   return b
print(test())
输出:helloworld
#函数2
a = 'hello'
def test():
   a = 'how are you'
   return a
print(test())
输出:how are you

可以看出,函数内部可以调用函数外部的变量,但是函数内部却无法去修改函数外部的变量。这也就是函数的作用域在起作用。举一个很简单的例子。在一个学校里有两个名字都为小明的同学,分别在 a , b 班级,那么,在 a 班的小明,和在 b 班的小明是同一个人吗,答案是显而易见的。在 a 班的小明,去到 b 班,那么 b 班的同学是不认识他的,这就是他只能在一个指定的区域内,出了这个区域,那就不一定有人认识了。函数的作用域也是同样的道理,a 变量在函数内部有赋值,函数外部同样有一个变量 a 赋值,这两个变量是不同的,函数内部的变量,可以调用外部的变量,但是不能改变外部的变量。函数外部的变量是不能去使用调用函数内部变量的。这就是函数的作用域,他只在自己定义的区域起作用,函数内部或者函数外部。那么有没有方法可以使用函数内部的变量去修改函数外部的变量呢。毕竟,对变量来说,都是可以修改的。这里我们引入全局变量 global ,使用 global 就可以将函数内部的变量定义为全局变量,将函数内部的局部变量改变为全局变量,这样,函数外部的变量就可以被函数内部的变量修改了。

#函数1
a = 'hello'
def test():
    a = a + 'how are you'
    return a
print(test())
#报错,无输出内容
#函数2
a = 'hello'
def test():
    global a
    a = a + 'how are you'
    return a
print(test())
输出:hello how are you

可以看出,只用将函数内部的变量定义为全局变量,才可以去修改变量的值。

局部变量

下面我们看一个函数

def outt():
  x = 123
  def inn():
      x += 1
      return x
  return inn()
print(outt())
#输出:UnboundLocalError: local variable 'x' referenced before assignment 报错
def outt():
  x = 123
  def inn():
      nonlocal x
      x += 1
      return x
  return inn()
print(outt())
#输出:124

这个函数我们看出,当内层函数想要调用外层函数变量,并修改时,会报错,这时候在内层函数设置局部变量 nonlocal 就可以调用,并修改。上面的两个变量就叫全局变量与局部变量,全局变量作用与函数的外部变量与内部变量之间的修改,局部变量作用与内部函数与外部函数之间的变量修改。函数作用域针对函数的,函数内部变量只能作用于函数内部,想要对函数外部的变量修改,就必须使用 global 。函数内部是不能直接修改函数外部的变量的。

匿名函数

前面的章节我们学习过三目函数:

print(a) if x > 5 else print(b)#三目运算

匿名函数和三目运算的目的是相同的,都是要达到代码简单易读的目的。

lambda x :x*10 #这就是一个匿名函数,简单易读,代码量少。lambda 参数:表达式

匿名函数的使用:

filter(lambda x:x>5,[3,4,7,6])#可以过滤除大于5的数字
map(lambda x:x*10,[3,4,8,7,9])#对列表中的数字每个都乘于10

这样的方法还有很多,他最大的好处就是,可以简化代码,可以不需要 def 就建立一个函数,这样就可以减少代码量。

相关文章

  • python--函数作用域与匿名函数

    在上一章节我们知道了函数,并学会了定义函数,以及一些python的自带函数。这一节,我们学习函数的作用域与匿名函数...

  • Block

    Block:带有自动变量的匿名函数。 匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作用域。 自动变量...

  • ios block

    Block概要Block:带有自动变量的匿名函数。匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作用域...

  • Block底层原理

    1、block 定义 :带有自动变量的匿名函数。 匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作用域...

  • Block

    Block:带有自动变量的匿名函数。匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作用域。自动变量:栈...

  • 2018-06-02 作用域链 闭包 匿名函数

    主要讲了闭包是什么 闭包造成的内存泄漏 匿名函数模拟私有变量 匿名函数模拟块级作用域 匿名函数模拟单例类 作用域链...

  • 匿名函数、函数作用域

    一、匿名函数 1.什么是匿名函数 函数的另外一种表现形式,还是函数,只适用于函数功能比较简单的函数(声明的格式和普...

  • Day6 js和DOM操作

    一、作用域 函数声明语法: function 函数名(参数列表){函数体} 匿名函数: 函数变量 = functi...

  • day9 函数

      今天主要学习匿名函数、变量的作用域、递归函数、模块等内容。   1、匿名函数的声明   格式为:函数名= la...

  • JS-函数

    1.定义(1)匿名函数(2)具名函数(3)箭头函数,无this 词法作用域(也叫静态作用域)JS看到上面的代码不是...

网友评论

      本文标题:python--函数作用域与匿名函数

      本文链接:https://www.haomeiwen.com/subject/pnmlvqtx.html