小编zan*_*ngw的帖子

Python - 装饰器错误

我是python的新手,现在我正在学习装饰器.这是我正在研究的python装饰器示例:

def makeHtmlTag(tag, *args, **kwds):
    def real_decorator(fn):
        css_class = " class='{0}'".format(kwds["css_class"]) \
                                     if "css_class" in kwds else ""

        def wrapped():
            return "<"+tag+css_class+">" + fn() + "</"+tag+">"
        return wrapped
    return real_decorator

@makeHtmlTag(tag="i", css_class="italic_css")
def hello():
    return "hello world"

print hello()
Run Code Online (Sandbox Code Playgroud)

当我用wrapped()一行代替函数时,如下所示:

return "<"+tag+css_class+">" + fn() + "</"+tag+">"
Run Code Online (Sandbox Code Playgroud)

我得到TypeError.这是为什么?

python decorator python-decorators

0
推荐指数
1
解决办法
108
查看次数

在Go中使用base64.StdEncoding或base64.RawStdEncoding解码base64字符串

我们知道,在 gobase64.StdEncodingbase64.RawStdEncoding. 如何正确使用其中之一来解码一个base64字符串?如果调用了不正确的编码方法。例如,如果RawStdEncoding使用 来解码一个字符串,就会出现StdEncoding错误。illegal base64 data at input byte xxx

每个文档

const (
    StdPadding rune = '=' // Standard padding character
    NoPadding  rune = -1  // No padding
)
Run Code Online (Sandbox Code Playgroud)

RawStdEncoding 是标准原始、未填充的 Base64 编码,如 RFC 4648 第 3.2 节中定义。这与 StdEncoding 相同,但省略了填充字符。

我们是否应该通过检查 padding 是否结束来区分它们StdPadding?代码片段

    lastByte := s[len(s)-1:]
    if lastByte == string(base64.StdPadding) {
        base64.StdEncoding.DecodeString(s)
    } else {
        base64.RawStdEncoding.DecodeString(s)
    }
Run Code Online (Sandbox Code Playgroud)

这是一种优雅的方式吗?或者我错过了什么?解码 Base64 字符串的优雅方法是什么?

更新:

也许是一种通过错误检查来完成此操作的原始方法,如下所示

    rawByte, err := base64.StdEncoding.DecodeString(s)
    if err …
Run Code Online (Sandbox Code Playgroud)

base64 go

0
推荐指数
1
解决办法
3891
查看次数

为什么对象初始化和销毁​​应该在用户定义的函数中完成?

在某些C++项目中,对象初始化销毁由用户定义的函数处理,而不是由constructorsdestructors.

class A  
{
public:
    A();
    virtual ~A();

    void Initialize(){
        // do some real object initialization here
    };
    void CleanUp(){
        // do some real object destroy here
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我可以说明为什么要这样做的一些原因:

  • 延迟初始化,以提高性能
  • 虚方法不能在构造函数和析构函数中使用
  • 目的地中没有参数,也无法覆盖
  • 构造函数和析构函数中不会抛出任何异常

我想知道是否还有其他情况我们应该在用户定义的函数中进行对象初始化和销毁​​?

c++

-2
推荐指数
1
解决办法
138
查看次数

为什么json.RawMessage扩大mongoDb文档的大小?

以下代码尝试通过将新文档插入到mongoDB中 go.mongodb.org/mongo-driver

    data := "this is test string blablablablablablabla"
    type Doc struct {
        Version int "json:version, bson:version"
        Data   string   "json:data, bson:data"
    }
    dd := Doc{Version: 21, Data: data}
    dObj, _ := json.Marshal(dd)

    queryFilter := bson.M{"version": 1}
    update1 := bson.M{"$set": bson.M{"version": 1, "data": json.RawMessage(dObj)}}

    // insert data with json.RawMessage
    _, err := db.Mongo("test").Collection("test_doc1").UpdateOne(context.Background(), queryFilter, update1, options.Update().SetUpsert(true))
    if err != nil {
        fmt.Println("failed to insert doc1")
    }

    update2 := bson.M{"$set": bson.M{"version": 1, "data": (dObj)}}

    // insert data without json.RawMessage
    _, err = …
Run Code Online (Sandbox Code Playgroud)

go mongodb bson

-3
推荐指数
1
解决办法
147
查看次数

标签 统计

go ×2

base64 ×1

bson ×1

c++ ×1

decorator ×1

mongodb ×1

python ×1

python-decorators ×1