zoukankan      html  css  js  c++  java
  • repr与eval函数使用,其实eval还真的蛮不错的。

    还是上基础,__str__与__repr__其实我有非常长的时间一直搞不清楚,他们具体有什么用。

    今天回头看了下高手老师以前的教学视频,结合《深入了解Python特性》的书中知识。给自己备注下。

    反着说,首先说比较少用的repr与eval这么简单的两个函数我以前尽然很长时间不理解。

    eval简单来说可以还原任何repr返回的对象。

    a = 123
    a_repr = repr(a)
    b = eval(a_repr)
    print(a == b)
    

     返回的是true

    以前我一直不理解,repr与str的关系,感觉就是repr就是在上面有套了一层引号,还是字符串,为什么还要设计一个repr做什么。

    其实repr一般与eval配对使用,一个任何的Python对象对可以使用repr函数(方法),通俗的理解我觉的可以说是用字符串的形式保存了下来,但可以用eval还原出来。

    class Car:
        def __init__(self, color, mileage):
            self.color = color
            self.mileage = mileage
    
    car = Car('red', 123)
    cat_repr = repr(car)
    car_2 = eval(cat_repr)
    print(car_2.color)
    

     实例也可以通过repr保存,然后通过eval返回对象。repr是Python里面应该最厉害的多态形式表达的一种,因为任何一个对象都拥有该方法,但每个方法的执行输出都不一样。

    eval对象里面如果是一些逻辑运算,还能算出里面的值,很早的时候,我就用eval给孩子做了心算表格。

    eval('1+2')
    3
    eval('1.2+2')
    3.2
    

     在一些外国教材或者小学生教材中,用eval('具体数字')我觉的比用int或float是合适多了,eval其实是最原始的还原对象初始的状态,以前还教孩子最好用int或者float感觉有所误导他。

    最后说一个format格式化输出中的!r用法

    在字符串的格式话中如果想格式化输入一个对象的repr状态,简单的格式化输入会有误解。

    a = '[1,2,3]'
    b = [1,2,3]
    f'a is {a}, b is {b}'
    'a is [1,2,3], b is [1, 2, 3]'
    

     在上面的代码中,从输出来看,根本无法看出来,原始状态喜爱,a与b的初始状态。

    a = '[1,2,3]'
    b = [1,2,3]
    f'a is {a}, b is {b}'
    'a is [1,2,3], b is [1, 2, 3]'
    f'a is {a !r}, b is {b !r}'
    "a is '[1,2,3]', b is [1, 2, 3]"
    

     但在!r输出中,可以明显的看出a与b的区别,a在repr之后,外面有一层小括号,说明以前该对象是列表,而b就明显以前是列表。

    __str__与__repr__的区别下一篇开始讲。

  • 相关阅读:
    XAF 有条件的对象访问权限
    XAF 顯示 UnInplace Report(設置自定義條件顯示報表,不是根據選擇ListView記錄條件顯示報表)
    XAF 如何自定义PivotGrid单元格显示文本?
    XAF 如何布局详细视图上的按钮
    XAF How to set size of a popup detail view
    XAF Delta Replication Module for Devexpress eXpressApp Framework
    XAF 帮助文档翻译 EasyTest Basics(基础)
    XAF 用户双击ListView记录时禁止显示DetailView
    XAF How to enable LayoutView mode in the GridControl in List Views
    XAF 如何实现ListView单元格批量更改?
  • 原文地址:https://www.cnblogs.com/sidianok/p/11922648.html
Copyright © 2011-2022 走看看