Python中这段Def定义为何无法生效?
一直用 def 定义一段执行过程,那能否定义一段文字呢?
经常需要对某些数字作保留 2 位小数和千分位处理,于是想 def 一个,以帮助简化代码
def fmtnb(x): x = decimal.Decimal('%.2f' % x) x = format(x, ',')
后续例如写这 4 行的时候
totala = decimal.Decimal('%.2f' % totala) totala = format(totala, ',')
totalb = decimal.Decimal('%.2f' % totalb) totalb = format(totalb, ',')
可以直接写成 fmtnb(totala) fmtnb(totalb)
但发现实际用起来,根本不起作用,求教应该怎么改动?
Python中这段Def定义为何无法生效?
你没有把 x 给 return 回来
我无法理解你的问题。
写成这样我看了下也是无效
def fmtnb(x):
x = decimal.Decimal(’%.2f’ % x)
x = format(x, ‘,’)
return x
实际用 fmtnb(totala) 并不执行
lambda 或许适合你的需求
语句原本是可以完成效果的,我只是想知道为什么用 def 定义后,简化就不执行了。顺便说句,提问正文和回复我都用了 tab/空格,贴上来后代码却没有保留正常的格式。
>>> fmtnb(10111)
'10,111.00’
结果不是正常的吗
发新贴,选择 markdown 格式,或许好些。
当然,写 gist 里,链接贴过来是最佳
没报任何错误,就是根本没执行。
我直接定义后,接下来直接用 fmtnb(10111)倒是执行的。在离开这个定义几百行以外的地方用,没有执行,目标不是具体数值,而是一个变量,类似于用了 fmtnb(total)。
弱弱地猜一下,楼主是否没弄清楚 Python 的变量传递?要这样 total = fmtnb(total) ,没有像 C++的那种引用变量,也不是宏。
这边是我的结果:
$ ipython
In [1]: import decimal
In [2]: def fmtnb(x):
…: x = decimal.Decimal(’%.2f’ % x)
…: x = format(x, ‘,’)
…: return x
…:
In [3]: x = 10111
In [4]: y = fmtnb(x)
In [5]: y
Out[5]: ‘10,111.00’
还真是!非常感谢!
一直只把 def 用在执行过程,所以都是类似 fmtnb(total),以为这样调用就算完成了变量传递。
#9 万万没想到…
额外扩展一点,哪天遇到需要设置千分位和保留小数的朋友可能会搜到。
楼主本质是想简化代码,现在发现更好的作法应该是采用 Python3.6 以上支持的 F-strings
f’{subtotal:,.2f}’ #保留 2 位小数,设置千分位
f’{subtotal:.2f}’ #保留 2 位小数
f’{subtotal:.0f}’ #不保留小数
这样可以直接在 print 结果中显示需要的形式,但又不影响原来 subtotal 的数值,不会被转化为字符串

