GVKun编程网logo

在with语句中获取要执行的命令块(with语句通过什么技术管理python中的资源)

9

本文将为您提供关于在with语句中获取要执行的命令块的详细介绍,我们还将为您解释with语句通过什么技术管理python中的资源的相关知识,同时,我们还将为您提供关于c#–switch语句中的变量初始

本文将为您提供关于在with语句中获取要执行的命令块的详细介绍,我们还将为您解释with语句通过什么技术管理python中的资源的相关知识,同时,我们还将为您提供关于c# – switch语句中的变量初始化问题、c# – 在Switch语句中使用String、C#switch语句中的变量声明、git on windows 需要执行的命令的实用信息。

本文目录一览:

在with语句中获取要执行的命令块(with语句通过什么技术管理python中的资源)

在with语句中获取要执行的命令块(with语句通过什么技术管理python中的资源)

在阅读with语句(链接)的规范时,我想尝试一些事情。这不是针对任何生产代码或任何内容的,我只是在探索,因此,如果这是一个坏主意,请不要太苛刻。

我想做的是在上面的链接文档中抓取一个名为“
BLOCK”的片段,然后在对的调用中进行修改__enter__。(在动机和总结部分开始之后,请参阅链接的文档。)

这个想法是创建我自己的即时本地命名空间。像这样:

with MyNameSpace(some_object):    print a #Should print some_object.a    x = 4 #Should set some_object.x=4

基本上,我希望with块内的语句从属于的局部变量和分配约定some_object

在我的特定情况下,some_object可能是一个特殊的数据数组,它具有我自己的按列操作或类似的操作。在这种情况下,类似的话x = y + 5 ify > 4 else y -2可能是幕后花哨的NumPy向量化操作,但是我不需要显式调用some_object这些方法的接口。在命名空间中,表达式应该“正常工作”(但是我将其定义为在MyNameSpace类中进行推断)。

我的第一个想法是以某种方式中断该with过程并掌握该try块中包含的代码。然后__enter__在调用该代码时解释该代码,并try用其他内容替换该代码块中的代码(也许pass可以,但可能会some_object保留新的更改后的变量恢复到原始变量作用域)。

一个简单的测试用例将是这样的:

my_dict = {''a'':3, ''b'':2}with MyNameSpace(my_dict):    print a # Should print 3    x = 5 # When the block finishes, my_dict[''x''] should now be 5

我对这个想法是否已经存在感兴趣。

我知道分配变量的最佳做法。这是一个宠物项目,因此请假设,仅出于这个想法,我们可以忽略最佳实践。即使您不想以这种方式分配变量,在我当前的项目中它也可能很有用。

编辑

为了弄清我可能想做的棘手的事情,并解决以下声称无法完成的回答,请考虑以下示例文件testLocals.py

my_dict = {''a'':1, ''b'':2}m = locals()print m["my_dict"][''a'']m["my_dict"][''c''] = 3print my_dictclass some_other_scope(object):    def __init__(self, some_scope):        x = 5        g = locals()        some_scope.update(g)        some_scope["my_dict"]["d"] = 4sos = some_other_scope(m)print my_dictprint x

当我非交互式运行它时,它给出以下内容:

ely@AMDESK:~/Desktop/Programming/Python$ python testLocals.py1{''a'': 1, ''c'': 3, ''b'': 2}{''a'': 1, ''c'': 3, ''b'': 2, ''d'': 4}5

答案1

小编典典

尝试这个。

import sys class MyNameSpace(object):    def __init__(self,ns):        self.ns = ns    def __enter__(self):        globals().update(self.ns)    def __exit__(self, exc_type,exc_value,traceback):        self.ns.update(sys._getframe(1).f_locals)my_dict = {''a'':3, ''b'':2} with MyNameSpace(my_dict) as ns:    print(a) # Should print 3    x = 5 # When the block finishes, my_dict[''x''] should now be 5print(my_dict[''x''])

c# – switch语句中的变量初始化问题

c# – switch语句中的变量初始化问题

我所拥有的是简单的switch语句
Control myControl;
switch(x)
{
     case TabType.Edit:
     {
         myControl= ...;
     }

     case TabType.View:
     {

         myControl= ...;
     }
 }

 myPageView.Controls.Add(myControl);

在这种情况下编译器告诉我

local variable myControl might not be initialized before accessing

那么,避免这种情况的最佳方法是什么?

一种选择是在switch语句之前初始化myControl.但在这种情况下,我再做一次不必要的初始化.

情况1:

Control myControl = null;
switch(x)
{
     case TabType.Edit:
     {
         myControl= ...;
     }

     case TabType.View:
     {

         myControl= ...;
     }
 }

 myPageView.Controls.Add(myControl);

下一个选项是使用默认值更改第二种情况.之后编译器将“理解”myControl无论如何都将被初始化并且不会抛出异常.

