• 4.python基础


    一、Python对象

    Python对象基础

    1、python对象特性

    所有的python对象都拥有三个特性:

    1.身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到

     2.类型:决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。用内建函数type()查看对象的类型

    3.值:对象表示的数据项

    2、python对象属性
    1.某些python对象有属性、值或相关联的可执行代码
    2.用点 . 标记法来访问属性
    3.最常用的属性是函数和方法,不过有一些Python类型也有数据属性
    4.含有数据属性的对象包括(但不限于) :类、类实例、模块、复数和文件

    3、对象身份比较

    1.对象可以通过引用被赋值到另一个变量

    2.因为每个变量都指向同一个(共享的)数据对象,只要任何一个引用发生改变,该对象的其它引用也会随之改变

     
    >>> aList = ['hello', 'bob']
    >>> bList = aList
    >>> id(aList)
    140614565571544
    >>> id(bList)
    140614565571544
    >>> aList is bList
    True
    >>> bList[1] = 'tom'
    >>> print aList
    ['hello', 'tom']
     

    python对象类型

    1、标准类型
    数字 :包含整型 、长整型 、布尔型 、浮点型 、复数型
    字符串
    列表
    元组
    字典

    2、其他内建类型

    在做python开发时,还可能用到的数据类型有

    类型 、Null对象(None) 、文件 、集合/固定集合 、函数/方法 、模块 和类

    3、内部类型
    以下类型通常用不到,只是为了知识的完整性,简要的列出 :

    代码 、帧 、跟踪记录 、切片 、省略 和xrange

    序列

    序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到。

    序列类型操作符

    序列操作符  作用
    seq[ind] 获得下标为ind的元素
    seq[ind1:ind2] 获得下标从ind1到ind2之间的元素集合
    seq * expr    序列重复expr次
    seq1 + seq2   连接序列seq1 + seq2
    obj in seq 判断obj元素是否包含在seq中
    obj not in seq   判断obj元素是否不包含在seq中

    1、通用序列操作

    索引、分片、加、乘、检查某个元素是否属于序列的成员(成员资格)、连接

    2、Python的序列

     Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和 xrange 对象。

    序列通用的操作包括:索引、长度、组合(序列相加)、重复(乘法)、分片、检查成员、遍历、最小值和最大值。

    3、序列类型可用的内建函数

    enumerate(iter)

    len(seq)

    max

    min

    reversed(seq)

    sorted

    sum

    zip

    四、Python数据类型                                                                          

    Python有五个标准的数据类型:

    1.Numbers(数字)

    2.String(字符串)

    3.List(列表)

    4.Tuple(元组)

    5.Dictionary(字典)

    数字

    Python 支持的基本数字类型:

    1、int :有符号整数

    2、long:长整型

    3、bool:布尔值

    4、float:浮点

    5、complex:复数

    1、int(整型)

      在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
      在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

    2、long(长整型)

    1.C或其它编译型语言的长整数类型的取值范围是32位或64位

    2.跟C语言不同,python的长整数类型能表达的数值仅仅与机器支持的(虚拟)内存大小有关 ,

      即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
    3.注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

    4.在一个整数值后面加个L(大写或小写都可以),表示这个整数是长整数
    5.这个整数可以是十进制,八进制,或十六进制

    3.float(浮点型)

    浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
    complex(复数)
      复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

    注:Python中存在小数字池:-5 ~ 257
     
    4、bool(布尔值):
    1.该类型的取值只有两个,即True和False ;
    2.True的数值为1,False的数值为0
    3.在判断语句中,空列表、空元组、空字符串、空字典、数值为0的数字以及None皆为False,其他皆为True
     
    4.所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔 True 或 False 值。
    5.空对象、 值为零的任何数字或者 Null 对象 None 的布尔值都是 False。
    下列对象的布尔值是 False。 
     
     
    None
    False (布尔类型)
     所有的值为零的数
    0 (整型)
    (浮点型)
    0L (长整型)
    0.0+0.0j (复数)
    "" (空字符串)
    [] (空列表)
    () (空元组)
    {} (空字典) 
     
     
    6.值不是上面列出来的任何值的对象的布尔值都是 True,例如 non-empty、 non-zero 等等。
    7.用户创建的类实例如果定义了 nonzero(__nonzero__())或 length(__len__())且值为 0,那么它们的布尔值就是 False。
    8.数字如果非零,则为真
    9.其他对象如果非空,则为真
     
     
     
    5、数字表示方式
    1.python默认以十进制数显示
    2.数字以0开头表示为8进制数
    3.数字以0x或0X开头表示16进制数
    4.数字以0b或0B开头表示2进制数
     
     
    6、创建数值对象并赋值
    1、数字提供了标量贮存和直接访问
    2、创建数值对象和给变量赋值一样简单
    >>> anInt = 1
    >>> aLong = -9999999999999999L
    >>> aFloat = 3.1415926535897932384626433832795
    >>> aComplex = 1.23+4.56J

    7、更新数字对象

    1、数字是不可更改类型,也就是说变更数字的值会生成新的对象
    2、在python中,变量更像一个指针指向装变量值的盒子
    3、对不可改变类型来说,你无法改变盒子的内容,但你可以将指针指向一个新盒子

     
    >>> i = 3
    >>> id(i)
    18486024
    >>> i = 4
    >>> id(i)
    18486000
     

    8、删除数字对象

    1、按照python的法则,无法真正删除一个数值对象,仅仅是不再使用它而已
    2、删除一个数值对象的引用,使用del语句
    3、删除对象的引用之后,就不能再使用这个引用(变量名),除非给它赋一个新值
    4、绝大多数情况下并不需要明确del一个对象

    9、标准类型运算符

    1、在做数值运算时,必须努力保证操作数是合适的类型
    2、相同类型数值运算,得到结果也是该类型的数值
    3、不同类型数值运算,需要(显示或隐式地)做数值类型的转换

    Python数字类型转换

     
    int(x [,base ])         将x转换为一个整数  
    
    long(x [,base ])        将x转换为一个长整数  
    
    float(x )               将x转换到一个浮点数  
    
    complex(real [,imag ])  创建一个复数  
    
    str(x )                 将对象 x 转换为字符串  
    
    repr(x )                将对象 x 转换为表达式字符串  
    
    eval(str )              用来计算在字符串中的有效Python表达式,并返回一个对象  
    
    tuple(s )               将序列 s 转换为一个元组  
    
    list(s )                将序列 s 转换为一个列表  
    
    chr(x )                 将一个整数转换为一个字符  
    
    unichr(x )              将一个整数转换为Unicode字符  
    
    ord(x )                 将一个字符转换为它的整数值  
    
    hex(x )                 将一个整数转换为一个十六进制字符串 
     
    oct(x )                 将一个整数转换为一个八进制字符串
     

     

    python数字类型转换实例:

     
    >>> x = "12"
    >>> type(x)
    <type 'str'>
    >>> int(x)
    12
    >>> type(12)
    <type 'int'>


    >>> str(x)
    '12'
    >>> repr(x)
    "'12'"
    >>> tuple(x)
    ('1', '2')
    >>> list(x)
    ['1', '2']

    >>> x = 12
    >>> chr(x)
    'x0c'
    >>> unichr(x)
    u'x0c'

    >>> ord('a') #把字符转换为整数值
    97
    >>> hex(97) 转换成16进制
    '0x61'
    >>> oct(10) #8进制的12,转换为10进制:12(8)= 1 x 10^1 + 2 * 10^0 = 10
    '012'

     

    补充知识:进制转换

     
    更多参考:http://jingyan.baidu.com/article/a3a3f811f7ab518da2eb8acb.html

    十进制转任意进制的方法:短除法 短除法:除基取余法,反向写出 其他进制转换成10进制: 1、按权展开求和:乘基求和 用公式来表示就是: abcd = a * A^3 + b * A^2 + c * A^1 + d * A^0 #权重为A, 在7进制下,数字1234 的大小应该是 1 * 7^3 + 2 * 7^2 + 3 * 7^1 + 4 * 7^0 =1*343 + 2*49 + 3*7 + 4*1 =466

     

    Python数学函数

    函数返回值 ( 描述 )
    abs(x) 返回数字的绝对值,如abs(-10) 返回 10
    ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5
    cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
    exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
    fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
    floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
    log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
    log10(x) 返回以10为基数的x的对数,如math.log10(100)返回 2.0
    max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
    min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
    modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
    pow(x, y) x**y 运算后的值。
    round(x [,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
    sqrt(x) 返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j

    Python随机数函数

    随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

    Python包含以下常用随机数函数:

    函数描述
    choice(seq) 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
    randrange ([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1
    random() 随机生成下一个实数,它在[0,1)范围内。
    seed([x]) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
    shuffle(lst) 将序列的所有元素随机排序
    uniform(x, y) 随机生成下一个实数,它在[x,y]范围内。

    Python三角函数

    Python包括以下三角函数:

    函数描述
    acos(x) 返回x的反余弦弧度值。
    asin(x) 返回x的反正弦弧度值。  
    atan(x) 返回x的反正切弧度值。
    atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值。
    cos(x) 返回x的弧度的余弦值。
    hypot(x, y) 返回欧几里德范数 sqrt(x*x + y*y)。
    sin(x) 返回的x弧度的正弦值。
    tan(x) 返回x弧度的正切值。
    degrees(x) 将弧度转换为角度,如math.degrees(math.tan(1.0)) ,返回30.0
    radians(x) 将角度转换为弧度

    Python数学常量

    常量描述
    pi 数学常量 pi(圆周率,一般以π来表示)
    e 数学常量 e,e即自然常数(自然常数)

     数据类型比较

    1、按存储模型分类

    1.标量类型:数值、字符串
    2. 容器类型:列表、元组、字典

    2、按更新模型分类:
    1. 可变类型:列表、字典
    2. 不可变类型:数字、字符串、元组

    3、按访问模型分类
    1. 直接访问:数字
    2. 顺序访问:字符串、列表、元组
    3. 映射访问:字典

    备注:

    1、当一个变量使用赋值语句创建出来后,等号右边的值变成了内存中的一个对象,而变量引用(即指向)那个对象

    2、当改变一个可变类型时,这个变化是作用于可变类型内存位置中的对象上的

    3、但是,当一个变量要改变它的值并且这个值是不可变类型时,Python会分配一个新的内存位置存储新值,并将变量引用到新的对象上。

    4、能够原地修改的对象称为可变类型,而不能原地修改的对象称为不可变类型。

     5、只有可变对象(列表、字典和集合)可以原处修改

     一般来说:

    1、列表、字典和元组可以包含任何种类的对象

    2、列表、字典和元组可以任意嵌套

    3、列表和字典可以动态地扩大和缩小

    python中的可哈希与不可哈希

     

    什么是可哈希(hashable)?

    简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。

    哈希有啥作用?

    它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。

    什么是不可哈希(unhashable)?

    同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)

    下面举例说明:

    可变类型的数据不可哈希,如list,字典:同值不同址,不同值同址

    >>> a = [1,2,3]
    >>> b = [1,2,3]
    >>> print id(a)
    56055304
    >>> print id(b)
    56169992
    >>> a.append(4)
    >>> print id(a)
    56055304
    >>>


    数值、字母、字符串、数字、元组不可变:同值同址,不同值不同址

    >>> a = 12
    >>> b = 12
    >>> id(a)
    50815600L
    >>> id(b)
    50815600L
    >>> c = 13
    >>> id(c)
    50815576L
    >>> a = 13
    >>> b =12
    >>> id(a)
    50815576L
    >>> id(b)
    50815600L
    怎么判断可变不可变 ?
     
    总结:改个值 看id是不是一样,id一样的为可变,则不可哈希,
    改了值,id变化,则为不可变,则可哈希

    哈希性参考:

    https://www.cnblogs.com/liangmingshen/p/10889172.html

    http://www.mamicode.com/info-detail-2223756.html

  • 相关阅读:
    18网三袁昳 实验三
    18网三袁昳 网络对抗技术实验二
    18网三袁昳 网络对抗技术实验一
    实验六
    实验五(18网三43号)
    实验四 18网三43号
    实验三(18网三43号)
    实验二(18网三43号袁昳)
    实验一(18网三43号)
    实验四(恶意代码技术)
  • 原文地址:https://www.cnblogs.com/zhongguiyao/p/11048081.html
Copyright © 2020-2023  润新知