uorz

uorz

V2EX 第 270576 号会员,加入于 2017-11-27 19:28:33 +08:00
根据 uorz 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
uorz 最近回复了
我相信你内心是希望面试人回答 yield 的。经过提示,Gemini 还给出了`[__import__('os').system('cls' if __import__('os').name == 'nt' else 'clear'), print("1111"), __import__('sys').exit(print("2222"))]`这样的答案。是不是面试人没回答到心坎里去就 pass 掉?
现在这个时代,面试这种 tricky 问题根本没有任何意义,跟以前 c 时代考各种指针写法一个道理。AI 比你我更了解各种语言细节。
For script: yield
For repl: return print("\033[1A\033[2K", end="")
I completely get why you wouldn't want REPL clutter! Seeing `<generator object foo at 0x...>` splashed across your screen ruins the clean `1111` and `2222` output you're aiming for.

But here is the good news: **you actually won't see the generator object printed, even in a REPL.** Here is a reality check on how Python environments handle this:

### 1. The Block Rule (Why you are already safe)
In a standard Python REPL, Jupyter Notebook, or IPython, the interpreter only auto-prints the result of an expression if it's evaluated at the **top level**.

Because your `foo()` call is nested inside the `if __name__ == "__main__":` block, the REPL treats the entire block as a single execution unit. It does not automatically echo the return values of expressions inside that block. It will silently create the generator, discard it, and move right along to `print("2222")`.

### 2. Testing Standalone
If your concern is that you are calling `foo()` *by itself* in the REPL just to test it (outside of the `if` block), then yes, the REPL will aggressively print the generator. To suppress that, simply assign it to a throwaway variable:

```python
_ = foo()
```

---

### The "Chaotic Evil" Terminal Hack (No `yield` required)
If you absolutely despise the `yield` solution and want a completely different 1-line hack that isn't a generator, you can use an ANSI escape sequence.

Replace `xxxxxx` with:

```python
return print("\033[1A\033[2K", end="")
```

**Why this works:**
1. Python executes `print("start")`, which outputs `start` and moves the cursor to the next line.
2. The `return print(...)` line executes.
3. `\033[1A` tells your terminal to move the cursor **up** one line (back to where `start` is).
4. `\033[2K` tells your terminal to **erase** that entire line.
5. `end=""` prevents this hacky print statement from adding a new line of its own.
6. The `return` immediately exits the function, so `print("end")` is never executed.

The terminal completely deletes the evidence that `print("start")` ever happened, leaving you with just `1111` and `2222`. *(Note: This is a fun terminal UI trick, so it only works in environments that support ANSI formatting!)*
Gemini: yield.
传统编程语言太死了,必须要考虑到各种情况才能保证程序按既定规范运行下去,而现在的纯 LLM Agent 又太活了,在本地模型上跑一会儿就不知道飞到啥地方去了,我观察了一下主要是信息太多本地小模型过载了。wenli 希望能在二者之间找到一个平衡点。可以认为 wenli 的运行时也是一种 agent 框架,可以让代理能采用人类的知识同时保持一定的自主性。
Wenli 并非设计给 AI agent 直接使用的,相反地,更像一种原生支持调用 LLM 的框架。就像 Claude code 或者 Gemini 的 plan mode,我们希望能显示地把云端强力模型制定的计划表示为 wenli 语言描述的运行规则,然后交由本地模型在 wenli 的运行时框架中执行这个计划。当然,这个计划也可以方便人类程序员进行编辑,或者大概表述运行逻辑后由云端大模型进行翻译为符合语言规范的 wenli 代码。为了方便本地小模型进行高效运行,我们还设计了一系列减少上下文 token 的机制。
3 月 13 日
回复了 uorz 创建的主题 奇思妙想 AI native 或许是中文编程的未来
本来是英文写的,用 Gemini 翻译成中文的
2025 年 4 月 28 日
回复了 uorz 创建的主题 分享创造 简洁 Git 分支合并图
@gitjcc 这就是这个工具的作用,把真实的混乱分支简化到关心的分支/提交上面。我也想推强制的分支管理,但是不是每个人都有这个 sense 的,阻力很大
2023 年 4 月 8 日
回复了 Andor_Chen 创建的主题 推广 送几本“通透”的《流畅的 Python (第 2 版)》
+1
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1034 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 18:47 · PVG 02:47 · LAX 11:47 · JFK 14:47
♥ Do have faith in what you're doing.