b变量里边 my_time()不再被调用了??print("a"+my_time())时,my_time()每次都会被调用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'
>>> 
让v站大佬见笑了
那为什么在编辑器里边b每次都是被调用的?

     1 
                    
                    j0hnj      2019-12-05 11:48:04 +08:00    唉,要不还是转行吧 
                 | 
            
     2 
                    
                    Caballarii      2019-12-05 11:48:49 +08:00    b 变量是"a"+my_time()执行的结果,类型是字符串,字符串凭什么变, 
                b 写成函数每次调用才会每次执行  | 
            
     3 
                    
                    io123      2019-12-05 11:50:08 +08:00 via Android 
                    
                    唉,要不还是转行吧 
                 | 
            
     4 
                    
                    jimliang      2019-12-05 11:52:40 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     5 
                    
                    1nakaELYBbsXbZxY      2019-12-05 11:53:56 +08:00 
                    
                    变量在赋值的时候变化。 
                 | 
            
     6 
                    
                    1nakaELYBbsXbZxY      2019-12-05 11:54:06 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     7 
                    
                    xem      2019-12-05 11:55:51 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     8 
                    
                    U7Q5tLAex2FI0o0g      2019-12-05 11:57:39 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     9 
                    
                    css3   OP  | 
            
     10 
                    
                    JeffGe      2019-12-05 11:58:15 +08:00 via Android 
                    
                    唉,要不还是转行吧 
                 | 
            
     11 
                    
                    b821025551b      2019-12-05 11:59:03 +08:00 
                    
                    b 是你函数执行的结果,如果你想要它“变”,需要把 b 赋值成闭包; 
                初学者的话出这种疑问很正常,但是看你的回复又不像初学者,那么转行吧:doge:  | 
            
     12 
                    
                    dswyzx      2019-12-05 11:59:33 +08:00 
                    
                    python 就是捉急.别学了 
                面向对象语言 强类型. 断点调试看变量 啥都给你整明白了  | 
            
     13 
                    
                    JCZ2MkKb5S8ZX9pq      2019-12-05 12:04:08 +08:00 
                    
                    唉,教程从头再看一遍吧。 
                my_time 是函数 my_time() 是它返回的结果 是字符串 你的 b 一开始就字符串 a+字符串函数返回的结果 要跟着变你可以把那个 a+写到 return 里 不过还是建议从头看教程吧  | 
            
     14 
                    
                    Trim21      2019-12-05 12:04:15 +08:00 via Android 
                    
                    你这想要的是 class 的 property 啊 
                 | 
            
     15 
                    
                    ddzzhen      2019-12-05 12:05:08 +08:00 via Android 
                    
                    大佬请不要对新手这么残忍,楼主肯定是初学者,我上班也基本不用 python,准确的说不用代码,当初学的时候有很多这种类似的问题,现在写量化脚本也不用类,不是每个 python 人都用 python 养活自己,毕竟门槛太低了 
                 | 
            
     16 
                    
                    sheep3      2019-12-05 12:10:06 +08:00 
                    
                    不是,你转行之前干啥的 
                这不是基础到极点的东西么......  | 
            
     17 
                    
                    xiaofan305      2019-12-05 12:12:21 +08:00 via Android 
                    
                    唉,要不还是转行吧 
                 | 
            
     18 
                    
                    wuwukai007      2019-12-05 12:15:52 +08:00 via Android    python 是简单,那是针对有其它语言经验的人,建议不要走马观花,静下心来,从头学起 
                 | 
            
     19 
                    
                    eftpos      2019-12-05 12:22:44 +08:00    不知道楼上劝转行的人是什么资质。面对初学者的心态难道不是包容和引导吗? 
                在这个帖子 /t/625470 里看到了大家对心胸狭隘的抨击,那复读灌水劝退内容算不算心胸狭隘呢? 回帖前请注意右下角的“请尽量让自己的回复能够对别人有帮助”以及阅读 /about  | 
            
     20 
                    
                    MeteorCat      2019-12-05 12:24:42 +08:00 via Android 
                    
                    唉,要不还是转行吧 
                 | 
            
     21 
                    
                    levelworm      2019-12-05 12:26:42 +08:00    b 是个字符串,所以你每次打 b 无非就是出来字符串里头的内容。严格地说是 b 这个 name 指示的地址里头的内容。你可以再次给 b 赋值,就会变化了。但是这时候其实是指向另外一个地址。 
                ``` >>>b 'a2019-12-04 23:20:53' >>>hex(id(b)) '0x2126325b580' >>>b = "a" + my_time() >>>b 'a2019-12-04 23:21:15' >>>hex(id(b)) '0x2126325b850' ```  | 
            
     22 
                    
                    yupnano      2019-12-05 12:35:33 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     23 
                    
                    superrichman      2019-12-05 12:35:54 +08:00 via iPhone 
                    
                    python 可以通过 
                print(type(b)) 来看变量 b 的数据类型。应该会看到类似 class str 的输出,说明 b 的值是个字符串 string,而字符串在定义了之后是不会改变的。要“修改”字符串 只能新建另一个再赋值给 b。  | 
            
     24 
                    
                    hoyixi      2019-12-05 12:38:27 +08:00    my_time: 小 b,你好,我是印钞机,只是把印好的一张 100 块给你了,并没有把我自己给你 
                 | 
            
     25 
                    
                    mckelvin      2019-12-05 12:47:25 +08:00 via Android 
                    
                    () 长的像硬币不?得投一次币才给干一次活。 
                 | 
            
     26 
                    
                    ThomasZ      2019-12-05 12:48:32 +08:00 via Android 
                    
                    跨行学 Python ?不要上手就开搞,先看看基础理论再说 
                 | 
            
     27 
                    
                    wangyzj      2019-12-05 12:54:09 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     28 
                    
                    ClarkAbe      2019-12-05 13:02:06 +08:00 via Android 
                    
                    唉,要不还是转行吧,秋梨膏 
                 | 
            
     29 
                    
                    leido      2019-12-05 13:22:07 +08:00 
                    
                    xswl, 哈哈哈哈 
                 | 
            
     30 
                    
                    RV0n      2019-12-05 13:28:01 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     31 
                    
                    kasper4649      2019-12-05 13:32:04 +08:00 via Android 
                    
                    建议还是从基础学吧,搞懂字符串再说 
                 | 
            
     32 
                    
                    wizardoz      2019-12-05 13:32:04 +08:00 
                    
                    你是不是看了抖音决定学 Python 的? 
                 | 
            
     33 
                    
                    shfanzie      2019-12-05 13:33:51 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     34 
                    
                    gz911122      2019-12-05 13:34:07 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     35 
                    
                    ZRS      2019-12-05 13:42:59 +08:00 
                    
                    建议从 C 开始 先把 C 的基础语法整明白了 写几个算法题 再开始 Python 
                 | 
            
     36 
                    
                    hanyceZ      2019-12-05 13:43:21 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     37 
                    
                    CrazyRain0001      2019-12-05 13:48:14 +08:00 
                    
                    火钳刘明 
                 | 
            
     38 
                    
                    misaka19000      2019-12-05 13:53:39 +08:00    函数式对行为的一种抽象,变量代表了一个状态 
                PS: 楼上的队形党太拉低 V 站水平了  | 
            
     39 
                    
                    ljpCN      2019-12-05 13:53:44 +08:00    楼主很适合学习函数式编程 
                 | 
            
     40 
                    
                    wutiantong      2019-12-05 13:58:58 +08:00    这就劝人转行? 
                lazy evaluation 了解一下? 楼主的思维方式很有意义。 劝某些人不要太僵化。  | 
            
     41 
                    
                    raistlin916      2019-12-05 14:01:59 +08:00    问题出在中文歧义上,字面上看,『变量』其实是可变量,执行函数是『变某量』,所以容易混淆。 
                 | 
            
     42 
                    
                    MinQ      2019-12-05 14:04:37 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     43 
                    
                    KaynW      2019-12-05 14:08:45 +08:00 
                    
                    已学者往往理解不了初学者为什么会提出这种问题.是个啥理论还是悖论来着,忘了.多点宽容多点爱 
                 | 
            
     44 
                    
                    simenet      2019-12-05 14:10:17 +08:00 
                    
                    唉,要不还是转行吧 
                唉,要不还是转行吧 唉,要不还是转行吧 唉,要不还是转行吧  | 
            
     45 
                    
                    cppgohan      2019-12-05 14:17:48 +08:00 
                    
                    楼主是要钓鱼赚波金币? 
                 | 
            
     46 
                    
                    yinjy      2019-12-05 14:20:18 +08:00 
                    
                    为什么要嘲讽楼主,其实这个问题还是挺有意思的 
                 | 
            
     47 
                    
                    Vindroid      2019-12-05 14:25:03 +08:00 
                    
                    没有基本功?耐下性子从最基本的学起吧,你这样学容易走火入魔啊 
                 | 
            
     48 
                    
                    yeze322      2019-12-05 14:32:33 +08:00 
                    
                    楼上都太欢乐了 
                 | 
            
     49 
                    
                    j0hnj      2019-12-05 14:40:05 +08:00    楼主,非常对不起,一时没忍住,嘴欠了一下,做了个坏一楼,确实太 mean 了。 
                能对初学者讲明白最基础的问题,才是真正的大佬,引以为戒。  | 
            
     50 
                    
                    williamszz      2019-12-05 14:41:02 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     51 
                    
                    jon      2019-12-05 14:43:00 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     52 
                    
                    hallwoodzhang      2019-12-05 14:46:12 +08:00    >>> import time 
                >>> def my_time(): ... return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) ... >>> b = lambda : 'a' + my_time() >>> b <function <lambda> at 0x7fdc8494f840> >>> >>> b() 'a2019-12-05 14:43:58' >>> b() 'a2019-12-05 14:44:01' >>> b() 'a2019-12-05 14:44:04' >>>  | 
            
     53 
                    
                    hallwoodzhang      2019-12-05 14:48:30 +08:00    我猜你想要这种效果 
                 | 
            
     54 
                    
                    azcvcza      2019-12-05 14:50:54 +08:00 
                    
                    不知道是钓鱼还是被钓 
                 | 
            
     55 
                    
                    Tokin      2019-12-05 15:07:51 +08:00 
                    
                    我滴妈呀,这个不应该入门就应该懂的吗?钓鱼贴? 
                 | 
            
     56 
                    
                    Phishion      2019-12-05 15:14:56 +08:00    上面列队劝人家转行的,有几个能非常深入的从底层讲解透这个问题的?当复读机能显得你们特别高明?我觉得吧,如果不会说话,可以不要说嘛,别回来往深了问一个个哑火了,挤兑别人倒有一手。 
                 | 
            
     57 
                    
                    ermao      2019-12-05 15:18:01 +08:00 
                    
                    string b = "a" + my_time(); 
                加上 string 你明白了吗?它把赋值那一刻的 my_time() 存了起来。所以你无论输出多少次,它都不会变呀。  | 
            
     58 
                    
                    imklay      2019-12-05 15:21:28 +08:00 
                    
                    我觉得还挺可爱的。。 
                 | 
            
     59 
                    
                    crella      2019-12-05 15:24:43 +08:00 
                    
                    玩玩 ruby 的 eval、instance_eval、class_eval,玩得让我头痛欲裂 
                 | 
            
     60 
                    
                    leadersnowy      2019-12-05 15:25:48 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     61 
                    
                    crella      2019-12-05 15:30:36 +08:00 
                    
                    还有提醒楼主,在绝大多数语言中,数组 a = 数组 b,这个操作是引用传递,就是当后续更改了数组 b 的某个元素的值后,数组 a 也会发生对应的变化。在你使用的语言中,一定要先查查语言的深拷贝(deepcopy 方法) 
                 | 
            
     62 
                    
                    mara1      2019-12-05 15:31:25 +08:00 
                    
                    楼主别听他们的,谁都是一点点学的,慢慢来,自己不要气馁。 
                基于你初学者的身份,建议你先谷歌,或找同事问,效率更高,如果还解决不了,再去网上问。  | 
            
     63 
                    
                    VShawn      2019-12-05 15:35:45 +08:00 
                    
                    我猜测楼主是想用闭包? 
                要不还是转行吧  | 
            
     64 
                    
                    Nugine0      2019-12-05 15:53:32 +08:00 
                    
                    ``` 
                $ cat a.py import time def get_time(): return time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime(time.time())) class TimeStr(str): def __str__(self): return get_time() def __repr__(self): return get_time() b = TimeStr() for i in range(5): print(f"{i+1}: {b}") time.sleep(1) $ python a.py 1: 2019-12-05 15:50:57 2: 2019-12-05 15:50:58 3: 2019-12-05 15:50:59 4: 2019-12-05 15:51:00 5: 2019-12-05 15:51:01 $ ```  | 
            
     65 
                    
                    Ainndy      2019-12-05 16:00:36 +08:00 via iPhone 
                    
                    唉,要不还是转行吧 
                 | 
            
     66 
                    
                    HanShan63      2019-12-05 16:03:16 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     67 
                    
                    blackccc      2019-12-05 16:03:23 +08:00 
                    
                    变量就是 72 变,想怎么变就怎么变 
                 | 
            
     68 
                    
                    zixiaoguan      2019-12-05 16:10:39 +08:00 
                    
                    代码是一行一行执行的,b 在赋值的时候已经执行了那段代码,以后就不会执行了。每次需要反复执行的代码,那种代码叫做函数。 
                 | 
            
     69 
                    
                    neroxps      2019-12-05 16:15:58 +08:00 
                    
                    楼主标题写的很好,什么是变量,什么是函数,楼主搞清楚就是了。 
                正如 bash ```bash time(){ echo date } echo "a $(time)" # 和 echo "a $(date)" 是一个意思啊。 ``` 函数每次调用都会执行,而变量只是存在一个内存空间的东西,变量在不被别人修改的时候是不会变化的。函数是动态的,调用就执行一次。 函数是动词,变量是形容词。  | 
            
     70 
                    
                    neroxps      2019-12-05 16:17:03 +08:00 
                    
                    @neroxps #69 手残连 bash 都敲错 
                ```bash time(){ echo $(date) } echo "a $(time)" # 和 echo "a $(date)" 是一个意思啊。 ```  | 
            
     71 
                    
                    pb941129      2019-12-05 16:32:28 +08:00    ?我开始怀疑这个论坛的专业性... 
                 | 
            
     72 
                    
                    HonoSV      2019-12-05 16:56:00 +08:00 
                    
                    别学 python,来学 java 吧,好懂很多 
                 | 
            
     73 
                    
                    CosimoZi      2019-12-05 17:00:48 +08:00 
                    
                    楼主很适合学习函数式编程 
                 | 
            
     74 
                    
                    solgh      2019-12-05 17:02:09 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     75 
                    
                    madmen      2019-12-05 17:08:55 +08:00 
                    
                    是不是买了朋友圈推送的,1 天学会 python ? 
                这个是计算机基础知识,先去恶补一下基础知识会比较好。  | 
            
     76 
                    
                    Erroad      2019-12-05 18:11:37 +08:00 via iPhone 
                    
                    楼主要不去玩玩人力资源机器? 
                 | 
            
     77 
                    
                    HolmLoh      2019-12-05 18:13:32 +08:00    他们都只是调侃而已,不比挂在心上 
                建议去看一些关于计算机书和 Python 的基本语法,应该会对你大有帮助 这里主要是两个点 一个是 my_time(),每次使用“my_time()”的时候,则会调用一次“my_time()”这个函数,而函数的每次调用都会执行一次函数对象的代码,所以每次调用就相当于生成一个新的值 第二是 b = ,这个是定义一个遍历 b,并赋值,使用“=”赋值之后,只要变量“b”不被再次使用“=”覆盖掉原值,他的数据就不会变 通俗的讲就是,你有一个文具袋( my_time ()),你从箱子里面拿出一支笔(调用函数),随后放到你的桌子上(赋值给 b ),随后你就可以看到桌子上的笔了(打印 b ),在你从文具袋里拿去物品(调用函数)并且放到桌子上,你桌子上永远都会是那支笔 我水平有限,解释的不好见谅  | 
            
     78 
                    
                    Mistwave      2019-12-05 18:20:29 +08:00 via iPhone 
                    
                    b = "a"+my_time() 
                这里是 call by value,而不是 call by name  | 
            
     80 
                    
                    xuyl      2019-12-05 18:33:21 +08:00 via Android 
                    
                    要不转行吧 
                 | 
            
     81 
                    
                    winglight2016      2019-12-05 18:53:35 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     82 
                    
                    lewinlan      2019-12-05 19:06:08 +08:00 
                    
                    唉,要不还是转行吧 
                变量想象成是一个标签,你赋值给谁它就代表谁。你令『 b = "a"+my_time()』,程序会把右边的*值*计算出来,然后给这个*值*贴上『 b 』这个标签,所以你每次访问都是同一个值。 另外,你打印时间字符串可以用『 datetime.now().strftime("%Y%m%d")』你那样写太别扭了。  | 
            
     83 
                    
                    nomaka      2019-12-05 19:06:11 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     84 
                    
                    ztmqg      2019-12-05 19:10:19 +08:00 via iPhone 
                    
                    楼主别听他们的,加油吧! 
                楼上的复读机有意思么?  | 
            
     85 
                    
                    vipppppp      2019-12-05 19:26:49 +08:00 
                    
                    。。。 
                 | 
            
     86 
                    
                    liuzhiyong      2019-12-05 19:43:55 +08:00 
                    
                    楼主应该是初学啦。“变量是什么”:就是计算机内存里面保存的一些数据。“什么时候变,什么时候不变?”:计算机 CPU 执行修改内存的指令,它就变了,如果 CPU 执行读取内存的指令,它当然不变。 
                 | 
            
     87 
                    
                    nG29DOMuRYTWfcSr      2019-12-05 19:50:34 +08:00 
                    
                    @css3 楼上所有人都是只会人云亦云,自己一点脑子没有的人,这种问题难道真的没有实现方式么? 
                输入,b,实际上是调用 b 的 tostring 函数,哪怕是我真的没有深入学过 python, 我都知道任意面向对象类型的语言都可以实现这样的事情。  | 
            
     88 
                    
                    leafsummer      2019-12-05 19:58:06 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     89 
                    
                    smdbh      2019-12-05 20:02:27 +08:00 via iPhone 
                    
                    
                 | 
            
     90 
                    
                    asche910      2019-12-05 20:07:38 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     91 
                    
                    vipppppp      2019-12-05 20:50:34 +08:00 
                    
                    我只是觉得大家没必要探讨 python 的__str__问题 
                劝转行是有点过分,但在这个论坛看到这样的问题确实相对太过于基础,难免有点震惊。 无论怎么样,还是要学好最基本的一些编程知识,LZ 加油。。  | 
            
     92 
                    
                    bjt      2019-12-05 20:58:50 +08:00 
                    
                    唉,要不还是转行吧 
                 | 
            
     93 
                    
                    CodeCore      2019-12-05 21:01:02 +08:00 
                    
                    楼主不要灰心。。。 
                你发现了更大到世界。  | 
            
     94 
                    
                    CEBBCAT      2019-12-05 21:57:02 +08:00 
                    
                    > 为什么在 b 变量里边 my_time()不再被调用了?? 
                你给 b 赋值(比如 b = a + XXX )的时候,值已经固定了,是一个像'a2019-12-05 11:30:32'一样的字符串,你可以用 type(b)来验证。 > 直接打印 print("a"+my_time())时,my_time()每次都会被调用 print 里边的"a"+my_time()是一个表达式,所以每次执行都会对 my_time()求值 > 我要在 b 变量中时时更新 my_time()应该怎么做? def b(): return "a"+my_time() > 变量是什么😂,什么时候变,什么时候不变? 基础问题,请完整看完一本编程书再问这样的问题。 --- 楼主什么身份?行外的朋友?要是培训班出来能被这几个问题难住,我想这个培训班把你和行业坑得不轻  | 
            
     95 
                    
                    zhjie      2019-12-05 22:24:33 +08:00 
                    
                    真不是我偏见,10 个钓鱼的 9 个是苹果头像!? 
                 | 
            
     96 
                    
                    ahaxzh      2019-12-06 09:28:17 +08:00 
                    
                    哎,还挺难的。不然跟我回家养猪算了。 
                 | 
            
     98 
                    
                    chucongqing      2019-12-06 09:34:21 +08:00 
                    
                    一楼二楼都点赞了 
                 | 
            
     99 
                    
                    finalwave      2019-12-06 09:55:06 +08:00 
                    
                    都叫 css3 了,不做前端学什么 python 
                 |