python基础数据类型(工厂函数)

工厂函数

工厂函数名字叫函数,其实不是函数,是,返回的都是对象,本文要说的以下几种都是工厂函数:
intstrfloatlisttupledictsetfrozenset
一、int
返回一个整型对象,在int类中重写了很多算数类的魔法方法,如加__add__减__sub__乘__mul__地板除__floordiv__,就是当对两个int型对象执行算数操作的时候自动执行的魔法方法,先拿加法举一个简单的例子:
我们先来看int类中__add__的魔法方法是怎样一个形式:

 |  __add__(...)
 |      x.__add__(y) <==> x+y

首先我们需要知道如果我们这样写:x=5,那么数字5就被python解释为一个int类的对象,这些是python自动帮我们完成的,接下来又把5赋值给x,所以x也是一个int类对象。执行加法运算时+两边必须都是int类对象,而且是+左边是主动的去加右边的数字,我们看代码x.__add__(y) <==> x+y,如果x不是int类对象,那么就不会调用到int类的这个相加的魔法方法,如果x是int类,而y不是int类对象,程序就会报错,报错信息如下:

image.png

类型错误:+操作符不支持int类和str类相加
如果把顺序换一下,我们再来看报错信息:
image.png

类型错误:不能隐式地将'int'对象转换为str
通过上述两条报错信息,应该理解主动被动的关系了吧,谁在前谁在后,并且也知道+两边都是int类才能起到两个整形数相加的效果。int类中还重写了很多其他的方法__radd____rsub__等等其他的魔法方法,用的不是很多这里就不徒增烦恼了(其实我也没理解__radd__的工作原理,网上很多人的解释并没有说服我)
下面两幅图是int类中的魔法方法:
image.png

image.png

二、str
str类中也有__add__魔法方法实现的是字符串拼接,但是没有__sub__相减的方法,如果我们想实现字符串相减,需要自己写一个类实现字符串相减,举个例子:

#重新定义一个类继承str,重写__sub__可以实现字符串相减
class Newstr(str):

    def __sub__(self,other):
        print("我所实现的字符串相减就是长度相减")
        return len(str(self))-len(str(other))


string1=Newstr("abcdefg")
string2=Newstr("xxx")

print(string1-string2)
print(string2-string1)


#重新定义一个类继承str,但是没有重写__sub__,两个字符串不可以相减
class Newstr(str):
    pass


string1=Newstr("abcdefg")
string2=Newstr("xxx")

print(string1-string2)
print(string2-string1)
报错信息如下:
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\test.py", line 25, in <module>
    print(string1-string2)
TypeError: unsupported operand type(s) for -: 'Newstr' and 'Newstr'

操作字符串有很多内置BIF,下图为常见的BIF


image.png

也可以像操作列表那样使用分片操作:


image.png
有一点需要说明的是:python字符串是不可变类型,不能被改变,比如向一个索引位置赋值:`string1[0] = "m"` 会导致错误
>>> string1 = "abcd"
>>> string1[0]="m"
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    string1[0]="m"
TypeError: 'str' object does not support item assignment
>>>但是列表可以
>>> list1=[1,2,3,4,5]
>>> list1[0]=6
>>> list1
[6, 2, 3, 4, 5]

三、float
关于float我只说一点,看下面代码:

image.png

0.1+0.2的结果怎么是这么个玩意儿?
接着往下看:

image.png

这又是啥玩意儿?
说明python的浮点数是有误差的,我们就不要相信浮点数的运算了

>>>0.3 == 0.1 + 0.2
>>>False
>>>0.3 < 0.1 + 0.2
>>>True

怎么解决这个问题呢?

>>>import decimal
>>>a = decimal.Decimal( "0.1" )   # 传的参数是字符串
>>>b = decimal.Decimal( "0.2" )
>>>print(a+b)
>>>0.3

也可以进行比较


image.png

四、list
列表分片参照字符串分片,道理都一样,只不过list是可变类型,字符串是不可变类型
列表添加元素三种方法:append(元素)、extend(列表)、insert(位置,元素),其中appen()和extend()都是向列表末尾添加
删除列表元素三种方法:remove(元素)、del 列表[下标]、pop():弹栈,默认弹出列表最后一个元素,pop(2):删除指定位置
列表的方法实在是太多了...

五、tuple
六、dict
七、set
八、frozenset
未完待续 ...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容