美文网首页
01.05 笔记 - 函数作用域

01.05 笔记 - 函数作用域

作者: xxxQinli | 来源:发表于2019-01-05 17:06 被阅读0次

什么是变量的作用域

变量能够使用的范围

全局变量和局部变量

  • a. 全局变量 - 没有声明在函数或者类中的变量都是全局变量,函数、循环里都可以使用,全局变量的作用域从声明开始,到整个文件结束

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

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


全局变量

  • 变量a是全局变量

a = 100

  • 全局变量 - for in中 ----- 重点

for y in range(5):

 print(y)

\# y 可以在循环外中使用,y为全局变量,但是y以最后一次赋值为准

def func1():

 print(y)

func1()

print(y)


局部变量

  • a. 函数的形参就相当于声明在函数中的变量,所以是局部变量

#num1 是局部

"""

def func2(num1):

 print(num1)

func2(10)

\# print(num1) 报错

  • 如果全局变量和局部变量重名,那么在局部变量的作用域中使用的是局部变量,相当于在局部变量中重新声明了一个变量,外面使用的是全局变量

aa = 100

def func5():

 aa = 200

 print('函数里', aa)

func5()

print('外部', aa)


重点 - global - 在函数中声明了一个全局变量,不需要一定在全局中有这个变量

在函数中:

global 变量名 (global只能在函数中使用)

变量名 = 值

重点 - 创建函数,其实是创建一个函数的单独的空间,在这个空间里给局部变量赋值,函数执行结束后,函数的单独空间销毁

重点 - 若用globl在函数中指定全局变量,函数会先在全局中找是否又这个变量,有就用全局变量,没有的话,就重新在全局变量中声明一个新的变量


\# print(cc)

bb = 11

def func6():

 global bb

 bb = 22

 print(bb)

 global cc

 cc = 200

func6()

print(bb) \# 全局变量被修改了

print(cc)


重点 - nonlocal - 想要在局部的局部中去修改局部变量的值,就使用nonlocal对变量进行说明,前提,父函数里必须要有这个变量

在子函数中使用,将变量不当做局部函数(不重新声明一个变量),而用父函数的这个变量,若父函数没有,就报错SyntaxError: no binding for nonlocal 'abc' found


def func11():

 abc = 123

 print('func11', abc)

 def func12():

 nonlocal abc \# abc 为父函数里的同名变量

 abc = 333

 print('func12', abc)

 func12()

 print('func11', abc)

func11()


list1 = []

for i in range(1,6):

 list1.append(lambda x: x + i)

print(list1)

print(list1[0](2)) 

重点-在将函数添加进列表的时候,只是将一个函数块放入列表,只有当函数要调用的时候,才会执行函数块中的代码,根据代码情况调用里面的变量

简单意思就是,只是存入了一个函数块,并不会执行代码块,当要调用的时候,才会执行里面的函数

相关文章

  • 01.05 笔记 - 函数作用域

    什么是变量的作用域 变量能够使用的范围 全局变量和局部变量 a. 全局变量 - 没有声明在函数或者类中的变量都是全...

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • JavaScript 作用域和闭包理解

    作用域: 分为函数作用域,和块级作用域; 函数作用域 函数作用域外面的无法访问函数作用域内部的变量和函数,这样就可...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • 详解Kotlin中的作用域函数

    Kotlin作用域函数 作用域函数,Kotlin在语法层面支持拓展函数,作用域函数,作用域函数是指对数据做一些变换...

  • 1. let , const 块级作用域

    作用域全局作用域 => global函数作用域 => 因函数执行而产生的作用域 块级作用域形式 : { }特点 :...

  • js 变量作用域问题 以及 let

    JavaScript中有以下两种作用域 全局作用域函数作用域全局作用域是函数之外(最外层代码)的作用域。在函数之外...

  • 第九天,函数作用域和声明提前

    函数作用域和函数声明提前。 函数作用域,分为全局作用域和部分作用域,在系统执行函数时会自动创建一个作用域,在执行完...

  • C - 作用域

    C - 作用域 一个 C 变量的作用域可以是: 块作用域 函数作用域 函数原型作用域 或 文件作用域 作用域描述程...

  • 作用域

    标识符的作用域有函数原型作用域、局部作用域(块作用域)、类作用域和 命名空间(namespace) 作用域 函数原...

网友评论

      本文标题:01.05 笔记 - 函数作用域

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