Python是一门设计精美的解释型高级语言,它提供了许多让程序员感到舒服的功能特性。但是有时候,Python的一些输出结果对于初学者来说似乎不是那么清晰。如果你是经验丰富的Python程序员,可以尝试挑战一下,看能否一眼看出运行结果。只运行一次?下面的代码会运行多少次?foriinrange(4):print(i)i=10运行后输出:0123什么?不是输出0吗?原理分析:由于Python中循环的工作方式,赋值语句i=10不会影响迭代循环。在每次迭代开始之前,迭代器(此处为range(4))生成的下一个元素被解包并分配给目标列表的变量(此处为i)。调皮的hashsome_dict={}some_dict[5.5]="Ruby"some_dict[5.0]="JavaScript"some_dict[5]="Python"print(some_dict[5.5])print(some_dict[5.0])print(some_dict[5])运行后输出:RubyPythonPython原理分析:Python字典通过检查键值是否相等并比较哈希值来判断两个键是否相同。执行some_dict[5]=“Python”语句时,由于Python将5和5.0识别为some_dict的同一个key,所以已有值“JavaScript”到处被“Python”覆盖returnsdefsome_func():try:return'from_try'finally:return'from_finally'print(some_func())运行后输出:Isn'tfrom_finallyfrom_try?原理分析:在“try...finally”语句的try中执行return、break或continue时,finally子句仍然会被执行。函数的返回值由最后执行的return语句决定。由于finally子句必须被执行,所以finally子句中的return总是最后执行的语句。Noandnoprint('something'isnotNone)print('something'is(notNone))运行结果:TrueFalse原理分析:isnot是一个单独的二元运算符,区别于单独使用is和not。如果运算符两边的变量指向同一个对象,则is不计算为False,否则计算为True。Some_list=[1,2,3]some_dict={"key_1":1,"key_2":2,"key_3":3}some_list=some_list.append(4)some_dict=some_dict.update({"key_4":4})print(some_dict)print(some_list)result:NoneNone原理分析:大多数修改序列/映射对象的方法,如list.append、dict.update、list.sort等,都是就地修改对象和返回无。同一个人有不同的命运先来看一个程序片段:a=[1,2,3,4]b=aa=a+[5,6,7,8]print(a)print(b)之后的结果running:[1,2,3,4,5,6,7,8][1,2,3,4,5,6,7,8]按照常规理解,这两个程序片段返回的结果应该是相同的?原理分析:a+=b并不总是和a=a+b一样,类中实现operator=运算符的方式可能不同,list是这样的。表达式a=a+[5,6,7,8]将生成一个新列表,并让a引用这个新列表,同时保持b不变。表达式a+=[5,6,7,8]实际上使用了“扩展”功能,因此a和b仍然引用相同的已修改列表。看完这些代码的运行结果,你是不是直接调用了WC?有的话点个赞吧!即使是Python的老手,也很可能被这些代码迷得神魂颠倒,很难说对。这些代码就像线试中的逻辑题一样,很容易被表面搞糊涂!不过跑完了再看看原理,对我们学习Python也是很有帮助的!以上就是本次分享的全部内容。现在想学习编程的朋友欢迎关注Python技术大本营获取更多技能和教程。
