You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在格式化字符串中使用作为变量的函数?

问题解决:函数变量在格式化字符串中显示内存地址而非执行结果

你遇到的问题核心是:在f-string中直接引用函数变量时,Python会输出该函数的repr表示(也就是内存地址字符串),只有显式调用函数(比如dot())才会执行函数逻辑。

但你的efdot是无限循环打印的逻辑,直接在input提示里调用dot()会让程序卡在循环里,没法正常显示输入提示。因此需要先调整函数逻辑,让它能返回单个交替符号,而非持续打印:

修改后的代码示例

import time
from itertools import cycle

# 用cycle创建循环迭代器,自动交替"⦾"和"⦿"
dot_iterator = cycle("⦾⦿")

def efdot():
    # 每次调用返回下一个符号
    return next(dot_iterator)

dot = efdot
# 在f-string中调用dot()获取符号,而非直接引用函数变量
var = input(f"{dot()} Hello World {dot()}")

逻辑说明

  1. cycle会生成一个无限迭代器,每次调用next()都会返回下一个字符,实现符号交替的效果。
  2. 修改后的efdot不再是无限循环打印,而是返回单个字符,这样在f-string中调用dot()就能直接获取需要显示的符号。
  3. 运行代码后,输入提示会显示⦾ Hello World ⦿(下次启动会切换为⦿ Hello World ⦾),而非函数的内存地址。

如果一定要保留原函数的0.5秒延迟切换效果,不能在input提示里直接实现(因为input提示是一次性生成的),可以用线程单独运行动态提示,不阻塞输入:

import time
from itertools import cycle
import threading

dot_iterator = cycle("⦾⦿")

def print_dynamic_prompt():
    while True:
        print(f"\r{next(dot_iterator)} Hello World {next(dot_iterator)}", end="")
        time.sleep(0.5)

# 启动守护线程运行动态提示,不阻塞主进程的input
threading.Thread(target=print_dynamic_prompt, daemon=True).start()

var = input("")

内容的提问来源于stack exchange,提问作者Zed Unknown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:01:01