迅闻网
让更多人看到你

i wrote python(python如何定义i)

  iwrotepython

正如@kindall和@padrainchunningham在评论中所说,del_son是一个列表:del_son=raw_input(“whatfather/sonpairdoyouwanttodelete?(typefirstnameofson”).split(“”)
由于在这里你用空格隔开了它的姓名。考虑到你的代码,我信任这是个过错,或者你在写这行代码时有些东西你不明白。在
在python中,不能使用list作为dict的键,由于dict需求它的所有键都是不可变的,以保证给定的键是唯一的。在python中,lists和dicts是可变的。这意味着当你这样做时:
^{pr2}$
i仅仅对以值1实例化的int目标的引证。当您将2分配给i时,值为1的前一个实例将被遗忘,并将由废物回收器收集。但当你这样做的时分:l=[]
l.append(1)
l.append(2)
然后从l引证了一个list目标,修改后包含两个值:1和{}。现在,假定您想用dict中的list为一个值建立索引,然后:d={}
l1=[3,1]
l2=[3,4]
d[l1]=’foo’
d[l2]=’bar’
天真地说,这没什么不起作用的:{[1,4]:’foo’,[3,4]:’bar’}
但假如你这样做了呢:l1.remove(1)
l1.append(4)
那么dict怎样还能工作,由于dict会变成:{[3,4]:’foo’,[3,4]:’bar’}
希望您得到了tuple类型,它是不可变和可散列的:d={(3,1):’foo’,(3,4):’bar}
所以你或许不想.split()它。您或许需求strip()它(这将删除所有前导和跟随的空白字符)。在
所以给你:del_son=raw_input(“whatfather/sonpairdoyouwanttodelete?(typefirstnameofson”).strip()
ifdel_soninfathers.keys():
delfathers[del_son]mytwocents:tomakeitslightlymoreexplicit,you’dbetterusedel_soninfathers.keys().It’sactuallythesameaswhatyouwrote,simplyforreadabilityit’seasier,asdel_soninfathersismisleading(whichonecouldreadas:”isthecoderremovingasonfromthelistoffathers?WTH?”,whereasaddingthe.keys()willread”Ah!Thecoderisremovingafatherfromason→fathermapping!Makessense!”)

Python

python如何定义i

正常情况下,当有人问起++原因而不是Python中的运算符时,这一行引起了我的留意。
假如您想知道开始的原因,则有必要翻阅旧的Python邮件列表,或问询那里的某个人(例如Guido)?通过stackoverflow
这迫使我像上图一样思考。真的我有必要问Guido原因吗?好的,也许可是在那之前,我应该尝试一下,这促使我写这篇文章
在C/C++/Java之类的言语中,对整数变量进行自增或自减运算是标准的,能够分为前缀运算(++i和–i)和后缀运算(i++和i–),每个都有纤细的差异和不同的意图。
当这些言语的用户进入Python时,他们可能会想知道为什么它不供给++或-操作。
尽管前缀++i可能出现在Python中,但它不是”++”自增运算符。
在这种情况下,它只是两个”+”(正号)的叠加,而根本不支撑”++”后缀!(SyntaxError:语法无效)。
那么,为什么Python不支撑i++增量语法?
首要,Python当然能够实现自我增强的效果,即以i+=1或i=i+1的方式编写,这在其他言语中也很常见。
尽管Python在底部运用了不同的魔术办法(add()和__iadd__())来完结计算,可是表面上的效果却彻底相同。
因而,咱们的问题能够转换为:为什么以上两种书写风格会比i++更好,并成为Python的最终挑选?
1.Python整数是不可变的类型
当咱们定义i=1000时,不同的言语会区别对待它们。
比如C(写入int=1000)的言语将适用于内存空间,并将其“绑定”到固定称号i上,同时写入变量值1000。
这里,i的地址和类型是固定的,而值是可变的。
Python(写i=1000)也将申请内存空间,可是它将”绑定”到数字1000,即该1000的地址和类型是不可变的
因而,当咱们使我”自我添加”(i=i+1)时,两者都被区别对待。
比如C之类的言语首要找到存储在i地址中的值,然后将其加1。操作后,新值将替换旧值Python的操作进程是将i指向的数字加1,然后,将结果绑定到新应用的存储空间,然后将称号标签”张贴”到新数字。
打个比方:C中的i就像是一个寄生了1000的主机,而Python中的1000就像了一个寄生了i的主机。所以我在C言语中与Python中的1000相同
综上所述,让咱们看一下i++,不难发现:
在C之类的言语中,i++能够表示i的数值属性的添加,既不会翻开新的内存空间,也不会创立新的一等公民在像Python这样的言语中,假如i++是对其name属性的操作,则这没有任何意义。假如将其理解为对数字本体的一种操作,那么情况将会很复杂。
它将生成一个新的一等公民1001,因而需要为其分配一个内存地址。假如此时占用的地址为1000,则将触及旧目标的回收,而且与1000的原始引证联系也将受到影响。因而只能为1001翻开新的内存空间
假如Python支撑i++,则其操作进程将比C++复杂,而且其意义不再是”将数字添加1″(递加),而应是”创立新数字”。
Python理论上能够实现i++操作,可是它有必要重新定义”增量运算符”,这将导致具有其他言语经验的人误解。
最好让每个人都直接写i+=1或i=i+1。
2.Python具有可迭代的目标
比如C/C++之类的言语已将i++设计为主要是为了方便运用三部分的for循环结构。
这种程序与数字本身的自增进程有关。数字的添加与程序主体的履行有关。
Python中没有这种结构,它供给了一种更优雅的办法:
这里反映了不同的思维方式。
它关怀值范围内的迭代遍历。
它不在乎或不需要人为添加数字。
Python中的可迭代目标/迭代器/生成器供给了很好的迭代/遍历用法,而且能够彻底替代i++。
例如,Python能够运用enumerate()与上述示例中的值同时遍历下标和特定值。
再举一个比如,关于字典遍历,Python供给了keys(),values(),item()和其他遍历办法,这些办法十分易于运用:
不仅在Python中很少运用i+=1或i=i+1,而且迭代目标的可用性使操作值范围变得容易,而且很少有人要求对其进行累加。
因而,回到咱们开始的问题,这两种”自增”办法并不比i++好多少,只是是由于它们是通用操作
这就是为什么无需引入新的运算符,Python会继续供给基础支撑的原因。真实的赢家是各种各样的可迭代目标!
摘要
Python不支撑递加运算符,原因如下:
由于它的整数是一类不变的一等公民,所以假如要支撑增量运算(++),将会带来歧义
含糊不清的原因:在本故事中
主要是由于它具有更合适的实现,即迭代目标,它对遍历操作具有良好的支撑。
到此这篇关于Python不支撑i++语法的原因解析的文章就介绍到这了,更多相关Python不支撑i++语法内容请搜索python博客曾经的文章或继续阅读下面的相关文章希望大家今后多多支撑python博客!

未经允许不得转载:迅闻网 » i wrote python(python如何定义i)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

迅闻网-让更多人看到你

登录/注册返回首页