我是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.这是为什么?
我们知道,在 gobase64.StdEncoding或base64.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) 在某些C++项目中,对象初始化销毁由用户定义的函数处理,而不是由constructors和destructors.
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)
以下是我可以说明为什么要这样做的一些原因:
我想知道是否还有其他情况我们应该在用户定义的函数中进行对象初始化和销毁?
以下代码尝试通过将新文档插入到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)