相关疑难解决方法(0)

为什么使用'eval'是一种不好的做法?

我正在使用以下课程轻松存储我的歌曲数据.

class Song:
    """The class to store the details of each song"""
    attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
    def __init__(self):
        for att in self.attsToStore:
            exec 'self.%s=None'%(att.lower()) in locals()
    def setDetail(self, key, val):
        if key in self.attsToStore:
            exec 'self.%s=val'%(key.lower()) in locals()
Run Code Online (Sandbox Code Playgroud)

我觉得这比写出一个if/else块更具可扩展性.但是,eval似乎被认为是一种不良做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?

python eval

125
推荐指数
6
解决办法
3万
查看次数

Python变量作为dict的键

有没有更简单的方法在Python(2.7)中执行此操作?:注意:这不是任何花哨的东西,比如将所有局部变量放入字典中.只是我在列表中指定的那些.

apple = 1
banana = 'f'
carrot = 3
fruitdict = {}

# I want to set the key equal to variable name, and value equal to variable value
# is there a more Pythonic way to get {'apple': 1, 'banana': 'f', 'carrot': 3}?

for x in [apple, banana, carrot]:
    fruitdict[x] = x # (Won't work)
Run Code Online (Sandbox Code Playgroud)

python dictionary

61
推荐指数
3
解决办法
14万
查看次数

从变量列表创建字典

我正在寻找一种方法来创建字典而无需显式写入键我想创建获取数字变量的函数,并创建字典,其中变量名称是键,它们的值是变量值

而不是编写以下功能:

def foo():
    first_name = "daniel"
    second_name = "daniel"
    id = 1
    return {'first_name':first_name, 'second_name':second_name}
Run Code Online (Sandbox Code Playgroud)

我希望得到与功能相同的结果:

create_dict_from_variables(first_name, second_name)
Run Code Online (Sandbox Code Playgroud)

无论如何都要这样做?

python dictionary

16
推荐指数
4
解决办法
2万
查看次数

标签 统计

python ×3

dictionary ×2

eval ×1