我的问题是:如何确定已分割的旋转矩形几何图形的哪一边Aside和哪一边是分割该几何图形的任意边的“左”和“右”边?BsideLineString
LineString出于此问题的目的,“左”和“右”被定义为按顺序从一个节点“行走”到另一个节点时分离器的左侧和右侧。
我创建了这个函数,用于将任意几何图形(非集合)分割为两侧shapely- “左”和“右”:
import shapely.geometry as geo
import shapely.ops as ops
def splitLR(geom, splitter):
"""Split a geometry into a 'left' and 'right' side using the shapely API"""
if not isinstance(splitter, geo.LineString):
raise TypeError("The splitter must be a LineString")
if not splitter.is_simple:
raise ValueError("Only simple splitter objects allowed")
if hasattr(geom, "__iter__"):
raise ValueError("Geometry collections not allowed")
geom_extents = geo.GeometryCollection([geom, splitter]).minimum_rotated_rectangle
sides = ops.split(geom_extents, splitter)
try:
Aside, Bside = sides …Run Code Online (Sandbox Code Playgroud) 我有这样的东西(非常简单):
# mymodule.py
from typing import TypedDict, cast
D=TypedDict('D', {'x':int, 'y':int})
d = {}
d['x']=1
d['y']=2
d = cast(D, d)
Run Code Online (Sandbox Code Playgroud)
但 mypy 抱怨道:
mymodule.py:9: error: Incompatible types in assignment (expression has type "D", variable has type "Dict[str, int]") Found 1 error in 1 file (checked 1 source file)
将普通字典转换为子类型不应该是有效的吗TypedDict?如果不是,“构建”字典然后声明其类型的正确方法是什么?
请注意,这是非常简单的;实际上,字典是根据比上面给出的更复杂的算法构建的。
更新:即使我更改变量名称而不是尝试转换类型,问题似乎仍然存在。
# mymodule.py
from typing import TypedDict, cast
D=TypedDict('D', {'x':int, 'y':int})
d = {}
d['x']=1
d['y']=2
dd: D = d
Run Code Online (Sandbox Code Playgroud)
error: Incompatible types in assignment (expression has type …
我正在学习namedtuple.我想找到一种方法,使用该._replace方法,更新namedtuple它们所在的所有外观.
假设我有一个节点列表,以及这些节点定义的元素列表(双节点波束,四节点四边形)和边界("一个节点"元素).
我正在玩这个:
from collections import namedtuple as nt
Node = nt('Node', 'x y')
Beam = nt('Beam', 'i j')
Quad = nt('Quad', 'i j k l')
Boundary = nt('Boundary', 'b')
#Define some nodes:
n1 = Node(0,0)
n2 = Node(0,1)
n3 = Node(1,1)
n4 = Node(1,0)
#And some other things using those nodes:
q1 = Quad(n1,n2,n3,n4)
b1 = Boundary(n1)
be1 = Beam(n1,n4)
Run Code Online (Sandbox Code Playgroud)
现在,如果我换成n1新的Node:
n1 = n1._replace(x=0.5,y=0.5)
print(n1) # Node(x=0.5,y=0.5)
Run Code Online (Sandbox Code Playgroud)
其他所有项目均未更新:
print(b1) # Boundary(b=Node(x=0, …Run Code Online (Sandbox Code Playgroud) TL/DR:我有一个关于如何在下面执行此操作的游戏计划; 但是,我想知道我的计划是否会被证明过于复杂,以及在开始构建这个项目之前需要考虑哪些额外的考虑因素.虽然我不是一个经验丰富的程序员,但我不是要求代码; 我要求有经验的Word VBA程序员反馈我的整个想法/方法是否是一个巨大的错误.
我有一个文档"模板"(还不是模板文件类型 - 我希望如下所述创建它)用于报告.该报告分为不同部分:
Letter to the Client
Table of Contents
Section I
Title Page
Body
1.0
2.0
Section II
Title Page
Body
1.0
2.0
Appendix A
Title Page
Body
Appendix B
Title Page
Body
Run Code Online (Sandbox Code Playgroud)
我希望每个主要的"metasection"(例如Letter,Section I,Section II,Appendices)具有不同的样式和格式.这可以通过为每个元集具有多个样式来实现,例如:
Normal-Letter
Normal-SectionI
Normal-Appendices
Heading1-Letter
Heading1-SectionI
Heading1-Appendices
Run Code Online (Sandbox Code Playgroud)
这很快就会变得无法管理.
为了避免用户不得不通过大量的样式来找到正确的样式(并且值得注意的是,如果这个报告的用户必须这样做,他们可能不会使用样式AT ALL),这将是不错的如果我可以有相同的样式名称(例如,Normal)取决于它找到的文档的哪个部分.或者换句话说,我希望文档具有多个样式集,具体取决于部分.
用户体验的目标是:
Normal样式,Heading1样式等.Modify Style对话框或其他方式编辑样式时,将更新已注册的特定于部分的样式定义.我在VBA中如何做到这一点的初步想法是:
Normals和Heading1s等样式注册表.在Python中,一个变量或文字后跟一个悬挂的逗号是一个 - tuple:
1, # (1,)
Run Code Online (Sandbox Code Playgroud)
...以及一系列以逗号分隔的变量/文字(无论它们是否后跟悬挂的逗号)也是tuple:
1,2, # (1,2)
1,2 # (1,2)
Run Code Online (Sandbox Code Playgroud)
但是,在可调用/函数内部,此语法的处理方式不同,因为逗号用于分隔参数:
bool(5>6,) # False - 5>6 == False
bool((5>6,)) # True - (5>6,) is a non-empty tuple (always True - contents ignored)
Run Code Online (Sandbox Code Playgroud)
第一行似乎只是忽略了悬挂的逗号.第二行创建一个 - tuple(如预期的那样).这也适用于用户定义的函数(不知道它为什么不会):
def f(arg):
pass
f(1,) # No Error
Run Code Online (Sandbox Code Playgroud)
还要考虑以下行为assert(这是一个语句,而不是一个函数):
assert 5>6 # AssertionError, as expected
assert(5>6) # AssertionError, as expected
assert 5>6, # SyntaxError: invalid syntax
assert(5>6,) # SyntaxWarning: assertion always true, perhaps remove parentheses?
assert 5>6, …Run Code Online (Sandbox Code Playgroud) 我所追求的是一种确定发电机是否"正在运行"的方法.
我对"当前正在运行"的定义是:
next或者.send(None)某些其他迭代操作,例如for循环,先前已在生成器上执行,AND.throw(some_error)由于一些新的回路启动而被捕获并且不会耗尽发电机;没有回路或yield from处理错误通常会耗尽发电机).我知道没有办法(或者至少是一种简单易行的方法)在生成器中"窥视"并查明它是否会StopIteration在下一次迭代中升起.这与发电机的性质是对立的,而不是我所追求的.
假设我有一些生成器,g由一些生成器函数创建,f:
def f():
'''Lots of 1s.'''
print('I am now running.')
while True:
try:
signal = yield 1
if signal:
break
except GeneratorExit:
raise # important so that closing the generator doesn't cause a RuntimeError
except Exception:
print('caught exception!')
Run Code Online (Sandbox Code Playgroud)
我们可以这样"初始化"生成器:
>>> g = f()
>>> next(g)
I am now running.
1
# OR:
>>> …Run Code Online (Sandbox Code Playgroud) 下面的代码工作(编辑:实际上,事实证明它没有!),但我不喜欢块return True之后出现的挂起语句try: except:.
class MySlottedClass(object):
def __new__(klass, **slots):
klass.__slots__ = []
for k in slots:
klass.__slots__.append(k)
return super(MySlottedClass,klass).__new__(klass)
def __init__(self, **slots):
for k,v in slots.items():
setattr(self,k,v)
super(MySlottedClass,self).__new__()
def __eq__(self, other):
for slot in self.__slots__:
try:
assert getattr(self, slot) == getattr(other,slot), "Not Equal"
except (AssertionError, AttributeError):
return False
return True
##Testing
##Note that the above class definition is just a skeleton
##The below objects are created using 4 different but identically defined classes
##In the actual …Run Code Online (Sandbox Code Playgroud) 人们可以使用魔法从另一台笔记本运行 Jupyter 笔记本%run:
%run my_notebook.ipynb
Run Code Online (Sandbox Code Playgroud)
但是,我有希望在 python 变量中运行的笔记本的路径和名称,notebook_name.
是否可以使用%run魔法来运行此笔记本?如果没有,我还可以如何使用变量中包含的名称来运行笔记本str?
这里有点像 VBA 新手。
我很清楚如何ShapeRange使用单个或多个Shape对象创建一个:
Dim sht As Worksheet
Set sht = MySht
'
'*Add some shapes*
'
Dim shprng As ShapeRange
Set shprng = sht.Shapes.Range(Array(1,2,3))
Run Code Online (Sandbox Code Playgroud)
有没有办法将工作表上所有当前存在的形状添加到shprng?换句话说,是否有ShapeRange从Shapes对象返回 a 的方法......?像这样的东西:
Set shprng = sht.Shapes.Range.SelectAll '<--- Does not work: Type Mismatch
Set shprng = sht.Shapes '<--- Same error
Set shprng = sht.Shapes.Range '<--- Error: Argument not optional
Run Code Online (Sandbox Code Playgroud)
谢谢!
Python新手在这里.
在学习Python时,我遇到了一些非常好的,简洁的代码,例如:
[d[k] for k in d]
Run Code Online (Sandbox Code Playgroud)
我可以立即看到这些表达式有很多可能性("这些类型"含义包含在a中[]).
我不能确定什么这种表达是叫,所以我无法寻找关于如何使用它的信息.对于一些知识渊博的人来说,指导我学习Python文档或讨论这些文档的其他资源,或者提供一些如何有效使用它们的建议会很棒.