Home  >  Article  >  Backend Development  >  Function scope in Python

Function scope in Python

不言
不言Original
2018-05-07 13:56:361164browse

This article mainly introduces the function scope in Python, which has certain reference value. Now I share it with everyone. Friends in need can refer to it

In Python, a function is an effect area. This article focuses on introducing the function scope in python. Friends who are interested should take a look.

In python, a function is a scope

name = 'xiaoyafei'
def change_name():
  name = '肖亚飞'
  print('在change_name里的name:',name)
change_name() # 调用函数
print("在外面的name:",name)

The running results are as follows:

The name in change_name: Xiao Yafei
The name outside: xiaoyafei

Let’s try again how to search in the nested function ?

age = 15
def func():
  print('第一层age:',age) # 第一层age: 15
  def func2():
    age = 73
    print("func2中的age:",age) # func2中的age: 73
    def func3():
      age = 84
      print("func3中的age:",age) # func3中的age: 84
    func3() # 调用func3函数
  func2() # 调用func2函数
func()

In the above nested functions, it can be well explained that a function is a scope, so let’s change the code a little now to see the situation?

age = 15
def func():
  print('第一层age:',age) # 第一层age: 15
  def func2():
    print("func2中的age:",age) # func2中的age: 15 # 看到没有,如果当前作用域里没有age变量,那么它就会往上找
    def func3():
      age = 84
      print("func3中的age:",age) # func3中的age: 84
    func3() # 调用func3函数
  func2() # 调用func2函数
func()

So, at this time Someone said that a lot of nonsense turned out to be local variables and global variables. So I want to ask: In the above nested function, there is no age variable in func2, so how does it find the global variable age = 15? ?

At this point we need to look at the search order of the scope:

Variable scope LEGB

  • L: locals The name space within the function, including local variables and actual parameters

  • E: enclosing The name space of the external nested function, that is, the adjacent previous one Layer, for example: if there is no age variable in func2, it will go to func to find this

  • G: globals global variable

  • B: Builtins The name space of built-in modules

Ahem, let’s first understand what a name space is?

Name space, also known as name space, as the name implies, is where names are stored. Where, what name is stored? For example, x = 1, 1 is stored in the memory, then where is the variable name x stored? The name space is the place where the binding relationship between the name x and 1 is stored

>>> x = 1
>>> id(1)
1576430608

Name Spaces are divided into the following three types:

  • locals: is the name space within the function, including local variables and formal parameters

  • globals: global variables , the name space of the module where the function definition is located

  • builtins: the name space of the built-in module

The scope of different variables is different because this variable is located Determined by the namespace.

The scope is the scope

  • Global scope: global survival, global validity

  • Local scope :Temporary inventory, partially valid

Let us take an example to see

level = 'L0'
n = 22
def func():
  level = 'L1'
  n = 33
  print(locals()) # {'n': 33, 'level': 'L1'} 在之前说过在python中,一个函数就是一个作用域,这就很完美的体现了
  def outer():
    n = 44
    level = 'L2'
    print(locals(),n) # {'level': 'L2', 'n': 44} 44
    def inner():
      level = 'L3'
      print(locals(),n) # {'level': 'L3', 'n': 44} 44
    inner()
  outer()
func()

L --> E --> G -->B rule Search, that is: if it is not found locally, it will be searched locally (such as closures). If it cannot be found, it will be searched globally, and then it will be searched in built-in functions.

Related recommendations:

Introduction to functions in python

The above is the detailed content of Function scope in Python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn