python魔法方法,python将字符串转换成整型

2019-10-22 05:42 来源:未知

将字符串转换来,整型,从字面精晓比较轻松让人误会。

python法力方法-属性调换和类的代表详解,python详解

类型转变法力

类型转变法力其实正是兑现了str、int等工厂函数的结果,平常这个函数还会有类型转变的法力,上边是有的连锁的法力方法:

•__int__(self)

•转变来整型,对应int函数。

•__long__(self)

•调换来长整型,对应long函数。

•__float__(self)

•转变来浮点型,对应float函数。

•__complex__(self)

•转换成 复数型,对应complex函数。

•__oct__(self)

•转变到八进制,对应oct函数。

•__hex__(self)

•转换到十六进制,对应hex函数。

•__index__(self)

•首先,那些情势应该回到二个卡尺头,能够是int大概long。这些方法在七个地点有效,首先是 operator 模块中的index函数获得的值正是其大器晚成办法的重回值,其次是用来切成条操作,上面会专程张开代码演示。

•__trunc__(self)

•当 math.trunc(self) 使用时被调用.__trunc__重回本身类型的整型截取 (平时是三个长整型).

•__coerce__(self, other)

•完毕了等级次序的勒迫调换,这些格局对应于 coerce 内建函数的结果(python3.0初始去掉了此函数,也等于该法力方法也没意义了,至于三回九转的版本是不是重新参加扶植,要视官方而定。)

•这些函数的成效是强制性地将五个不等的数字类型调换来为同贰个类别,比如:

图片 1

方法重回二个元祖,分别对应转换后的三个数字。其事先级为:复数>浮点数>长整型>整型。在更动的时候,会转移为五个参数中先行级高的门类。当转变不能做到的时候,会触发 TypeError。

而当大家定义那几个法力方法时,要是调换不能够做到,应该回到None。

此处有个基本点的体制,当python实行演算的时候,如 1 + 1.0 时,会先调用 coerce 函数将其转移为同四个品种,然后再张开运营,那相当于干吗 1 + 1.0 = 2.0,因为退换之后实际打开的运算为 1.0 +1.0。获得那样的结果也就不奇怪了。

代码示例:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __int__(self):
    return int(self.x) + 1

  def __long__(self):
    return long(self.x) + 1

a = Foo(123)
print int(a)
print long(a)
print type(int(a))
print type(long(a))

图片 2

那边要留意一点,法力方法的重返值必得相符预期,举个例子 __int__ 就活该回到三个 int 类型,假使大家随便地赶回别的项目,譬如字符串(str)、列表(list)等,会报错。

def __int__(self):
    return str(self.x)

图片 3

def __int__(self):
    return list(self.x)

图片 4

只是 int 能够回去 long,而 long 重返 int 时会自动被管理成 long:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __int__(self):
    return long(self.x) + 1

  def __long__(self):
    return int(self.x) + 1

a = Foo(123)
print int(a)
print long(a)
print type(int(a))
print type(long(a))

图片 5

如上发生在python2.7.11上,那是一个很想获得的行事,以致于自身感到其大概是叁个BUG,总来讲之我们在应用的时候要注意要再次来到对应的连串正是了,防止出错。

__index__(self):

第大器晚成是对应于operator.index(),operator.index(a)就一定于a.__index__():

import operator

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __index__(self):
    return self.x + 1

a = Foo(10)
print operator.index(a)

图片 6

另多个是很美丽妙的特效,当其用于连串中时:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __index__(self):
    return 3

a = Foo('scolia')
b = [1, 2, 3, 4, 5]
print b[a]
print b[3]

图片 7

能够看做目录同样接纳,可进展切开操作:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __index__(self):
    return int(self.x)

a = Foo('1')
b = Foo('3')
c = [1, 2, 3, 4, 5]
print c[a:b]

 图片 8

实则切成丝内部选用的函数 slice 对其开展了拍卖,风乐趣的同室能够去通晓这些函数:

a = Foo('1')
b = Foo('3')
c = slice(a, b)
print c
d = [1, 2, 3, 4, 5]
print d[c]

 __coerce__(self, other):

代码示例:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __coerce__(self, other):
    return self.x, str(other.x)

class Boo(object):
  def __init__(self, x):
    self.x = x

  def __coerce__(self, other):
    return self.x, int(other.x)

a = Foo('123')
b = Boo(123)
print coerce(a, b)
print coerce(b, a)

图片 9

 计算:是调用了第贰个参数的法力方法。

类的代表 :

类的象征其实就是对外的特色,举例利用print语句时,打字与印刷出来的是何等,其实本质上也是对应函数的输出:

•__str__(self)

•定义当 str() 被你的四个类的实例调用时所要发生的表现。因为print私下认可调用的正是str()函数。

