鱼C论坛

 找回密码
 立即注册
查看: 1944|回复: 3

[已解决]魔法方法中的疑问

[复制链接]
发表于 2017-10-29 16:11:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面的代码是移位操作的,是__lshift__和__rshift__魔法方法的重载,代码中的两条return语句都是什么意思呀??
  1. class Nstr(str):
  2.     def __lshift__(self, other):
  3.         return self[other:] + self[:other]

  4.     def __rshift__(self, other):
  5.         return self[-other:] + self[:-other]
复制代码

实现形式如下:
  1. >>> a = Nstr('I love FishC.com!')
  2. >>> a << 3
  3. 'ove FishC.com!I l'
  4. >>> a >> 3
  5. 'om!I love FishC.c'
复制代码
最佳答案
2017-10-29 17:24:53
重载的是左移和右移运算符
因为self是一个可索引的对象,比如str,list等,所以return的就是这个对象的分割再合并的结果
a = Nstr('I love FishC.com!')
a << 3
此时self = 'I love FishC.com!' , other = 3
所以返回的就是
self[3:] + self[:3] #将字符串的前三个字符移动到字符串的末尾
结果当然就是
'ove FishC.com!I l'

同理
a >> 3 #将字符串的最后3个字符移动到字符串的开头,结果自然就是:
'om!I love FishC.c'
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-29 17:24:53 | 显示全部楼层    本楼为最佳答案   
重载的是左移和右移运算符
因为self是一个可索引的对象,比如str,list等,所以return的就是这个对象的分割再合并的结果
a = Nstr('I love FishC.com!')
a << 3
此时self = 'I love FishC.com!' , other = 3
所以返回的就是
self[3:] + self[:3] #将字符串的前三个字符移动到字符串的末尾
结果当然就是
'ove FishC.com!I l'

同理
a >> 3 #将字符串的最后3个字符移动到字符串的开头,结果自然就是:
'om!I love FishC.c'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-29 19:07:55 | 显示全部楼层
BngThea 发表于 2017-10-29 17:24
重载的是左移和右移运算符
因为self是一个可索引的对象,比如str,list等,所以return的就是这个对象的分割 ...

理解了,多谢多谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-29 22:01:10 From FishC Mobile | 显示全部楼层
切片实现移位功能喽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-3 12:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表