0%

第四章 推导与生成

1.用列表推导取代map与filter

python中可以根据某个序列或可迭代对象派生出一份新列表,称为列表推导:

image-20221031193539378

它还可以过滤原列表,把某些输入值对应的计算结果从输出结果中排除:

image-20221031193745000

相当于同时使用了map与filter,但是比那种写法要更易懂

image-20221031194038187

字典与集合也有相应的推导机制,分别叫做字典推导与集合推导

image-20221031194128079

阅读全文 »

如何在远程服务器使用gym的render()

SMB环境github主页:https://github.com/Kautenja/gym-super-mario-bros

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from nes_py.wrappers import JoypadSpace
import gym_super_mario_bros
from gym_super_mario_bros.actions import SIMPLE_MOVEMENT
import gym
env = gym_super_mario_bros.make('SuperMarioBros-v0')
env = JoypadSpace(env, SIMPLE_MOVEMENT)
env = gym.wrappers.Monitor(env, "recording")

done = True
for step in range(5000):
if done:
state = env.reset()
state, reward, done, info = env.step(env.action_space.sample())
env.render()

env.close()
阅读全文 »

openai gym环境

初始化环境

1
2
import gym
env = gym.make('CartPole-v0')

环境交互

1
2
3
4
5
6
7
8
9
10
11
12
13
import gym
env = gym.make("LunarLander-v2", render_mode="human")
env.action_space.seed(42)

observation, info = env.reset(seed=42)

for _ in range(1000):
observation, reward, terminated, truncated, info = env.step(env.action_space.sample())

if terminated or truncated:
observation, info = env.reset()

env.close()

https://user-images.githubusercontent.com/15806078/153222406-af5ce6f0-4696-4a24-a683-46ad4939170c.gif

阅读全文 »

Kafka

cfa79b30e57548c894fa06ed0bdf3c03

三个组成元素:

  • 生产者
  • Kafka集群
  • 消费者

分区分配

一个Consumer Group中有多个Consumer,一个Topic有多个Partition。不同组内消费者相互独立,相同组内进行协作。一个分区只能对应一个消费者,为了尽量确保消息的有序执行,消费者数量不能超过分区数量。当组内消费者发生变化时,会触发分区分配策略。

阅读全文 »

PYTHONIC思维

1.PEP 8风格

空格相关

  • 用空格表示缩进,而不用制表符(python是空白有意义的语言,要统一tab缩进空格个数)
  • 语法相关缩进用4个空格
  • 每行不超过79个字符
  • 长表达式多余行要缩进4个空格
阅读全文 »

列表与字典

1. 对序列做切片

  • 实现__getitem__与__setitem__的类都可以切割

  • 形式为somelist[start: end],左闭右开

  • -1 代表最后一个元素

  • 从头省略0,至尾省略len(list)

阅读全文 »

第三章 函数

1. 不要把函数返回的多个值拆分到三个以上的变量中

函数返回的其实是元组

image-20221021180433708

返回多个返回值会导致代码行过长,或者返回值混乱

阅读全文 »

Git

集中式与分布式

Git 属于分布式版本控制系统,而 SVN 属于集中式。


集中式版本控制只有中心服务器拥有一份代码,而分布式版本控制每个人的电脑上就有一份完整的代码。

集中式版本控制有安全性问题,当中心服务器挂了所有人都没办法工作了。

阅读全文 »

Java IO

一、概览

Java 的 I/O 大概可以分成以下几类:

  • 磁盘操作:File
  • 字节操作:InputStream 和 OutputStream
  • 字符操作:Reader 和 Writer
  • 对象操作:Serializable
  • 网络操作:Socket
  • 新的输入/输出:NIO
阅读全文 »