鱼C论坛

 找回密码
 立即注册
查看: 3951|回复: 14

[已解决]关于python中greeting的用法一些疑问

[复制链接]
发表于 2020-10-16 17:28:35 | 显示全部楼层 |阅读模式

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

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

x
greeting[1]为什么可以取到Hello,'Hello'[1]和‘greeting’[1]来取字母e有什么区别,运行效率哪个更快,为什么?
希望大佬解答,谢谢。
最佳答案
2020-10-19 17:51:40
本帖最后由 hrp 于 2020-10-19 18:04 编辑
点滴天明如梦 发表于 2020-10-19 17:27
这个是一个思考题题目所以才使用“Hello”【1】,
print我是没想到用其他更好的,这个受教了,你有什么 ...


不用打印,也不用赋值,取值即丢弃。print向控制台输出耗时占比很大,而且又不稳定,耗时是波动的,测试耗时尽量避免这些。
如果不考虑实用性,直接取值确实比从变量取值要快。
  1. import time
  2. start1 = time.perf_counter()
  3. greeting = 'Hello'
  4. for  i in range(100000):
  5.         greeting[1]
  6. end1 = time.perf_counter()

  7. start2 = time.perf_counter()
  8. for  i in range(100000):
  9.         'Hello'[1]
  10. end2 = time.perf_counter()

  11. print('greeting程序的运行时间为:%.6f秒'%(end1-start1))
  12. print('Hello程序的运行时间为:%.6f秒'%(end2-start2))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-16 17:30:21 | 显示全部楼层
看不懂你的问题,greeting是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-16 18:47:13 | 显示全部楼层
疾风怪盗 发表于 2020-10-16 17:30
看不懂你的问题,greeting是什么

抱歉,是我没有描述清楚。应该是greeting = 'Hello',用greeting [1]和'Hello'[1]来取字母e有什么区别,哪个运行效率更快,为什么?能用代码展示解释下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-16 18:49:35 | 显示全部楼层
点滴天明如梦 发表于 2020-10-16 18:47
抱歉,是我没有描述清楚。应该是greeting = 'Hello',用greeting [1]和'Hello'[1]来取字母e有什么区别,哪 ...

这个有什么好解释的?变量,就是值可以变,你用'Hello'[1],那还不如直接写'e'来的简单了

就这个,还什么效率。。。。。又不是大程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-16 19:05:39 | 显示全部楼层
运行效率没质的区别
只是某些巧妙精简的写法会让除了自己之外的人读不懂而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-16 19:37:30 | 显示全部楼层
kogawananari 发表于 2020-10-16 19:05
运行效率没质的区别
只是某些巧妙精简的写法会让除了自己之外的人读不懂而已

应该是有的,我同学提示我从内存上分析,但是我不太明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-19 17:15:03 | 显示全部楼层
我查询了相关资料以后发现是我同学误答了我的问题,其实应当是"Hello"[1]的取值更高效。
从内存上考虑用greeting[1]去获取要先经过栈再到堆才能取到,而"Hello"[1]直接就堆取得。
代码证明效率如下:
import time
start1 = time.time()
greeting = 'Hello'
for  i in range(10000):
        print(greeting[1])
end1 = time.time()

start2 = time.time()
for  i in range(10000):
        print('Hello'[1])
end2 = time.time()
print('greeting程序的运行时间为:%.30f秒'%(end1-start1))
print('Hello程序的运行时间为:%.30f秒'%(end2-start2))
感谢各位鱼油回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-19 17:16:07 | 显示全部楼层
疾风怪盗 发表于 2020-10-16 18:49
这个有什么好解释的?变量,就是值可以变,你用'Hello'[1],那还不如直接写'e'来的简单了

就这个,还 ...

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

使用道具 举报

 楼主| 发表于 2020-10-19 17:17:06 | 显示全部楼层
kogawananari 发表于 2020-10-16 19:05
运行效率没质的区别
只是某些巧妙精简的写法会让除了自己之外的人读不懂而已

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

使用道具 举报

发表于 2020-10-19 17:19:55 From FishC Mobile | 显示全部楼层
搞不明白'hello'[1]这样有什么用处?
再说你测试耗时的时候就不该用print函数,这个对耗时的影响非常大。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-19 17:20:48 | 显示全部楼层

greeting程序的运行时间为:0.045987367630004882812500000000秒
Hello程序的运行时间为:0.049001216888427734375000000000秒

你这个能证明什么。。。。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-19 17:23:24 | 显示全部楼层
是你循环次数太少了加大,试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-19 17:24:04 | 显示全部楼层
疾风怪盗 发表于 2020-10-19 17:20
greeting程序的运行时间为:0.045987367630004882812500000000秒
Hello程序的运行时间为:0.04900121688 ...

是你循环次数太少了加大,试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-19 17:27:56 | 显示全部楼层
hrp 发表于 2020-10-19 17:19
搞不明白'hello'[1]这样有什么用处?
再说你测试耗时的时候就不该用print函数,这个对耗时的影响非常大。

这个是一个思考题题目所以才使用“Hello”【1】,
print我是没想到用其他更好的,这个受教了,你有什么更好的推荐吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-19 17:51:40 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrp 于 2020-10-19 18:04 编辑
点滴天明如梦 发表于 2020-10-19 17:27
这个是一个思考题题目所以才使用“Hello”【1】,
print我是没想到用其他更好的,这个受教了,你有什么 ...


不用打印,也不用赋值,取值即丢弃。print向控制台输出耗时占比很大,而且又不稳定,耗时是波动的,测试耗时尽量避免这些。
如果不考虑实用性,直接取值确实比从变量取值要快。
  1. import time
  2. start1 = time.perf_counter()
  3. greeting = 'Hello'
  4. for  i in range(100000):
  5.         greeting[1]
  6. end1 = time.perf_counter()

  7. start2 = time.perf_counter()
  8. for  i in range(100000):
  9.         'Hello'[1]
  10. end2 = time.perf_counter()

  11. print('greeting程序的运行时间为:%.6f秒'%(end1-start1))
  12. print('Hello程序的运行时间为:%.6f秒'%(end2-start2))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 03:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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