神奇的 eval 和 exec 函数

    1. 1. _l1 = eval("list('abc')")
    2. 2. _l2 = [1, 2, 3]
    3. 3.
    4. 4. for i, j in zip(_l1, _l2):
    5. 5. exec('%s = %d' % (i, j))
    6. 6.
    7. 7. print(a, b, c)

    上述代码中,_l1的值获取可以经由 eval函数将 一句代码实现,等同于

    1. 1. _l1 = list('abc')

    而第5行可以实现赋值操作,直接从 list 内获取变量名,不需要预先定义,这个在存在多次类似赋值操作的场景下非常适用。

    例如:读数据库参数的配置文件

    1. 1. server=127.0.0.1:6666
    2. 2. user=testuser
    3. 3. password=test
    4. 4. database=fortest
    5. 5. charset=utf8
    1. 1. with open("config.txt", 'r') as _file:
    2. 2. _line = _file.readline().strip()
    3. 3. while _line:
    4. 4. exec("%s = '%s'" % (_line.split('=')[0], _line.split('=')[1]))
    5. 5. _line = _file.readline().strip()
    6. 6.
    7. 7. import pymssql
    8. 8. conn = pymssql.connect(server, user, password, database, charset)
    9. 9. cursor = conn.cursor()