python - 替代全局变量
问题描述
我有一个递归函数,它反转一个整数。反转后的 Integer 不能以 0 开头,例如:12340 变成 4321。
res = 0
base = 1
def reverse(n):
global res
global base
if n > 0:
reverse(n // 10)
res = res + (n % 10) * base
base = base * 10
return res
这段代码有效,但只有一次,因此我想摆脱全局变量。我想到了一个辅助函数,在函数内部reverse(n)
,但我无法让它正常工作。我已经尝试了将近一个小时,并希望最终看到解决方案。
解决方案
使用辅助方法完全有可能:
def reverse_recursive(i: int) -> int:
def helper(i: int, result_up_to_now: int) -> int:
if i == 0:
return result_up_to_now
return helper(i // 10, result_up_to_now * 10 + (i % 10))
return helper(i, 0)
assert reverse_recursive(123456789) == 987654321
即使没有:
def reverse_recursive_nohelper(i: int, result_up_to_now=0) -> int:
if i == 0:
return result_up_to_now
return reverse_recursive_nohelper(i // 10, result_up_to_now * 10 + (i % 10))
assert reverse_recursive_nohelper(123456789) == 987654321
但后者当然可能被某人误用/误解。
只是为了比较,非递归版本:
def reverse_straight(i: int) -> int:
result = 0
while i != 0:
result = result*10 + i % 10
i //= 10
return result
assert reverse_straight(123456789) == 987654321
推荐阅读
- github - 为什么 GitHub 应用程序使用非对称加密来获取访问令牌,而使用对称加密来签署 webhook?
- r - 故障排除:系统错误(latexCmd,intern = TRUE,ignore.stderr = TRUE):运行命令出错 - RStudio 中的 tikzDevice
- ssl - 使用python爬虫发送亚马逊修改邮政编码接口时遇到疑似TLS指纹风控
- java - 使用 selenium java 我想自动化一个调查页面。问题出现在一个带有几个子问题的问题上
- google-cloud-composer - 在 Airflow Composer 上修改 bash 文件的权限
- javascript - 在验证器之间使用 Vuelidate 的动态范围
- sql - Laravel 在控制台中从表中显示数组,即使具有空值
- internationalization - 如何使用 in18 和 vue.JS 将响应式数据嵌入到翻译中?
- python - 将 csv 从 Stream 上传到 DropBox
- python - 尽管 Python Pandas 中有共享值,但不能将 df2 合并到 df1 吗?