•__repr__(self)

•定义当 repr()  被您的三个类的实例调用时所要产生的一坐一起。 str() 和 repr() 的重要性不一致是其指标群众体育。 repr() 重临的是机器可读的出口,而 str() 重返的是全人类可读的。  repr() 函数是换到情势私下认可调用的

•函数。

•__unicode__(self)

•定义当 unicode() 被您的多少个类的实例调用时所要产生的行事。 unicode() 和 str() 很相似,不过回去的是unicode字符串。注意,假如对你的类调用 str() 不过你只定义了 __unicode__() ,那么其将不会

•专门的学业。你应当定义 __str__() 来确认保证调用时能回去精确的值,并非各类人皆有情怀去行使unicode()。

•__format__(self, formatstr)

•定义当您的二个类的实例被用来用新式的格式化字符串方法进行格式化时所要爆发的行事。比如, "Hello, {0:abc}!".format(a) 将会导致调用 a.__format__("abc") 。那对定义你本人的数值或字符串类型

•是特别常有含义的,你可能会付给一些例外的格式化选项。

•__hash__(self)

•定义当 hash()被您的叁个类的实例调用时所要发生的行为。它必需回到贰个寸头,用来在字典中打开快捷相比较。

•请注意,实现__hash__时日常也要兑现__eq__。有上边那样的规规矩矩:a == b 暗暗表示着 hash(a) == hash(b) 。相当于说八个魔法方法的重返值最佳同豆蔻年华。

•这里引进贰个‘可哈希对象'的定义,首先一个可哈希对象的哈希值在其生命周期内应当是不改变的,而要获得哈希值就表示要得以完成__hash__办法。而哈希对象之间是足以比较的,那表示要兑现__eq__或

•者__cmp__艺术,而哈希对象相等必需其哈希值相等,要促成这一个特点就表示__eq__的重回值必需和__hash__一样。

•可哈希对象能够用作字典的键和会集的分子,因为这几个数据结构内部接纳的正是哈希值。python中全部内置的不改变的靶子都以可哈希的,举个例子元组、字符串、数字等;而可变对象则不能够哈希,比方列表、

•字典等。

•客户定义的类的实例暗中同意是可哈希的,且除了它们本人以外哪个人也不对等,因为其哈希值来自于 id 函数。但那并不表示 hash(a) == id(a),要留心这一个特点。

•__nonzero__(self)

•定义当 bool() 被您的一个类的实例调用时所要产生的行为。本办法应该回到True或然False,决议于你想让它回到的值。(python3.x中改为__bool__)

•__dir__(self)

•定义当 dir() 被你的一个类的实例调用时所要发生的作为。该方式应该回到叁天性质的列表给顾客。

•__sizeof__(self)

•定义当 sys.getsizeof() 被您的一个类的实例调用时所要发生的行事。该方式应该以字节为单位,重返您的指标的分寸。那日常对于以C扩充的格局贯彻的Python类尤其有含义,其推动掌握这一个增加。

这里并未什么非常麻烦驾驭的地点,所以代码例子就略去了。

上述那篇python法力方法-属性转变和类的代表详解就是小编分享给大家的全体内容了,希望能给大家贰个参谋,也期待咱们多多指教帮客之家。

类型转变法力类型调换法力其实正是贯彻了str、int等工厂函数的结果,平常那一个函数还...

比方,要把那几个"abcabc"调换到整型,臣妾做不到啊。除成转成ascii。

大家所说字符串转成整型是如此的。

s = "12"
s = "12.12"

 

我们安危与共写一个函数,来促成这么些调换。

思想:python提供调换到整型用int()那重大字,那么,固然本身这么int('12') int(12.12)如此那般是足以转成整型的。不过要是int('abc') int('12.12') 会报类型错误

这正是说大家就选取无法调换的状态,会报类型错误来写那个函数。

达成:假诺能够调换来,int型直接反回调换后的值,假如不也许调换,反回False

 

def to_int(str):
    try:
        int(str)
        return int(str)
    except ValueError: #报类型错误,说明不是整型的
        try:
            float(str) #用这个来验证,是不是浮点字符串
            return int(float(str))
        except ValueError:  #如果报错,说明即不是浮点,也不是int字符串。   是一个真正的字符串
            return False

 

调用:

print to_int('str')
print to_int('str123')
print to_int('12.12')
print to_int('234')
print to_int('12#$%%')

 

结果:

D:Python27python.exe D:/HttpRunnerManager-master/HttpRunnerManager-master/test.py
False
False
12
234
False

 

 

python学习3群:563227894

 

TAG标签:
版权声明:本文由金沙澳门唯一官网发布于编程教学,转载请注明出处:python魔法方法,python将字符串转换成整型