案例2:

Control myControl;
switch(x)
{
     case TabType.Edit:
     {
         myControl= ...;
     }

     default:
     {

         myControl= ...;
     }
 }

 myPageView.Controls.Add(myControl);

但是这种情况看起来并不那么好,因为在我的枚举中添加一些新属性之后,它将对所有其他类型执行默认操作(开发人员很容易忘记在此处更改代码,或者可能没有必要为其他枚举类型初始化myControl) .

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

解决方法

您的代码示例表明您将始终在切换块后使用myControl变量.如果是这种情况,那么您应该预先初始化变量,或者添加一个默认子句(如您所述).

如果您担心可能会引入新的枚举值,那么您可以在default子句中抛出一个有意义的异常.当您稍后尝试取消引用变量时,这将保护您不会出现更模糊的NullReferenceException.

c# – 在Switch语句中使用String

c# – 在Switch语句中使用String

我试图基于两个字符串创建一个switch语句.但是,这似乎不起作用,并始终评估为默认值.那么,有人可以告诉我正确的方法吗?

这是我的(大概是不正确的)代码:

string GetPieceCode(GameObject piece)
{
    string pieceCode = "";
    Debug.Log(piece.gameObject);
    pieceCode = piece.ToString().Remove(2,2);
    Debug.Log(pieceCode);
    return pieceCode;
}    

Debug.Log(pieceType);
switch (pieceType)
{
    case "BP":
        Debug.Log("Black Pawn Selected");
        break;
    case "WP":
        Debug.Log("White Pawn Selected");
        break;
    case "WB":
        print("White Bishop Selected");
        break;
    case "BB":
        print("Black Bishop Selected");
        break;
    case "WK":
        print("White Knight Selected");
        break;
    case "BK":
        print("Black Knight Selected");
        break;
    case "WR":
        print("White Roook Selected");
        break;
    case "BR":
        print("Black Rook Selected");
        break;
    case "WKing":
        print("White King Selected");
        break;
    case "WQueen":
        print("White Queen Selected");
        break;
    case "BKing":
        print("Black King Selected");
        break;
    case "BQueen":
        print("Black Queen Selected");
        break;
    default;
        debug.log("Error");
        break;
}

初始Debug.Log(pieceType)打印出一个2字符的字符串代码,表明它与案例值匹配.所以我不知道出了什么问题.

此外,print()和Debug.Log()在此上下文中是相同的.

解决方法

问题在于我认为GameObject片段只返回Unity中分配给它的3个字符名称.因此,我假设要获得代码的前2个,我只需要删除第一个数字.

但是,我的所有调试尝试都受到以下事实的影响:我认为(错误地)BP(UnityEngine.GameObject)作为输出仅仅是BP作为带有一些添加的调试信息的字符串.

生成片段代码的正确方法是:

string GetPieceCode(GameObject piece)
    {
        string pieceCode = "";
        Debug.Log(piece.gameObject);
        pieceCode = piece.ToString().Substring(0,2);
        Debug.Log(pieceCode);
        return pieceCode;
    }

谢谢大家的帮助.

编辑:虽然不是原始问题的一部分,但我分别使用区分大小写将Kings和Queens的代码更改为B | Wk和B | Wq.

C#switch语句中的变量声明

C#switch语句中的变量声明

这个问题已经在这里有了答案

C#中的案例声明块级别声明空间 (5个答案)

8个月前关闭。

为什么在C#switch语句中,对于在多种情况下使用的变量,仅在第一种情况下才声明它?

例如,以下内容引发错误“此范围中已经定义了一个名为’variable’的局部变量”。

switch (Type){    case Type.A:            string variable = "x";                break;    case Type.B:            string variable = "y";                break;}

但是,根据逻辑,如果类型为,则不应单击初始声明Type.B。switch语句中的所有变量是否都在单个作用域中,并且是否在处理任何逻辑之前创建/分配了它们?

答案1

小编典典

我相信这与变量的整体范围有关,它是在开关级别定义的块级别范围。

就个人而言,如果您在示例中将值设置为开关内的某项确实有任何好处,则无论如何都需要在开关外声明它。

git on windows 需要执行的命令

git on windows 需要执行的命令

<!-- lang: shell -->
git config --global core.filemode false

git config --global core.autocrlf true

第一句是忽略文件权限的改动。

第二句是将文件 checkout 时自动把 LF 转成 CRLF,check in 时自动把 CRLF 转成 LF

今天关于在with语句中获取要执行的命令块with语句通过什么技术管理python中的资源的分享就到这里,希望大家有所收获,若想了解更多关于c# – switch语句中的变量初始化问题、c# – 在Switch语句中使用String、C#switch语句中的变量声明、git on windows 需要执行的命令等相关知识,可以在本站进行查询。

本文标签: