标签: with-statement

在Delphi中使用"with"创建的引用对象实例

有没有办法引用使用"with"语句创建的对象实例?

例:

with TAnObject.Create do
begin
  DoSomething(instance);
end;
Run Code Online (Sandbox Code Playgroud)

DoSomething将使用实例引用,就像您将实例从变量声明引用传递给创建的对象一样.

例:

AnObject := TAnObject.Create;
Run Code Online (Sandbox Code Playgroud)

谢谢.

delphi with-statement

8
推荐指数
2
解决办法
5799
查看次数

C#:如何在F#中将扩展方法定义为"with"?

F#有一个方便的功能"with",例如:

type Product = { Name:string; Price:int };;
let p = { Name="Test"; Price=42; };;
let p2 = { p with Name="Test2" };;
Run Code Online (Sandbox Code Playgroud)

F#创建关键字"with"作为记录类型默认是不可变的.

现在,是否可以在C#中定义类似的扩展?看起来有点棘手,就像在C#中我不确定如何转换字符串

Name="Test2"
Run Code Online (Sandbox Code Playgroud)

代表或表达?

c# extension-methods f# immutability with-statement

8
推荐指数
1
解决办法
397
查看次数

如何使用contextmanagers作为实例变量

我如何使用Contextmanager实例变量?我们假设我有一些Connection课程,必须在破坏时关闭.如果我将它作为ContextManager实现,我可以做到.

with Connection() as c:
    c.write('FOO')
    c.ask('BAR?')
Run Code Online (Sandbox Code Playgroud)

它会在销毁时自动关闭.但是如果我想在__init__另一个类中使用它,例如下面的例子呢?

class Device(object):
    def __init__(self):
        self.connection = Connection()  # Must be closed on destruction.
Run Code Online (Sandbox Code Playgroud)

我不希望它在构造函数的退出时关闭,它应该在对象被破坏时死亡.我可以使用,__del__但这有它的缺点.习惯于在C++中使用RAII它让我感到困惑.

那么在这种情况下,最好的方法是什么?

python destructor with-statement

8
推荐指数
1
解决办法
176
查看次数

在sys.stdout中使用Python'with'语句

我总是使用with语句打开并写入文件:

with open('file_path', 'w') as handle:
    print >>handle, my_stuff
Run Code Online (Sandbox Code Playgroud)

但是,有一个实例,我需要能够更灵活,并写入sys.stdout(或其他类型的流),如果提供而不是文件路径:

所以,我的问题是:有没有办法使用with真实文件和使用语句sys.stdout

请注意,我可以使用以下代码,但我认为这违背了使用目的with:

if file_path != None:
    outputHandle = open(file_path, 'w')
else:
    outputHandle = sys.stdout

with outputHandle as handle:
    print >>handle, my_stuff
Run Code Online (Sandbox Code Playgroud)

python stdout stream with-statement

8
推荐指数
2
解决办法
2691
查看次数

计算另一个工作表中的行数

我查看了建议的问题以找到问题的答案.最近的问题称为:计算不同Excel工作表中不同Excel工作表 计数行数的行数

该问题的解决方案对我不起作用.

我试图计算不同工作表中的范围内的行数而不是活动工作表.这是我的代码:

Sub verbflashcards()

Dim wordcount As Long

With Worksheets("Verbs")
wordcount = .Range(Cells(4, 1), Cells(4, 1).End(xlDown)).Rows.Count
End With

MsgBox (wordcount)
End Sub
Run Code Online (Sandbox Code Playgroud)

我有一个名为Verbs的工作表,它是工作簿中的第二个工作表.我试过了:

With Verbs
With Sheet2
With Sheets("Verbs")
With Sheets("Sheet2") 
Run Code Online (Sandbox Code Playgroud)

他们似乎都没有工作.

excel vba excel-vba with-statement

8
推荐指数
2
解决办法
1万
查看次数

上下文管理器的Unittest失败,出现AttributeError:__ exit__

我正在尝试理解使用context-manager(带语句)对代码进行单元测试的正确方法.

