美文网首页
匿名函数、函数作用域

匿名函数、函数作用域

作者: 有趣的恶魔QAQ | 来源:发表于2019-01-05 17:11 被阅读0次

一、匿名函数

1.什么是匿名函数

函数的另外一种表现形式,还是函数,只适用于函数功能比较简单的函数(声明的格式和普通的函数不一样)

2.匿名函数的声明

a.语法
  • 变量名 = lambda 形参列表:返回值
b.说明
  • 变量名 - 相当于函数名
  • lambda - 声明匿名函数的关键字
  • 形参列表 - 和普通函数的形参列表一样
  • : - 固定写法
  • 返回值 - 就相当于普通函数中只有一条return语句的函数体(不用写return)
匿名函数可以用关键字传参
func1 = lambda x, y=0: x+y
print(func1(1))
print(func1(y=520, x=1314))
匿名函数可以设置不定长参数
func2 = lambda *nums: sum(nums)
print(func2(1314, 520))

二、函数的作用域

1.什么是变量的作用域

就是变量能够使用的范围

2.全局变量和局部变量
  • a.全局变量 - 没有声明在函数或者类中的变量都是全局变量
    全局变量的作用域是从声明开始,到整个文件结束

  • b.局部变量 - 声明在函数或者类中的变量
    局部变量的作用域是从生命开始,到函数结束

总结:当我们调用函数的时候,系统会自动在栈区间专门为这个函数开辟一块独立的内容空间,用来保存在函数中声明的变量(形参也是属于声明在函数中的变量),当函数调用结束后,这个函数对应的栈区间会自动销毁 ---(函数调用过程是一个压栈的过程)
1.全局变量

a = 520

2.全局变量
这儿的y也是全局变量
for y in range(3):
    print(y)
print('外面:', y)

def func1():
    print('函数里面:', y )
func1()

3.局部变量

a.函数的形参就相当于声明在函数中的变量,所以是局部变量
# num1是局部变量
def func2(num1):
    print(num1)
func2(10)

4.局部变量和全局变量同名

cc = 520  # 此处为全局变量

def func3():
    cc = 1314  # 此处为局部变量
    print('函数里:', cc)  # 打印局部变量
func3()

print(cc)  # 打印出来的为全局变量

3.global - 在函数中声明一个全局变量(只能在函数中使用)

在函数中:
global 变量名
变量名 = 值

lc = 520
def func4():
    global lc  # 若注释掉此行,则结果为1314,520
    lc = 1314
    print(lc)
func4()
print(lc)

4.nonlocal - 想要在局部的局部中取修改布局变量的值

语法:
nonlocal 局部变量
局部变量 = 值

def func5():
    abc = 123

    def func6():
        nonlocal abc
        abc =333
        print('fun6:', abc)
    func6()
    print('func5:', abc)
func5()

三、函数作为变量

python中声明函数其实就是声明一个数据是function的变量,函数名就是变量名

  • 函数名 -- 类型是function的变量
  • 函数名() -- 调用函数并且获取函数的返回值
    普通变量能做的事情函数变量都能做!

1.给别的变量赋值

对比如下:

# 声明了一个列表变量list1
list1 = [1, 2, 3]
# 实用列表变量给另外一个变量list2赋值
list2 = list1
# 赋值后list2可以当成列表来用
print(list2[1])

# 声明一个函数变量func1
def func1():
    return 10
# 使用函数变量给另外一个变量func2赋值
func2 = func1
# 赋值后func2就可以当成函数来使用
func2()
print(func2())

2.变量作为容器类数据的元素

def func3():
    print('abc')
    return 10
list3 = [func3, func3(10), 100]
print(list3)
print(list3[0](1))

3.变量作为函数的实参

  • 函数1作为函数2的实参 -- 函数2就是一个实参高阶函数
  • 函数作为参数的应用:sort函数
  • 列表.sort(key = None,reverse = False)
  • 参数key - 要求是一个带有一个参数,并且返回值是布尔的函数。这儿的参数是
    指向列表中的元素。确定按照元素的什么值进行排序

四、函数作为返回值

变量作为函数的返回值
函数1作为函数2的返回值 - 函数2是返回值高阶函数

相关文章

  • 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看到上面的代码不是...

  • JavaScript函数表达式——模仿块级作用域

    模仿块级作用域 匿名函数可以用来模仿块级作用域。 以上代码定义并立即调用了一个匿名函数,将函数声明包含在一对圆括号...

网友评论

      本文标题:匿名函数、函数作用域

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