背景:
对于一些自动化操作中,尤其是大量操作某些具有相同的前缀或后缀的变量时,且有规律的情况下,我们通常会考虑能否使用循环来实现,这样我们通过循环即可实现批量操作。这个过程中我们通常通过字符串来处理这些变量名,处理完后我们又会需要将其转回变量名,那么应该怎么来进行操作?
实现方法:
目前已知有以下方法可以实现"字符串到变量名"的方法:
-
eval()
-
exec()
-
locals()
-
globals()
具体案例:
eval()
方法简单实用,以此为例,代码参考如下:
a = "test_"
b = eval('a')
print(b)
b += eval('a')
print(b)
test_1 = "abc"
test_2 = "def"
test_3 = "gh123"
test = ""
for i_ in range(3):
test += eval("test_" + str(i_ + 1))
print(test)
执行结果如下:
» python3 .\test.py
test_
test_test_
abcdefgh123
参考:https://segmentfault.com/a/1190000017114522
头条面试题:实现一个get函数,使得下面的调用可以输出正确的结果
const obj = { selector: { to: { toutiao: "FE Coder"} }, target: [1, 2, { name: 'byted'}]};
get(obj, 'selector.to.toutia...
现想实现以下功能: > 1、使用字符串指代变量名。 > 比如说,有两个变量 a="bbb"和bbb={"c":1},引用a如何得到{"c":1},也就是a的值bbb所代表的变量bbb的值。 > google了下,查到http://www.douban.com/group/topic/2193745/上的以下四种方式能够将字符串转作变量,分别是: > exec(abc = 5
> 1、使用字符串指代变量名。> 比如说,有两个变量 a="bbb"和bbb={"c":1},引用a如何得到{"c":1},也就是a的值'bbb'所代表的变量bbb的值。> google了下,查到http://www.douban.com/group/topic/2193745/上的以下四种方式能够将字符串转作变量,分别是:>>> exec('bed=5')>>> bed5>>> exec('be...
类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
以下实例将浮点数变量 a 转换为整数:
a = ‘1.4’ 或a=‘1.0’
int(a) 出错
1. locals()
locals是python的内置函数,他可以以字典的方式去访问局部和全局变量。
python里面用名字空间记录着变量,就像javascript的window一样,他记录着各种全局变量。
每个模块,每个函数都有自己的名字空间,记录着变量,常量,类的命名和值。
就像JS一样,当python在使用变量时,会按照下面的步骤去搜索:
函数或类的局部变量。
全局变量。
内置变量。
以上三个步骤,其中一步骤找到对应的变量,就不会再往下找。如果在这三个步骤都找不到,就会抛出异常。
2.vars()
eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。
如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。
eval(string......
python中变量名和字符串的相互转换字符串作为变量名变量名作为字符串
字符串作为变量名
可以使用locals(),globals(),vars()进行转换。
代码示例:
ls = ['A', 'B', 'C']
for i in ls:
globals()[i] = [1,2,3]
print(A,B,C)
[1, 2, 3] [1, 2, 3] [1, 2, 3]
变量名作为字符串
代码示例:
import inspect
def retrieve_name(var):