注册 登录
编程论坛 Python论坛

求助帖,不明白函数为啥能调用成功

是2014 发布于 2020-01-13 12:27, 2875 次点击
程序代码:
def cmul(*ip):

    product = 1
    for i in ip:
        product *= i
    return product

print(eval("cmul({})".format(input())))


不明白cuml()函数中输入的明明是个字符串,为啥还能运行成功呢?难道是eval()函数去掉双引号了吗?

-----------------------------------------------------------------------------------
我测试后发现问题可能出现在format()函数,那我就更不明白了为啥会出现如下情况
>>> "{}".format("1,2,3")
'1,2,3'
>>> "({})".format("1,2,3")
'(1,2,3)'

为啥第二行命令结果是“(1,2,3)”,难道不应该是"("1,2,3")吗?

[此贴子已经被作者于2020-1-13 17:21编辑过]

9 回复
#2
xianfajushi2020-01-13 12:55
这好像是PYTHON代码,略看过有点印象,书写方式不同罢了,各种语言书写格式都有区别。
#3
是20142020-01-13 13:00
回复 2楼 xianfajushi
是的,是python,就是不明白print(eval("cmul({})".format(input())))为啥能调用cmul()呢,我认为传入的是字符串啊,为啥其实是数字呢
#4
xianfajushi2020-01-13 13:07
这种语言没去学,不过可查资料:https://www. 看到最后好像有类似使用双引号语句例子。
这个很好验证,你把函数名称改一下运行就知道了。

[此贴子已经被作者于2020-1-13 13:08编辑过]

#5
wp2319572020-01-13 14:27
回复 楼主 是2014
没有百度一下eval的用法吗

>>> eval("5*6+9-8/2/3")
37.666666666666664
#6
wp2319572020-01-13 14:32
回复 楼主 是2014
这个函数功能就是输入的所有数字都连乘起来(用逗号分割)
e:\pytest>python ex23.py
7,8,9,5
2520

e:\pytest>python ex23.py
1,2,3,5
30

e:\pytest>python ex23.py
1,2,3,4,5,6,7,8,9,10
3628800

e:\pytest>python ex23.py
3,4,6,7,8,9
36288
#7
是20142020-01-13 15:56
回复 5楼 wp231957
可能是我没写明白,我知道eval()函数能去掉最外层的双引号,我想问的是print(eval("cmul({})".format(input())))中cmul()函数中输入的是个字符串啊,也就是说input函数接收了输入,输出应该是个字符串,然后用format函数传到{}槽中,那执行起来岂不是cuml(字符串),这怎么会运行成功呢
#8
fall_bernana2020-01-13 17:16
回复 7楼 是2014
程序代码:

>>> "ss"*2
'ssss'
>>>
#9
是20142020-01-13 17:22
回复 8楼 fall_bernana
大神,我没明白,请细说一下
#10
fall_bernana2020-01-14 09:08
以下是引用是2014在2020-1-13 17:22:29的发言:

大神,我没明白,请细说一下

程序代码:

def cmul(*ip):

    product = 1
    print(ip,type(ip))
    for i in ip:
        product *= i
        print(product)
    return product

print(cmul("ss"))

如果你只是不明白cmul函数传入了字符串为啥能运行.你把每个变量打印出来你就能明白了.
1