您可以使用“json.dumps()”来漂亮地打印Python字典

  |   0 评论   |   0 浏览   |   给我丶鼓励
# 对于dicts的标准字符串repr很难阅读:
>>> my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
>>> my_mapping
{'b': 42, 'c': 12648430. 'a': 23}  # �0�6

# “json”模块可以做得更好:
>>> import json
>>> print(json.dumps(my_mapping, indent=4, sort_keys=True))
{
    "a": 23,
    "b": 42,
    "c": 12648430
}

# 注意,这只适用于包含基本类型的字典(检查“pprint”模块):
>>> json.dumps({all: 'yup'})
TypeError: keys must be a string

使用“timeit”模块测量一小段Python代码的执行时间

  |   0 评论   |   0 浏览   |   给我丶鼓励
# “timeit”模块允许您度量一小段Python代码的执行时间

>>> import timeit
>>> timeit.timeit('"-".join(str(n) for n in range(100))',
                  number=10000)

0.3412662749997253

>>> timeit.timeit('"-".join([str(n) for n in range(100)])',
                  number=10000)

0.2996307989997149

>>> timeit.timeit('"-".join(map(str, range(100)))',
                  number=10000)

0.24581470699922647

dict可用于模拟switch/case语句

  |   0 评论   |   0 浏览   |   给我丶鼓励
# 因为Python拥有一流的函数,所以它们可以用来模拟switch/case语句

def dispatch_if(operator, x, y):
    if operator == 'add':
        return x + y
    elif operator == 'sub':
        return x - y
    elif operator == 'mul':
        return x * y
    elif operator == 'div':
        return x / y
    else:
        return None


def dispatch_dict(operator, x, y):
    return {
        'add': lambda: x + y,
        'sub': lambda: x - y,
        'mul': lambda: x * y,
        'div': lambda: x / y,
    }.get(operator, lambda: None)()


>>> dispatch_if('mul', 2, 8)
16

>>> dispatch_dict('mul', 2, 8)
16

>>> dispatch_if('unknown', 2, 8)
None

>>> dispatch_dict('unknown', 2, 8)
None

Python列表片语法有趣

  |   0 评论   |   0 浏览   |   给我丶鼓励
# Python的列表片语法可以在没有索引的情况下用于一些有趣而有用的事情

# 你可以清除列表中的所有元素:
>>> lst = [1, 2, 3, 4, 5]
>>> del lst[:]
>>> lst
[]

# 您可以替换列表的所有元素,而不需要创建一个新的列表对象:
>>> a = lst
>>> lst[:] = [7, 8, 9]
>>> lst
[7, 8, 9]
>>> a
[7, 8, 9]
>>> a is lst
True

# 您还可以创建列表的(浅)副本:
>>> b = lst[:]
>>> b
[7, 8, 9]
>>> b is lst
False

探讨字节码的幕后

  |   0 评论   |   0 浏览   |   给我丶鼓励
# 您可以使用Python内置的“dis”模块来反汇编函数并检查它们的CPython VM字节码

>>> def greet(name):
...     return 'Hello, ' + name + '!'

>>> greet('Dan')
'Hello, Dan!'

>>> import dis
>>> dis.dis(greet)
2   0 LOAD_CONST     1 ('Hello, ')
    2 LOAD_FAST      0 (name)
    4 BINARY_ADD
    6 LOAD_CONST     2 ('!')
    8 BINARY_ADD
   10 RETURN_VALUE

强化学习平台天授安装并实现DQN算法

  |   0 评论   |   0 浏览   |   夜雨飘零

天授 是一个基于 PyTorch 的深度强化学习平台。

CartPole-v0 是一个很简单的离散动作空间场景,DQN 也是为了解决这种任务。在使用不同种类的强化学习算法前,您需要了解每个算法是否能够应用在离散动作空间场景 / 连续动作空间场景中,比如像 DDPG [LHP+16] 就只能用在连续动作空间任务中,其他基于策略梯度的算法可以用在任意这两个场景中。

避免与虚拟环境的版本冲突

  |   0 评论   |   0 浏览   |   给我丶鼓励
# 虚拟环境("virtualenvs")将项目依赖关系分离开来。
# 它们可以帮助您避免包和Python运行时的不同版本之间的版本冲突。

# 在创建和激活virtualenv之前:“python”和“pip”映射
# 到python解释器的系统版本( Python 2.7)
$ which python
/usr/local/bin/python

# 让我们使用另一个版本的Python创建一个新的virtualenv(Python 3)
$ python3 -m venv ./venv

# virtualenv只是一个“文件夹中的Python环境”
$ ls ./venv
bin      include    lib      pyvenv.cfg

# 激活virtualenv可以配置当前shell会话,
# 以使用来自virtualenv文件夹的python(和pip)命令,而不是全局环境
$ source ./venv/bin/activate

# 请注意,激活一个virtualenv是如何修改shell提示符的,
# 提示中显示了virtualenv文件夹的名称
(venv) $ echo "wee!"

# 使用active virtualenv,“python”命令映射到active virtualenv
# 内部的解释器二进制
(venv) $ which python
/Users/dan/my-project/venv/bin/python3

# 使用“pip”安装新的库和框架,现在就会将它们安装到virtualenv沙箱
# 中,这样全局环境(以及其他virtualenvs)就不会被修改
(venv) $ pip install requests

# 要回到全局Python环境,请运行以下命令
(venv) $ deactivate

# 看看提示符是如何再次变为“正常”的
$ echo "yay!"

# 停用virtualenv将“python”和“pip”命令翻转回全局环境
$ which python
/usr/local/bin/python