如何批量生成变量并赋值?——python 中 globals() 函数
python中globals()
函数:如何批量生成变量并赋值?
2020/12/29 Hongmin
Python 3.6.3 |Anaconda custom (64-bit)|
【问题引入】
python中定义变量并赋值时,可以用下面的格式:变量名 = 值
比如,想定义变量number,并赋值为5,可以用这个语句:number = 5
但是,如果想生成从number1、number2、number3……number100,分别赋值为1、2、3……100,应该如何操作呢?
【globals()
函数】
以字典形式返回包含当前作用域全局变量。
In[5]: globals??
Signature: globals()
Docstring:
Return the dictionary containing the current scope's global variables.
# 返回包含当前作用域全局变量的字典。
NOTE: Updates to this dictionary *will* affect name lookups in the current
global scope and vice-versa.
Type: builtin_function_or_method
通过globals()
函数,可以实现批量生成变量名并赋值的目的。回到之前的问题,可以用如下代码实现:
In[9]: names = globals()
...: for i in range(1,100):
...: names ['number%s' % i] = i
...: print(number1)
...: print(number14)
...: print(number88)
1
14
88
生成的变量如下图所示:
——————补充——————
【关键字 global
】
在python中,函数内部声明的变量称为局部变量;而全局变量,顾名思义,则是在整个py文件中声明的变量,作用域是全局作用域。
由于函数内部的运算不能改变函数外的变量,因此,如果在函数中改变全局变量,需要在函数内声明变量是全局变量才可以。
比如,已知变量a的值是5,想通过函数plus_a(n)实现a+n的计算过程,如果写成如下代码,是无法实现的:
In[10]: a = 10
...: def plus_a(n):
...: a = a + n
...: return a
...:
In[11]: plus_a(10)
Traceback (most recent call last):
File "D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-11-feed4f90e5e8>", line 1, in <module>
plus_a(10)
File "<ipython-input-10-c89608433294>", line 3, in plus_a
a = a + n
UnboundLocalError: local variable 'a' referenced before assignment
# 报错:在引用局部变量a前并未对a赋值
在这段代码中,plus_a()内的a是局部变量,和全局变量a指向的是两个不同的变量。因此,在函数内部,并没有给局部变量a赋值,故报错。
这段代码应该改为:
In[12]: a = 10
...: def plus_a(n):
...: global a
...: a = a + n
...: return a
...:
In[13]: plus_a(10)
Out[13]: 20
In[14]: a
Out[14]: 20
这样,就可以通过函数对全局变量进行修改了。
本文地址:https://blog.csdn.net/yang_hmin/article/details/111932618
上一篇: RDKit | 基于RDKit的氨基酸序列转换为SMILES
下一篇: 数据结构算法 -- 翻转链表