V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
css3
V2EX  ›  Python

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

  •  
  •   css3 · 2019-12-05 11:40:41 +08:00 · 13229 次点击
    这是一个创建于 1596 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 为什么在 b变量里边 my_time()不再被调用了??
    • 直接打印 print("a"+my_time())时,my_time()每次都会被调用
    • 我要在 b 变量中时时更新 my_time()应该怎么做?
    • 变量是什么😂,什么时候变,什么时候不变?
    >>> 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'
    >>> 
    
    第 1 条附言  ·  2019-12-06 09:06:32 +08:00

    让v站大佬见笑了

    那为什么在编辑器里边b每次都是被调用的?

    kn6yVt.png

    116 条回复    2019-12-07 00:46:36 +08:00
    1  2  
    guolaopi
        101
    guolaopi  
       2019-12-06 09:56:25 +08:00
    回复我看笑了,
    但是楼主附言我没看懂。
    啥叫“在编辑器里边 b 每次都是被调用的?”
    guolaopi
        102
    guolaopi  
       2019-12-06 09:57:37 +08:00
    回复我看笑了,
    但是楼主的附言我没看懂。
    “那为什么在编辑器里边 b 每次都是被调用的?”是什么意思
    ahaxzh
        103
    ahaxzh  
       2019-12-06 09:58:03 +08:00
    @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
        104
    Jrue0011  
       2019-12-06 10:26:16 +08:00
    在 IDE 里你每一次运行,相当于你每次都打开了一个新的命令提示符然后执行所有的代码。
    想要在 IDE 里复现主楼里变量 b 重复输出不变的情况,只需要在下面多加几行 print(b)运行,你就可以看到这几次 b 的值是一样的了。
    另外顺便补充下,你缺少的概念可能是:在代码里=号其实是赋值,而不是数学中的相等
    b = a + my_time()的意思是,把 a + my_time()的结果赋值给 b,b 中保存了这个结果,而不是你每次使用 b 就等于每次使用 a + my_time()
    zunceng
        105
    zunceng  
       2019-12-06 10:27:26 +08:00
    感觉楼主不是计算机的 但是思维方式绝对纯正的函数式
    JeffGe
        106
    JeffGe  
       2019-12-06 10:33:40 +08:00 via Android
    计算机是很“笨”的,你需要降低自己“人类的智商”才能更好理解一些编程的初级知识
    hjw45611
        107
    hjw45611  
       2019-12-06 10:39:54 +08:00
    编程基础建议补一补,先从寄存器看吧
    a=1(a 寄存器里存了 1),b=a+1(b 寄存器里存了 1+1=2),a=2 ( a 寄存器里存了 2 )
    现在你输出 b,b 里一直存的是 2,没有再次存储 a+1,所以输出的是 2
    hakono
        108
    hakono  
       2019-12-06 10:41:13 +08:00 via iPhone
    你们喷啥嘛,楼主这可是典型的 FP 编程思维
    你们 FP 编程学起来还可能会吃力死呢。。。。
    yazinnnn
        109
    yazinnnn  
       2019-12-06 11:12:28 +08:00
    楼主你挺适合学 lisp 的

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

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


    https://www.cnblogs.com/keanuyaoo/p/3367583.html
    写 lisp 跟写诗似的😃
    grzhan
        110
    grzhan  
       2019-12-06 11:42:46 +08:00
    “编辑器里面每次都被调用”是因为每次你在 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
        111
    teddy2725  
       2019-12-06 14:14:51 +08:00
    好好写你的前端代码它不香么
    hannhuan
        113
    hannhuan  
       2019-12-06 17:09:27 +08:00
    跑个题,楼主的头像太符合标题和内容了……
    sologgfun
        114
    sologgfun  
       2019-12-06 17:15:29 +08:00
    能理解楼主的心情,不过能搞清楚问题就好
    oahebky
        115
    oahebky  
       2019-12-06 17:47:44 +08:00
    函数不是变量。函数执行后会得到返回值。赋值给 b 的是返回值。
    楼主是中学生???
    jismhxjr
        116
    jismhxjr  
       2019-12-07 00:46:36 +08:00
    唉,要不还是转行吧
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5361 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:22 · PVG 15:22 · LAX 00:22 · JFK 03:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.