我开始使用XLWings(根本不是我喜欢Excel,但这是我必须做的事情).问题是我找不到让Python打开工作簿而不显示它的方法.
看起来旧XLWings 0.6.4中Workbooks的构造函数是xlwings.Workbook,其中一个参数是一个标记'app_visible'(参见http://docs.xlwings.org/en/v0.6.4/api.html).
但是,在新的v0.9.2工作簿中已被Book取代,而Book没有任何此类标志(http://docs.xlwings.org/en/stable/api.html).App对象确实拥有它,我认为这是要走的路.所以我编码:
import xlwings as xw
app = xw.App(visible=False)
filename = os.path.join(PATH_EXCEL_SAMPLES, r"rangosConDatos_sample01.xls")
book = xw.Book(filename)
# Do stuff with the info in the book
book.close() # Ya puedo cerrar el libro.
app.kill()
Run Code Online (Sandbox Code Playgroud)
但是,令人遗憾的是,什么时候
book = xw.Book(filename)
Run Code Online (Sandbox Code Playgroud)
执行app的'visible'属性突然变为True,并显示该书.我不知道这是一个期望的功能还是一个意外的行为.无论如何,任何想法我应该怎么做?
我希望socket.socket使用新属性扩展Python (特别是a queue.Queue,但可能是其他任何东西).我试图决定是否应该使用继承或组合,但在某些时候两个都有问题,我不知道如何解决:
A)如果我使用继承,例如:
class MySocket(socket.socket):
def __init__(self, *args, **kwargs):
socket.socket.__init__(self, *args, **kwargs)
self.queue = queue.Queue()
Run Code Online (Sandbox Code Playgroud)
当我使用像这样的操作时,我遇到了问题
connection, client_address = s.accept()
Run Code Online (Sandbox Code Playgroud)
因为accept套接字的方法返回类型的对象socket.socket,而不是类型的对象MySocket,我不知道如何将一个转换为另一个.如果有一个简单的OOP方式来做到这一点,我不知道.
B)如果我使用组合代替,之前的问题很容易解决:
class MySocket(socket.socket):
def __init__(self, true_socket):
self.true_socket = true_socket
self.queue = queue.Queue()
Run Code Online (Sandbox Code Playgroud)
我会简单地实现类似的东西
def accept(self, *args, **kwargs):
con, cli = socket.socket.accept(self, *args, **kwargs)
return self.__class__(con), cli
Run Code Online (Sandbox Code Playgroud)
但后来我又遇到了另一个问题.当我需要做的时候
readable, writable, exceptional = select.select(inputs, outputs, inputs)
Run Code Online (Sandbox Code Playgroud)
select适用于socket.socket.随着A)版本,我希望它可以就像是工作,但组成,现在MySockets都没有的情况下socket.socket,select被打破了.
那么,什么是最好的,pythonistic方法呢?
编辑:我忘了说我尝试的第一件事是直接将属性添加到`socket.socket'的实例:
s = …Run Code Online (Sandbox Code Playgroud) 使用 Postscript 多年后,我现在正在学习 SVG。PS 有一个功能我到目前为止还无法复制:零宽度线。在 PS 中,零宽度的线始终可见:PostScript 将零线宽转换为最小可打印宽度。在屏幕上,当缩放时,它们永远不会引起任何思考,但无论比例如何,它们都是可见的。当我想要渲染非常细的线条,而不用担心我要使用的最终分辨率时,我就使用了它们,结果证明它们非常有用。
然而,在官方 SVG 文档(https://www.w3.org/TR/svg-lines/)中它说:
零值将导致不绘制任何笔画。负值无效。
SVG 中有没有一种方法可以构建 PostScript 意义上的零宽度线条?
我想了解为什么会发生某些事情。我需要在 Python 中实现整数平方根 (isqrt(64) = 8 = isqrt(80))。我确信这种天真的方法:
def isqrt(n):
return int(math.sqrt(n))
Run Code Online (Sandbox Code Playgroud)
当传递的 n 是平方数时,偶尔会失败,假设 Python 转换为浮点数,然后对浮点数执行平方根计算。例如,调用 isqrt(13*13) 我预计在转换为浮点数并计算 sqrt 后,您可能会得到类似 12.999999843 的结果,在转换为整数后会得到 12。
但是我执行了大循环和小循环测试值,并且总是得到正确的结果。毕竟,似乎没有必要为整数实现特殊的平方根!
不理解让我感到困扰,就像当本应起作用的事情失败时一样。为什么会这样?
python中还有一个关于整数平方根的问题:Integer square root in python
在那里定义的 isqrt() 中,一个 +0.5 被添加到 n,我想这正是为了解决我提到的我期待的问题,但在特定情况下找不到。
编辑:忘记指定,我使用的是 Python 2.7
我不理解一段代码的行为,涉及一个在不同对象中调用方法的lambda函数的理解列表.它发生在一个大型程序中,所以对于这个问题,我做了一个荒谬的玩具案例来表明我的观点:
class Evaluator(object):
def __init__(self, lft, rgt):
self.lft = lft
self.rgt = rgt
def eval(self, x):
return self.lft + x * (self.rgt - self.lft)
if __name__ == "__main__":
ev1 = Evaluator(2, 3)
ev2 = Evaluator(4, 5)
ev3 = Evaluator(6, 7)
funcs = [lambda x:ev.eval(x+0.1) for ev in (ev1, ev2, ev3)]
print([f(0.5) for f in funcs])
Run Code Online (Sandbox Code Playgroud)
我得到的输出是[6.6, 6.6, 6.6],这意味着它是ev3一直被评估的方法.而不是[2.6, 4.6, 6.6]像我期望的那样.但令我惊讶的是,如果我摆脱lambda函数,行为就好了:
class Evaluator(object):
def __init__(self, lft, rgt):
self.lft = lft
self.rgt = rgt
def eval(self, …Run Code Online (Sandbox Code Playgroud) python ×4
composition ×1
excel ×1
inheritance ×1
integer ×1
lambda ×1
math.sqrt ×1
oop ×1
python-2.7 ×1
sockets ×1
stroke ×1
svg ×1
visibility ×1
width ×1
xlwings ×1