已知如下 python 代码文件(已经是全部内容):
def foo():
print("start")
xxxxxx
print("end")
if __name__ == "__main__":
print("1111")
foo()
print("2222")
问题:请将 xxxxx 替换为一行 python 代码,使这个 python 文件执行后最终输出只有 1111 和 2222
替换代码要求:只能有一个语句,只有一行;多个语句组合的不行( import 也算一个语句,因此类似 import sys; sys.xxx 的不行)
引申问题:上述替换代码要求放宽为“允许引入自带库并允许多条语句”,是否还有别的方案?
1
uorz 7 小时 15 分钟前 via Android
Gemini: yield.
|
2
maolon 7 小时 10 分钟前
|
3
uorz 7 小时 8 分钟前 via Android
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!)* |
4
uorz 7 小时 6 分钟前 via Android
For script: yield
For repl: return print("\033[1A\033[2K", end="") |
5
leiuu 6 小时 54 分钟前
gemini 网页:直接答对✅
claude 客户端 sonnet 4.6:经过提示答对✅ chatgpt 网页免费版:经过提示答对✅ 提示类似:“思路不对啊 有一个关键字可以做到“ |
6
uorz 6 小时 45 分钟前 via Android 现在这个时代,面试这种 tricky 问题根本没有任何意义,跟以前 c 时代考各种指针写法一个道理。AI 比你我更了解各种语言细节。
|
7
CatCode 6 小时 36 分钟前
审核代码的人:这么写代码的,还提交进代码库的,建议直接开了。
|
8
tianjiyao 6 小时 31 分钟前
奇淫巧技不足道也。。。
|
9
lchkid 6 小时 25 分钟前
|
10
yuruizhe 6 小时 24 分钟前
这纯考 python 语法细节啊
不涉及任何算法 下次可以整个考查装饰器的题目 |
11
weixind 6 小时 13 分钟前
你们面试目的是为了考倒候选人?
|
12
whoosy 6 小时 10 分钟前 何意味?麻烦你说下公司名,我避下雷
|
13
blakezhaothinks 6 小时 2 分钟前
这种奇技淫巧每种语言都有很多,拿来做面试题属实逆天,就算 CPython 核心开发者也不一定了解每个细节。
|
14
blakezhaothinks 5 小时 59 分钟前
@blakezhaothinks 不过 yield 也算不上奇技淫巧,当我没说 😄
|
15
soleils 5 小时 58 分钟前
你面试是为了招人来干活还是为了出些"奥数"题目把人考倒看乐子?
|
16
xFrank OP 我错了,给大家带来了不好的影响,麻烦管理员删除帖子。怎么 @管理员?
|
17
uorz 5 小时 51 分钟前 via Android
我相信你内心是希望面试人回答 yield 的。经过提示,Gemini 还给出了`[__import__('os').system('cls' if __import__('os').name == 'nt' else 'clear'), print("1111"), __import__('sys').exit(print("2222"))]`这样的答案。是不是面试人没回答到心坎里去就 pass 掉?
|
18
kaliawngV2 4 小时 54 分钟前 via Android
@xFrank 你也不希望被 v 友骂吧,v 我 50 ,我帮你删帖
|
19
deplives 4 小时 30 分钟前
emmmm 用这个当面试题,赶紧发下公司名给网友避避雷
|
20
back0893 4 小时 29 分钟前
? 这种面试题是为了什么?
|
21
jackOff 4 小时 28 分钟前
? 这种面试题是为了什么?
|
22
fkdtz 3 小时 53 分钟前 |
23
mynameislihua 3 小时 49 分钟前 via Android
招个人机去你们公司
|
24
bu9 3 小时 46 分钟前
你居然想用八股难为 ai ,还不认为自己想法有问题?
|
25
mrji1990 3 小时 44 分钟前
毫无意义
|
26
Vaspike 3 小时 44 分钟前
面试题的角度来说确实不太合理, 但对我来说我确实学习到了一个 py 语法
|
27
hackerfans 3 小时 31 分钟前
get
|
28
Gilfoyle26 3 小时 27 分钟前
opus 4.6:总有人觉的自己比我聪明,结果就是啪啪打脸。
|
30
NoobPhper 3 小时 23 分钟前
你门公司叫啥啊
|
32
qiuhang 1 小时 22 分钟前
yield 把它变成迭代器这种东西,用来面试的话,纯纯脑筋急转弯,典型的小聪明
|
33
qiuhang 1 小时 21 分钟前
yield 把它变成迭代器进而避开函数调用这种东西,用来面试的话,纯纯脑筋急转弯,典型的小聪明
|