鱼C论坛

 找回密码
 立即注册
查看: 830|回复: 16

[已解决]请教print与return

[复制链接]
发表于 2019-1-15 23:17:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def discounts(old_price,rate):
    final_price = old_price * rate
    old_price = 50
    print('在局部变量中修改后old_price的值是:',old_price)
    return final_price
   
   
old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
discounts(old_price,rate)
new_price = discounts(old_price,rate)
print('全局变量old_price现在的值是:',old_price)
print('打折后的价格是:',new_price)

请输入原价:80
请输入折扣率:0.75
在局部变量中修改后old_price的值是: 50
在局部变量中修改后old_price的值是: 50
全局变量old_price现在的值是: 80.0
打折后的价格是: 60.0
>>>



def A(a,b):
    result = a+b
    return result

>>> A(2,3)
5
>>>


第一个例子中 为什么不管是调用discounts函数,还是将函数给变量  都没有执行return final_price
而第二个例子却执行了return    这是因为print和return在同一个函数里的原因吗
最佳答案
2019-1-16 09:57:25
你的这两个函数是在不同环境下运行的,你的第一个例子是运行的.py文件,第二个例子是直接在IDLE中运行的调用的函数。这两种方式肯定是不一样的。
在IDLE中执行语句或者运行函数都会直接显示其返回值,而不需要print打印。然而运行.py文件,在文件中调用了函数,你需要用print打印函数返回值,才能看到return的结果啊。

直接看你的第一个例子吧。
先不看定义函数部分,从主程序部分开始看,主程序部分第一行,将输入数据转为float赋值给old_price,第二行,将输入数据转为float赋值给rate,这两行在运行结果中是能看到的。
接下来是你疑惑的部分。主程序第三行,你调用了discounts函数,但没有接收函数的返回值,但是实际上函数执行了,可以从运行结果中看出来,运行结果中第三行就是你这次调用函数时,函数内的那句print执行的结果;再看主程序的第四行,你有调用了一次discounts函数,这次把函数返回值final_price赋值给new_price,运行结果的第四行就是函数被调用的时候,函数内部执行print的结果。
你的疑惑是return final_price是否执行。我们继续看你的主程序,程序第五行,print输出,这句的执行结果也就是运行结果的第五行;最后看看主程序的第六行,在这句print语句中,你打印输出了new_price,我们看一下运行结果就知道函数的return final_price是否被执行了,运行结果最后一行中可以看到new_price的值是60.0 。这不就是执行函数之后的final_price的值么?你怎么说return final_price没有被执行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-15 23:28:42 | 显示全部楼层
本帖最后由 凌九霄 于 2019-1-15 23:31 编辑

return 当然有执行,只是你必须用一个变量去接收这个return的值才能被使用,在表现上,它不会有任何反应

a=discounts(old_price,rate)
print(a)

这样你就能看到返回的那个值:final_price
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 23:34:03 | 显示全部楼层
本帖最后由 13572044595 于 2019-1-15 23:36 编辑

return final_price 执行了
你可以把 return final_price 这句代码 去掉,运行试试~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 23:39:26 | 显示全部楼层
13572044595 发表于 2019-1-15 23:34
return final_price 执行了
你可以把 return final_price 这句代码 去掉,运行试试~

我的意思是这一行代码   discounts(old_price,rate)  为什么只执行了 print  没有执行  return   
而第二个例子  也是类似的  A(2,3)确执行了  return  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 23:39:59 | 显示全部楼层
凌九霄 发表于 2019-1-15 23:28
return 当然有执行,只是你必须用一个变量去接收这个return的值才能被使用,在表现上,它不会有任何反应

...

我的意思是这一行代码   discounts(old_price,rate)  为什么只执行了 print  没有执行  return   
而第二个例子  也是类似的  A(2,3)确执行了  return  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 23:42:43 | 显示全部楼层
13572044595 发表于 2019-1-15 23:34
return final_price 执行了
你可以把 return final_price 这句代码 去掉,运行试试~

在调用函数 discounts(old_price,rate)  的时候   为什么只执行了 print  没有执行 return    如果像你说的那样,那不是紧跟着后面会打印    60  吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 23:45:15 | 显示全部楼层
本帖最后由 13572044595 于 2019-1-15 23:49 编辑
hualuo 发表于 2019-1-15 23:39
我的意思是这一行代码   discounts(old_price,rate)  为什么只执行了 print  没有执行  return   
而第 ...


def A():
        x = 1
        return x  
      # return    是把 x 的值,返回给 函数 A,

print(A())                    # 这里调用了 A  才会输出  return 返回的值!



感觉,你是不理解 return  关键字的 作用吧~


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 23:48:58 | 显示全部楼层
13572044595 发表于 2019-1-15 23:45
def A():
        a = 1
        return a        # return    是把 x 的值,返回给 函数 A,

