澳门至尊网站-首页

您的位置:澳门至尊网站 > 技术教程 > python将字符串转换成整型,属性转换和类的表示

python将字符串转换成整型,属性转换和类的表示

2019-10-16 15:29

将字符串调换来,整型,从字面掌握很轻易令人误会。

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

 

本文由澳门至尊网站发布于技术教程,转载请注明出处:python将字符串转换成整型,属性转换和类的表示

关键词:

  • 上一篇:没有了
  • 下一篇:没有了