我的同事在条件下使用这种方式
if len(A) is not 0:
print('A is not empty')
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个
if A:
print('A is not empty')
Run Code Online (Sandbox Code Playgroud)
什么是prop-cons论点?
她的观点是,第一种方式是更直接的方式来展示她究竟想要什么.我的观点是我的方式更短.
第一种方式比我的方式快2倍:
>>> import timeit
>>> timeit.timeit('len(A) is not 0', setup='A=[1,2,3]')
0.048459101999924314
>>> timeit.timeit('bool(A)', setup='A=[1,2,3]')
0.09833707799998592
Run Code Online (Sandbox Code Playgroud)
但
>>> import timeit
>>> timeit.timeit('if len(A) is not 0:\n pass', setup='A=[1,2,3]')
0.06600062699999398
>>> timeit.timeit('if A:\n pass', setup='A=[1,2,3]')
0.011816206999810674
Run Code Online (Sandbox Code Playgroud)
第二种方式快6倍!我很困惑如何if工作:-)
我想一次初始化配置,然后在我的PySpark项目的许多模块中使用它。
我看到两种方法。
main.py:
with open(sys.argv[1]) as f:
config = json.load(f)
df = load_df(config)
df = parse(df, config)
df = validate(df, config, strict=True)
dump(df, config)
Run Code Online (Sandbox Code Playgroud)
但是将一个外部参数传递给每个函数似乎并不美观。
config.py
import sys
import json
with open(sys.argv[1]) as f:
config = json.load(f)
Run Code Online (Sandbox Code Playgroud)
main.py
from config import config
df = load_df()
df = parse(df)
df = validate(df, strict=True)
dump(df)
Run Code Online (Sandbox Code Playgroud)
并在每个模块中添加行
from config import config
Run Code Online (Sandbox Code Playgroud)
看起来更美,因为严格来讲config不是函数的参数。这是它们执行的一般上下文。
不幸的是,PySpark pickle config.py试图在服务器上执行它,但是没有将sys.argv传递给他们!所以,我在运行时看到错误
File "/PycharmProjects/spark_test/config.py", line 6, in <module>
CONFIG_PATH = sys.argv[1]
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
在PySpark中处理从文件加载的常规配置的最佳实践是什么?
我玩了一个很棒的沙盒塔防游戏Mindustry。
很酷的事情是您可以使用游戏嵌入式处理器块来控制单元。你可以命令他们建造积木、在地图上巡逻、包围最弱的敌人、治疗朋友并将弹药带到炮塔。
有一些示例如何对此类块进行“编程”:
一些“文档”可以在这里找到:
问题是处理器“语言”非常原始。只有一个控制语句:jump-to-line-if-statement-is-true. 没有 if/else 语句,没有 for 循环,没有函数和类。因此,使用这些指令编写任何复杂的东西几乎是不可能的。
所以我的想法是让我自己的简单编译器从“真正的”编程语言(带有 if、else、for、function、struct/class)到这些原始指令,然后将其导出到游戏中。
我的第一个想法是在 Mindustry 中实现 JVM 或 LLVM-IR VirtualMachine 来运行编译后的字节码,但它看起来很复杂。这些字节码中有很多指令。
然后我考虑实现 Lua 或简化的 Python 解释器,它看起来是可能的,但无论如何这是一项艰巨的工作:-)
我很好奇最简单的方法:-) 也许有基于 ~10 条指令或一些示例项目的简化 JVM/LLVM 字节码,或者在 Brainfuck 或一些有限的架构上运行 Lua/Python :-)
====嵌入式CPU语言====
所以控制指令集是:
op add result x y~ result=x+y- 将变量设置为 arifmethics 操作的结果 + - * / …compiler-construction interpreter bytecode llvm-ir jvm-bytecode