一个函数,一个变量,整懵逼了

2019 年 12 月 5 日
 css3
>>> import time
>>> def my_time():
... 	return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
>>>
>>> my_time()
'2019-12-05 11:29:47'
>>> my_time()
'2019-12-05 11:29:50'
>>> b = "a"+my_time()
>>> b
'a2019-12-05 11:30:32'
>>> b
'a2019-12-05 11:30:32'
>>> b
'a2019-12-05 11:30:32'


>>> print("a"+my_time())
a2019-12-05 11:38:02
>>> print("a"+my_time())
a2019-12-05 11:38:03
>>> print("a"+my_time())
a2019-12-05 11:38:05



>>> b = "a" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
>>> b
'a2019-12-05 11:39:27'
>>> b
'a2019-12-05 11:39:27'
>>> b
'a2019-12-05 11:39:27'
>>> 


>>> "a" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
'a2019-12-05 11:41:58'
>>> "a" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
'a2019-12-05 11:41:59'
>>> "a" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
'a2019-12-05 11:42:00'
>>> "a" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
'a2019-12-05 11:42:00'
>>> "a" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
'a2019-12-05 11:42:01'
>>> "a" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
'a2019-12-05 11:42:02'
>>> 
16339 次点击
所在节点    Python
116 条回复
guolaopi
2019 年 12 月 6 日
回复我看笑了,
但是楼主附言我没看懂。
啥叫“在编辑器里边 b 每次都是被调用的?”
guolaopi
2019 年 12 月 6 日
回复我看笑了,
但是楼主的附言我没看懂。
“那为什么在编辑器里边 b 每次都是被调用的?”是什么意思
ahaxzh
2019 年 12 月 6 日
@css3 其实很多回复里已经讲的很清楚了,比如 77 94 等,这个问题 其实不算什么问题。你需要把基础知识补起来就行了。

int x = 10; // 变量 x 里存放了 一个整数 10

int b = 10 + x; // 变量 b = 10 + x = 10 + 10 = 20,这时候 变量 b 里存放了一个整数 20

x = 20 ; // 变量 x 里存放了一个整数 20, 从 10 改成了 20


这时候 b 并没有后续的 操作,所以 b 里面一直都是 20
所以不论你如何输出 b,修改 x 的值 ,那么 b 永远都是 20


如果你输出的 是 10 + x,那么这个结果就是一个动态的呀,x 等于多少直接影响了结果。
Jrue0011
2019 年 12 月 6 日
在 IDE 里你每一次运行,相当于你每次都打开了一个新的命令提示符然后执行所有的代码。
想要在 IDE 里复现主楼里变量 b 重复输出不变的情况,只需要在下面多加几行 print(b)运行,你就可以看到这几次 b 的值是一样的了。
另外顺便补充下,你缺少的概念可能是:在代码里=号其实是赋值,而不是数学中的相等
b = a + my_time()的意思是,把 a + my_time()的结果赋值给 b,b 中保存了这个结果,而不是你每次使用 b 就等于每次使用 a + my_time()
zunceng
2019 年 12 月 6 日
感觉楼主不是计算机的 但是思维方式绝对纯正的函数式
JeffGe
2019 年 12 月 6 日
计算机是很“笨”的,你需要降低自己“人类的智商”才能更好理解一些编程的初级知识
hjw45611
2019 年 12 月 6 日
编程基础建议补一补,先从寄存器看吧
a=1(a 寄存器里存了 1),b=a+1(b 寄存器里存了 1+1=2),a=2 ( a 寄存器里存了 2 )
现在你输出 b,b 里一直存的是 2,没有再次存储 a+1,所以输出的是 2
hakono
2019 年 12 月 6 日
你们喷啥嘛,楼主这可是典型的 FP 编程思维
你们 FP 编程学起来还可能会吃力死呢。。。。
yazinnnn
2019 年 12 月 6 日
楼主你挺适合学 lisp 的

(define b (+ 'a' (time)))

这样你每次执行 b 就是你想要的效果了


https://www.cnblogs.com/keanuyaoo/p/3367583.html
写 lisp 跟写诗似的😃
grzhan
2019 年 12 月 6 日
“编辑器里面每次都被调用”是因为每次你在 VS Code 运行你的 Python 脚本的时候,是从头开始重新逐句运行的。
所以 b = "a" + my_time() 每次你运行都会被执行到,b 都会获取到当前最新的时间

但是你最开始发贴的例子是在 Python 解释器跑的,b = "a" + my_time() 只被执行了一次,所以之后你每次查看 b 变量的值是不会变的。

[变量] ( Variable )的“变” 这个概念,在这个语境下是和 [常量] ( Constant ) 相对应的,变量的值是可变的,而常量不可变。而 python 语法没有真正的常量所以你可能没有学到常量。

比如你有个变量 a,那么你先写了 a=1,之后再写 a=2 是 ok 的。
但比如你有个常量 A,那么你开始定义了 A=1,之后再想赋值 A=2 就会报错,因为常量是不可变的。
teddy2725
2019 年 12 月 6 日
好好写你的前端代码它不香么
iamdaguduizhang
2019 年 12 月 6 日
NoFoodNoLife
2019 年 12 月 6 日
跑个题,楼主的头像太符合标题和内容了……
sologgfun
2019 年 12 月 6 日
能理解楼主的心情,不过能搞清楚问题就好
oahebky
2019 年 12 月 6 日
函数不是变量。函数执行后会得到返回值。赋值给 b 的是返回值。
楼主是中学生???
jismhxjr
2019 年 12 月 7 日
唉,要不还是转行吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/626157

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX