Python基本数据类型(数字 字符串)

 前引

1 什么是数据?

  x=10,10是我们要存储的数据

2 为何数据要分不同的类型

  数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示

3 标准数据类型

Python3 中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

Python3 的六个标准数据类型中:

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

数字类 Number

Python3 支持 int、float、bool、complex(复数).  复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型

int(整型)

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
  在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
 

整数  int

在Python3里,只有一种整数类型 int,表示为长整型. 不再用 python2 中的 Long

数字主要是用于计算用的,使用方法并不是很多,就记住一种就可以

#!/usr/bin/env python
#bit_length() 当十进制的数字用二进制表示时,最少使用的位数
v = 11111
abcde = v.bit_length()
print(abcde)
[root@VM_0_15_centos py]# python int.py
14

内置的 type() 函数可以用来查询变量所指的对象类型:

>>> a,b,c,d = 10,2.5,True,5+6j
>>> print(type(a),type(b),type(c),type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

还可以用 isinstance 来判断:

>>> a,b,c,d = 10,2.5,True,5+6j
>>> isinstance(a,int)
True
>>> isinstance(b,int)
False
>>> isinstance(b,float)
True

isinstance 和 type 的区别在于

class A:
    pass

class B(A):
    pass

isinstance(A(), A)  # returns True
type(A()) == A      # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

区别就是:

  • type()不会认为子类是一种父类类型。
  • isinstance()会认为子类是一种父类类型

布尔值  bool

布尔值就两种:True,False。就是反应条件的正确与否。

真   1   True。

假   0   False。

在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加.

浮点数  float

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.233.14-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差

字符串  str

字符串用单引号 ' 或双引号 "  多行时三引号 ''' 括起来,同时可使用反斜杠 \ 转义特殊字符

索引与切片

索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推

索引值以 0 为开始值,-1 为从末尾的开始位置。

 切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾前不顾后  ----左闭右开

拼接与复制  加号 + 是字符串的连接符, 星号 * 表示复制当前字符串,紧跟的数字为复制的次数

str = 'mingetty'
 
print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str * 2)      # 输出字符串两次
print (str + "xxx")  # 连接字符串
print(a[0:5:2])    #加步长
print(a[5:0:-2])    #反向加步长
>>> print(str1[0::2])
mnet
>>> print(str1[-1:0:2])

>>> print(str1[-1:0:-2])
ytgi

转义字符 ( \ 或者 r' '  )

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\ , 有时要转义的字符太多简化写法为 r'' ,表示''内部的字符串默认不转义.如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容. 另外,反斜杠(\)可以作为续行符,表示下一行是上一行的延续。

>>> print('\\\t\\')
\    \
>>> print(r'\\\t\\')
\\\t\\
>>> print('\\\n\\')
\
\
>>> print(r'\\\n\\')
\\\n\\
>>> print('''
... wuhm
... kill
... py
... python''')

wuhm
kill
py
python
>>> print('abc\
... abc\
... 123')
abcabc123
>>> 

常用字符串处理方法

 .captalize  .swapcase  .title  .upper  .lower  # 大小写转换

#   大小写  captalize, swapcase, title, upper, lower
>>> tty='what is Python?'
>>> print(tty.capitalize())    #首字母大写
What is python?
>>> print(tty.swapcase())      #大小写翻转
WHAT IS pYTHON?
>>> print(tty.title())         #每个单词首字母大写
What Is Python?
>>> print(tty.upper())         #全部大写
WHAT IS PYTHON?
>>> print(tty.lower())         #全部小写
what is python?

 

#   大小写  captalize, swapcase, title
>>> tty='what is Python?'
>>> print(tty.capitalize())     #首字母大写
What is python?
>>> print(tty.swapcase())       #大小写翻转
WHAT IS pYTHON?
>>> print(tty.title())          #每个单词首字母大写
What Is Python?
>>> print(tty.upper())        #全部大写
WHAT IS PYTHON?
>>> print(tty.lower())        #全部小写
what is python?

#    居中,center    参数-->10为总长度,空白处填充=
>>> tty='12345'
>>> print(tty.center(10))
  
>>> print(tty.center(10,"="))
==12345===

#    字符串中某元素出现的次数 count
>>> tty='mingetty'
>>> print(tty.count("t"))
>>> print(tty.count("t",0,5))     #可以指定切片位置
>>> print(tty.count("mi"))
>>> print(tty.count("ni"))

#  凑8位补全   expandtabs  把字符串中的 tab 符号('\t')转为空格 , ()默认为8. 
# tab默认为8个空格. 如果tab前面的字符长度不足8,则字符串加tab一共补全至8位,如果tab键前面的字符长度超过8个不足16个则补全至16位,以此类推每次补全至加8位
>>> tty='a\tb'
>>> print(tty.expandtabs())
a       b
>>> print(tty.expandtabs(0))
ab
>>> print(tty.expandtabs(1))
a b
>>> print(tty.expandtabs(2))
a b
>>> print(tty.expandtabs(3))
a  b

>>> tty='12345678\t0'
>>> print(tty.expandtabs())
       0
>>> tty='123456789\t0'
>>> print(tty.expandtabs())
      0
>>> tty='1234567890\t0'
>>> print(tty.expandtabs())
     0

#    判断是否以...开头结尾  startswith  endswith
>>> t3='pythonpylife'
>>> print(t3.startswith('py'))
True
>>> print(t3.startswith('py',6,11))    #返回的是布尔值
True
>>> print(t3.endswith('fe'))
True
>>> print(t3.endswith('if',6,10))
False
>>> print(t3.endswith('if',6,11))
True

#    寻找字符串中某元素是否存在 find  index 
>>> t3='pythonpylife'
>>> print(t3.find('py'))
>>> print(t3.find('py',1,10))    # 返回的是找到的元素的索引,如果找不到返回-1
>>> print(t3.find('py',7,10))
-1
>>> print(t3.index('py',1,10))    # 返回的是找到的元素的索引,找不到就报错。
>>> print(t3.index('py',7,10))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

#  split rsplit 以什么分割(正反方向),最终形成一个列表, 此列表不含这个分割的元素
>>> tty1 = 'title,Tilte,atre,'.split('t')
>>> print(tty1)
['', 'i', 'le,Til', 'e,a', 're,']
>>> tty1 = 'title,Tilte,atre,'.split('t',1)
>>> print(tty1)
['', 'itle,Tilte,atre,']
>>> tty1 = 'title,Tilte,atre,'.split('t',2)
>>> print(tty1)
['', 'i', 'le,Tilte,atre,']
>>> tty1 = 'title,Tilte,atre,'.split('t',3)
>>> print(tty1)
['', 'i', 'le,Til', 'e,atre,']
>>> tty1 = 'title,Tilte,atre,'.split('t',-1)
>>> print(tty1)
['', 'i', 'le,Til', 'e,a', 're,']
>>> tty2 = 'title,Tilte,atre,'.rsplit('t')
>>> print(tty2)
['', 'i', 'le,Til', 'e,a', 're,']
>>> tty2 = 'title,Tilte,atre,'.rsplit('t',1)
>>> print(tty2)
['title,Tilte,a', 're,']
>>> tty2 = 'title,Tilte,atre,'.rsplit('t',2)
>>> print(tty2)
['title,Til', 'e,a', 're,']

#  format的三种玩法 格式化输出
>>> res='{} {} {}'.format('egon',18,'male')
>>> print(res)
egon 18 male
>>> res='{1} {0} {1}'.format('egon',18,'male')
>>> print(res)
egon 18
>>> res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
>>> print(res)
egon 18 male

#   strip  lstrip  rstrip 移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。  注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
>>> t1='  *=wuhm**'
>>> print(t1.strip())
*=wuhm**
>>> t2='*=wuhm**'
>>> print(t2.strip('*'))
=wuhm
>>> print(t2.lstrip('*'))
=wuhm**
>>> print(t2.rstrip('*'))
*=wuhm
>>> print(t2.rstrip('='))
*=wuhm**
>>> print(t2.lstrip('='))
*=wuhm**

#   replace  替换字符串,如果指定第三个参数  次数,则替换不超过几次
>>> py='new say :my name is new! new!'
>>> print(py.replace('new','old'))
old say :my name is old! old!
>>> print(py.replace('new','old',1))
old say :my name is new! new!
>>> print(py.replace('new','old',2))        # 2 为次数
old say :my name is old! new!

#    is 判断系列
>>> t1='abc123'
>>> print(t1.isalnum())    #字符串由字母或数字组成
True
>>> print(t1.isalpha())     #字符串只由字母组成
False
>>> print(t1.isdigit())        #字符串只由数字组成
False
>>> t2='abc'
>>> print(t2.isalnum())
True
>>> print(t2.isalpha())
True
>>> print(t2.isdigit())
False
>>> t3='123'
>>> print(t3.isalnum())
True
>>> print(t3.isalpha())
False
>>> print(t3.isdigit())
True

 

 

posted @ 2018-10-19 18:53  mingetty  阅读(219)  评论(0)    收藏  举报