首先明确一点,特殊方法的存在是为了被 Python 解析器调用的 , 例如:我们不会使用obj.__len__()这种写法 , 而是len(obj)。在执行len(obj)时,如果obj是一个自定义类的对象,那么 Python 会自己去调用我们实现的__len__方法 。
对于 Python 内置的数据类型,比如列表、字符串、字节序列等,那么 CPython 会抄个近路,__len__实际上会返回PyVarObject里的ob_size属性,这是因为直接读取属性比调用一个方法要快得多 。
很多时候 , 特殊方法的调用是隐式的,比如for i in x:这个语句其实是调用iter(x) ,而这个函数的背后是x.__iter__()方法 。
通过内置函数如来使用特殊方法是最好的选择 。这些内置函数不仅会调用这些方法 , 通常还提供额外的好处,对于内置类型来说,它们的速度更快 。
下面,我们通过定义一个简单的二维向量类,再来体会一下 Python 特殊方法的美妙:
使用Vector类,就像使用 Python 内置的数据类型一样简单:
python TypeError: Can't convert 'int' object to str implicitly应该是这句代码:
def getPuk(x):
return getColor(x) + getValue(x)
把 return getColor(x) + getValue(x)改成return getColor(x),getValue(x)试试
Python初学者的一点疑问?可以
不是递归, 递归是一个功能的自我调用. 这里也不需要递归.
你可以使用更简单的方法. 先把列表打乱(使用shuffle函数), 然后在一排人中随机插两个不同的隔板进去, 就相当于把人分成了三组. 这样实现简单, 并且不会产生空的现象.
Python发牌案例几个问题求解答1、__str__,只有打印单个对象有效,比如:print(对象1),
__repr__() ,打印列表中的对象也有效,比如:print([对象1,对象2,对象3])
2、就是一个嵌套的推导式
3、84-90合并一下 , 更容易理解
就是一个列表的排序
活学活用Python03:群成员随机两人配对今天下午,成长群的群主申总提出 , 群里每个人找一个战友 , 互帮互助 。一石激起千层浪,群里面积极向上好青年们就开始踊跃自我介绍 , 一个比一个优秀,让人羡慕不已 。我正想要参与其中,突然想到我的活学活用系列需要更新了 。没有困难,创造困难也要上 。于是,仔细想一想,可能出现几种情况:
如果用Python来随机配对,能解决上面的问题 。还有一个好处,每个月初,有了新的成员加进来之后,可以重新打乱配对一次,这样每个月都会有一个新的战友配对,就可以结交一个新朋友,岂不更好 。
把全体群成员放在一个集合里面,然后随机的从这个集合中挑出两个元素,作为一对战友,然后把这俩哥们从集合中删除 , 剩下的成员组成了新的集合,再对新的集合重复上面的操作 , 一直到新的集合为空,程序结束
在Python中可以用list或者set来实现
set和list的区别如下:
set是无序的,不可重复的
list是有序的,可以重复的
直觉上set比较适合,于是查看set的文档,看有没有适合的操作函数 。发现set的操作函数有5个:
其中pop()从集合中删除并返回随机的一个元素 , 好像很符合我的要求,于是动手尝试 。
输入的结果如下:
成功了O(∩_∩)O哈哈~
PS:因为可能存在成员数为单数的情况 , 为了不使程序出错,这里添加了一个try-except
上面是用set实现的 , 那用list能实现吗?
答案是:可以
查看Python文档,发现一个函数非常适合:random.shuffle,这个家伙能把一个list中的成员洗牌打乱,那么我们就可以按照顺序把大乱以后的list中的成员打印出来 , 挨着的两个成员就成为战友 。实现如下:
- mysqli获取所有数据 mysql的提取函数
- mysql 分组函数 mysql分组取数据
- mysql统计函数
- mysql有rank函数吗 mysql有rank
- mongdb python pythonmongodb操作
- redis-cli命令不能用 redis函数调用失败
- mysql的判断函数 mysql怎么判断奇偶数
- mysql数据库编码格式查询 mysql编码函数
- mysql日期yyyymmdd mysql中的日期型函数
- mysql序列函数 mysql如何查序列