def A(a,b):
    result = a+b
    return result

>>> A(2,3)
5
>>>


discounts(old_price,rate)  和这里的A(2,3)  不是一个意思吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 23:50:23 | 显示全部楼层

    全局变量在使用前一定要先声明,否则就会被当成局部变量。

    在函数中使用全局变量不需要通过参数传递

  1. #!/usr/bin/python
  2. #coding:gbk

  3. def discounts(rate):
  4.     global old_price
  5.     final_price = old_price * rate
  6.     old_price = 50
  7.     print('在局部变量中修改后 old_price 的值是:%d\n' % old_price)
  8.     return final_price

  9. if __name__ == '__main__':   
  10.     global old_price  
  11.     old_price = float(input('请输入原价:'))
  12.     rate = float(input('请输入折扣率:'))
  13.     discounts(rate)
  14.     new_price = discounts(rate)
  15.     print('全局变量 old_price 现在的值是:%d\n' % old_price)
  16.     print('打折后的价格是:%d\n' % new_price)
复制代码


    楼主看看是否是你希望的效果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 23:55:24 | 显示全部楼层
hualuo 发表于 2019-1-15 23:48
def A(a,b):
    result = a+b
    return result

是啊!你有什么疑问吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 23:56:08 | 显示全部楼层
jackz007 发表于 2019-1-15 23:50
全局变量在使用前一定要先声明,否则就会被当成局部变量。

    在函数中使用全局变量不需要通过参 ...

谢谢,新手自学,我再研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-16 01:58:20 | 显示全部楼层
hualuo 发表于 2019-1-15 23:56
谢谢,新手自学,我再研究研究

第二个例子,楼主直接在IDLE里面输入了A(2,3)吧,如果是在IDLE里面执行的,虽然没有print语句,也会把return的值打印出来给你看的。就像在IDLE里面输入2+3,直接返回5,而不需要写print(2+3)一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-16 09:57:25 | 显示全部楼层    本楼为最佳答案   
你的这两个函数是在不同环境下运行的,你的第一个例子是运行的.py文件,第二个例子是直接在IDLE中运行的调用的函数。这两种方式肯定是不一样的。
在IDLE中执行语句或者运行函数都会直接显示其返回值,而不需要print打印。然而运行.py文件,在文件中调用了函数,你需要用print打印函数返回值,才能看到return的结果啊。

直接看你的第一个例子吧。
先不看定义函数部分,从主程序部分开始看,主程序部分第一行,将输入数据转为float赋值给old_price,第二行,将输入数据转为float赋值给rate,这两行在运行结果中是能看到的。
接下来是你疑惑的部分。主程序第三行,你调用了discounts函数,但没有接收函数的返回值,但是实际上函数执行了,可以从运行结果中看出来,运行结果中第三行就是你这次调用函数时,函数内的那句print执行的结果;再看主程序的第四行,你有调用了一次discounts函数,这次把函数返回值final_price赋值给new_price,运行结果的第四行就是函数被调用的时候,函数内部执行print的结果。
你的疑惑是return final_price是否执行。我们继续看你的主程序,程序第五行,print输出,这句的执行结果也就是运行结果的第五行;最后看看主程序的第六行,在这句print语句中,你打印输出了new_price,我们看一下运行结果就知道函数的return final_price是否被执行了,运行结果最后一行中可以看到new_price的值是60.0 。这不就是执行函数之后的final_price的值么?你怎么说return final_price没有被执行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-1-16 19:09:41 | 显示全部楼层
sunrise085 发表于 2019-1-16 09:57
你的这两个函数是在不同环境下运行的,你的第一个例子是运行的.py文件,第二个例子是直接在IDLE中运行的调 ...

太感谢了,今天白天我也查了很多资料,再看了你的解释,讲的很详细,对print和return有了更深的理解和认识,感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-16 19:14:53 | 显示全部楼层
hualuo 发表于 2019-1-15 23:48
def A(a,b):
    result = a+b
    return result

感谢!和你说的一样,我把

def A(a,b):
    result = a+b
    return result
A(2,3)

全部写到py文件里,再执行就没有打印出5了

这是IDLE默认的一个功能吗还是怎样的,我在书上都没有注意到过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-16 20:16:32 | 显示全部楼层
def funC():
    try:
        print(98)
        return 'OK'
    finally:
        print(98)

print(funC())

打印:
98
98
OK
>>>

这里的print(funC())   首先funC()函数调用打印98   98,调用之后,'OK'就返回给funC(),最后一步是执行print语句,将funC()的值打印出来,所以才是98   98   OK这样的顺序?  我这样的理解对吗???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-21 14:22:06 | 显示全部楼层
hualuo 发表于 2019-1-16 19:14
感谢!和你说的一样,我把

def A(a,b):

为何我在py文件里return也有返回值
Snip20190321_5.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 05:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表