这是我的示例代码:

class resources():
    def __init__(self):
        self.data = 'at-init'

    def __enter__(self):
        self.data = 'at-enter'
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.data = 'at-exit'
Run Code Online (Sandbox Code Playgroud)

这是我的unittest代码:

import unittest
import ctxmgr     

class TestResources(unittest.TestCase):
    def setUp(self):
        pass

    def test_ctxmgr(self):
        with ctxmgr.resources as r:
            self.assertEqual(r.data, 'at-enter')
Run Code Online (Sandbox Code Playgroud)

示例代码运行正常,但上面的unittest代码失败,

======================================================================
ERROR: test_ctxmgr (__main__.TestResources)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_ctxmgr.py", line 12, in test_ctxmgr
    with ctxmgr.resources as r:
AttributeError: __exit__

----------------------------------------------------------------------
Ran 1 test in 0.003s

FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)

导致此错误的原因是什么?我错过了什么?

python with-statement python-unittest

8
推荐指数
1
解决办法
2910
查看次数

如何使用`with`语句检查对象是否已创建?

我想确保该类仅在"with"语句中实例化.

即这个是好的:

with X() as x:
 ...
Run Code Online (Sandbox Code Playgroud)

这不是:

x = X()
Run Code Online (Sandbox Code Playgroud)

我该如何确保这样的功能?

python with-statement

8
推荐指数
3
解决办法
2468
查看次数

在with语句表达式中引发的异常会发生什么?

我对Python with声明的理解如下:

withstatement = with+ expression + as+ target + :+ suit

  1. 执行表达式并返回上下文管理器
  2. 上下文管理器__enter__返回一个目标值
  3. 套件已执行.
  4. __exit__调用上下文管理器的方法

我知道可以在step2和step3中处理异常,我的问题是如果在执行表达式的step1期间抛出异常,我可以获得上下文管理器吗?

如果不是,这是否意味着该with声明只是确保诉讼被正确执行和关闭?

就像with open("file") as f,如果文件不存在会发生什么?

python with-statement contextmanager

8
推荐指数
1
解决办法
128
查看次数

测量时间的 Python 上下文管理器

我正在努力制作一段代码,允许测量在“with”语句中花费的时间,并将测量的时间(浮点数)分配给“with”语句中提供的变量。

import time

class catchtime:
    def __enter__(self):
        self.t = time.clock()
        return 1

    def __exit__(self, type, value, traceback):
        return time.clock() - self.t

with catchtime() as t:
    pass
Run Code Online (Sandbox Code Playgroud)

这段代码留下t=1而不是 clock() 调用之间的区别。如何解决这个问题?我需要一种从 exit 方法中分配新值的方法。

PEP 343更详细地描述了联系管理器的工作原理,但我不了解其中的大部分内容。

python with-statement

8
推荐指数
5
解决办法
5312
查看次数

在cx_Oracle中使用with cursor on cursor

cx_Oracle包含__enter____exit__Connection对象上,而不是在游标对象.因此,我到处使用它来包装游标:

class CursorWrapper(object):
    def __init__(self, connection):
        self.connection = connection
        self.cursor = None

    def __enter__(self):
        self.cursor = self.connection.cursor()
        return self.cursor

    def __exit__(self, exc_type, exc_value, traceback):
       self.cursor.close()
Run Code Online (Sandbox Code Playgroud)

然后,当我想要一个光标

with CursorWrapper(cnx) as cursor:
    cursor.execute("whatever sql statement")
Run Code Online (Sandbox Code Playgroud)

它非常适合我的需求.

但是,我当时想知道什么可以阻止__enter____exit__方法直接添加到cx_Oracle中?

或者是否有更好的方法将游标与上下文管理一起使用,这可以解释为什么它没有在模块中定义?

编辑:对不起,我刚刚找到答案.我可以使用contextlib.closing.

import contextlib
with contextlib.closing(cnx.cursor()) as cursor:
Run Code Online (Sandbox Code Playgroud)

python cx-oracle with-statement

8
推荐指数
1
解决办法
899
查看次数