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 ![]() >>> 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 &nbp; 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 strong>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 |