V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ipwx  ›  全部回复第 64 页 / 共 200 页
回复总数  3997
1 ... 60  61  62  63  64  65  66  67  68  69 ... 200  
2021-07-18 15:10:38 +08:00
回复了 plko345 创建的主题 Python 大量的 try 应该怎么复用
@plko345 啊对,你如果有这个需求。。。那就不要放 else 呗。是我想当然了
2021-07-18 14:39:04 +08:00
回复了 plko345 创建的主题 Python 大量的 try 应该怎么复用
3:

from contextlib import contextmanager


@contextmanager
def auto_commit(session):
....try:
........yield session
....except Exception:
........session.rollback()
........raise
....else:
........session.commit()


with auto_commit(session):
....session.add(sth)
2021-07-18 14:37:53 +08:00
回复了 plko345 创建的主题 Python 大量的 try 应该怎么复用
1 2 3 4 都行
----

抛砖引玉,1:

def auto_commit(session, f):
....try:
........ret = f()
....except Exception:
........session.rollback()
........raise
....else:
........session.commit()
........return ret

auto_commit(session, lambda: session.add(sth))


2:

from functools import wraps

def auto_commit(f):
....@wraps(f)
....def wrapper(session, *args, **kwargs):
........try:
............ret = f(session)
........except Exception:
............session.rollback()
............raise
........else:
............session.commit()
............return ret
....return wrapper


@auto_commit
def my_fn(session):
........session.add(sth)

my_fn(session)
@junkun @no1xsyzy 弱弱的说一句,有个现代 IDE 把关(比如 CLion ),不忽略 IDE 的检查,基本上 UB 对象调用在刚写出来就会标出来。。。 所以只要程序员脑子不出问题,这方面就真不是问题。

如果你不相信你的程序员的脑子,那确实 C++ 不适合。
@levelworm 用类包一下就好用了
@levelworm 不过裸指针一把梭的情况也是有的,那叫 ObjectPool 对象池。一般用在算法内部分配数据结构节点的时候。先分配一大块内存,用就切,退出函数把大块内存给一起释放。
@levelworm

1. 想好所有架构开始写,这才是对的。不然你项目规模根本不可能突破一万行。
2. 裸指针一把梭?泄露就泄露?朋友,习惯了这种写法,你项目永远做不大啊。
2021-07-16 11:40:27 +08:00
回复了 aqtata 创建的主题 程序员 你们都有自己的 utils 吗?
写到的时候去自己 GitHub,从项目里面找。我自己成型的项目还不少。
@wutiantong 有些人在编程语言上特别执拗,有种宗教狂热的感觉。比如王垠,不是瞧不起非 FP 语言么。安啦安啦
@junkun const char* 可以隐式转换为 bool 这个还真让我踩过。不过一个函数会同时在同样的位置接受这两个类型的参数还真挺少见。
@ysc3839 @levelworm 另外我觉得 shared_ptr 最合适的场景其实是只读对象或者数据对象。一个对象被创建出来,记录了一些信息,发给多个持有者,这些持有者的生命周期都不一样,并且在错综复杂的多线程环境中。这种时候用 shared_ptr 就很合适。

比如进程里面通过消息队列来传递消息的这种场景。
@levelworm 在任何你想用 new T 并且只有一个人拥有它的地方都能用 unique_ptr 。

至于 shared_ptr,主要是不特定多个持有者要共享同一个对象才会用,这些持有者到底谁先死都不知道的时候还是有必要的。在多线程并发程序里面有时候还是躲不过的,比如 boost::asio
@GeruzoniAnsasu 是的是的。因为过于熟悉这套我甚至忘了这才是 c++ 最值得称赞的东西,只记得用起来很好用。

不过楼上几个老哥说起的 Rust 不知道有没有这个特性,看上去好像也有点意思。
@Austaras 哦我知道了。我项目用了个类似 NumPy 的 C++ tensor template library 。

https://github.com/xtensor-stack/xtensor

这个 Rust 估计不太行。别的不说,这个库超级依赖 C++ template metaprogramming,在接口一致的情况下可以分情况自动使用 simd 。
@Austaras ummm 我又不熟 Rust,我怎么和你讨论这个问题。

反正前段时间我找 lock-free non-blocking mpmc queue 的时候,github 资料很多,论文也是用 C++ 写的。Rust…… 它太新了啊,这种偏门玩意儿万一找不到怎么办呢?对吧。
@YUCOAT 老哥,C++ coroutines 是个半成品啊,面向库作者的。就好像只教了你极限的概念,却不教你怎么用微积分,这看得懂才怪。我又不想 contribute to boost,那我选择等一等。
@ericgui 其实 shared_ptr 很好用,相信我。
2021-07-15 13:04:38 +08:00
回复了 mer 创建的主题 C++ C++ 中 Lambda 对变量的捕获居然是在声明时就做了
楼主可能和 JS 搞起来了。但是 JS 那种其实不是更奇怪吗。

for (int i=0; i<10; ++i) {
task_list.emplace([i] () { std::cout << i << std::endl; });
}

这种用法不挺符合常识吗?
@dqzcwxb 呃我查了一下,zgc 最大停顿是 10ms 啊,不太行。我这边要求每个请求都非常稳定低延迟,这不是概率问题,是全部都要。
@dqzcwxb 啊看错了一个单位。0.05ms 确实挺厉害,不过我这边也没有 jvm 大神不懂这些
1 ... 60  61  62  63  64  65  66  67  68  69 ... 200  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3056 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 12:38 · PVG 20:38 · LAX 05:38 · JFK 08:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.