数据类型
使用交互界面可以直接赋值:
>>> a=10
>>> id(a)
9178176
>>> type(a)
<class 'int'>
>>> a
10
使用id()和type() 函数可以查看变量的值在内存中的ID号和数据类型,同理,可以使用此种方式来查看字符串,列表,字典等。
通过使用' '," ",或''' '''的方式可以表示字符串类型。
>>> a='123'
>>> id(a)
140528106920736
>>> type(a)
<class 'str'>
>>> a
'123'
其中,列表和字典的值是可变的,其他类型值是不可变的(这里的可变和不可变指的是内存中映射的相同id下的值)
可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
变量的定义规范:
- 只能是字母,数字或下划线的任意组合
- 变量的第一个字符不能是数字
- 关键字不能声明为变量名
在python2和python3中,使用input()数据的输入
会有区别:
python2:
>>> t=input('input:')
input:123
>>> type(t)
<type 'int'>
python3:
>>> t=input('input:')
input:123
>>> type(t)
<class 'str'>
python2中输入的数据格式会自动存储为对应的格式,而python3中无论输入的是什么格式,最终都会是字符串的格式。python2中的raw_input()函数和python3中的input()函数是有相同的功能:
python2:
>>> t=raw_input(":")
:123
>>> type(t)
<type 'str'>
数据类型的转换
对于数据的转换可以使用str()函数或者int(),但是要将str类型转换为list类型,可以使用eval():
>>> t=input('input:')
input:[1,2,3]
>>> type(t)
<class 'str'>
>>> l=eval(t)
>>> l
[1, 2, 3]
>>> type(l)
<class 'list'>
eval()函数可以将字符串等内容转换为一条可以执行的命令,类似于shell中的|bash 命令。
需要注意的是,在python2中,使用input(),输入没有定义的变量名会报名称没有定义的错误,如果是字符串,需要带引号:
>>> input(':')
:x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'x' is not defined
>>> input(':')
:'X'
'X'
变量赋值
python支持链式赋值:
>>> a=b=c=d=10
>>> a,b,c,d
(10, 10, 10, 10)
>>> a
10
交换值python非常灵活:
>>> x=1
>>> y=2
>>> x,y=y,x
>>> x
2
>>> y
1
格式化输出
使用%s 和%d 可以表示字符串和数字,在格式化输出的时候可以带入:
>>> print('this is python %d' %3)
this is python 3
>>> print('this is %s %d' %('python',3))
this is python 3
数字
python3在定义数字的时候会默认给出数字的类型(int或 float,complex),与python2不同的是python3中取消了长整型。
>>> a=10 # 系统自动添加了类型相当于 a=int(10)
>>> type(a)
<type 'int'>
>>> b=10.0 # 系统自动添加了类型相当于 a=float(10.0)
>>> type(b)
<type 'float'>
>>> c=1-2j # 复数
>>> type(c)
<type 'complex'>
数字进制转换:
>>> a=10 # 10进制数
>>> print(bin(a))
0b1010 # 转换为二进制 1010
>>> print(oct(a))
012 # 转换为八进制 12
>>> print(hex(a))
0xa # 转换为十六进制 a
字符串处理
索引 定义字符串使用单引号,双引号或者三引号表示。python中没有定义字符的机制,如果取单个字符串的字符,可以使用序列的方式表示:
>>> a='abcdef'
>>> print(a)
abcdef
>>> print(a[0])
a
>>> print(a[1])
b
strip() 对于字符中多余符号的处理,可以使用strip()函数,默认是去掉空格:
>>> a=input('a:')
a: abc
>>> a
' abc'
>>> a.strip()
'abc'
去除多余的字符,可使用strip()函数:
>>> a=input('a:')
a:#####abc#####
>>> a.strip('#')
'abc'
>>> a=input('a:')
a:###***abc***&&&
>>> a.strip('#*&')
'abc'
当然,也可以只去除一边的字符:
>>> a.lstrip('#*&')
'abc***&&&'
>>> a.rstrip('#*&')
'###***abc'
split() 字符串切分,默认使用空格:
>>> name='root:x:0:0:root:/root:/bin/bash'
>>> print(name.split(':'))
['root', 'x', '0', '0', 'root', '/root', '/bin/bash']
>>> print(name.split(':')[5])
/root
指定切分的次数:
>>> print(name.split(':',1))
['root', 'x:0:0:root:/root:/bin/bash']
>>> print(name.split(':',1)[0])
root
多个空格合并为一个:
>>> name='welcom to new home'
>>> name
'welcom to new home'
>>> name.split()
['welcom', 'to', 'new', 'home']
>>> print(name.split())
['welcom', 'to', 'new', 'home']
切片 第一个数字为起始位(以0开始),第二个数字为结束位(不包含结束位),第三个数字为步长(取值间隔):
>>> name='abcdefgh'
>>> name[2]
'c'
>>> name[2:4]
'cd'
>>> name[2:6:2]
'ce'
len() 字符长度:
>>> name='abc'
>>> name.__len__()
3
>>> len(name)
3
startswith() 与 endswith() 判断是否以某个字符串开始或者结尾:
>>> a='hello world'
>>> a.startswith('he')
True
>>> a.endswith('old')
False
>>> a.endswith('rld')
True
replace() 字符替换,第一个字符表示要替换的字符,第二个表示新的字符,第三个数字表示替换的个数:
>>> a='hello world'
>>> a.replace('l','x',2)
'hexxo world'
>>> a.replace('l','x',3)
'hexxo worxd'
format() 格式化匹配,任意顺序也可格式化字符表示:
>>> '{} {} {}'.format('a','b',3)
'a b 3'
>>> '{0} {1} {0}'.format('a','b',3)
'a b a'
>>> '{name} {sex} {age}'.format(name='a',sex='b',age=3)
'a b 3'
>>> 'NAME:{name} SEX:{sex} AGE:{age}'.format(name='a',sex='b',age=3)
'NAME:a SEX:b AGE:3'
>>> 'NAME:{name} SEX:{sex} AGE:{age}'.format(age=3,name='a',sex='b')
'NAME:a SEX:b AGE:3'
isdigit() 判断输入的字符串
是否是数字:
>>> num='123'
>>> num.isdigit()
True
find()和 rfind() 查找字符所在的索引位置,找不到时返回-1,rfind()表示从右向左查找:
>>> a='hello world'
>>> a.find('3')
-1
>>> a.find('o')
4
>>> a.find('o',4,8)
4
>>> a.find('o',5,8)
7
>>> a.rfind('o',4,8)
7
index()和rindex() 显示字符所在的下标索引,数字表示指定的索引范围,字符不存在会报错,rindex()表示从右向左查找:
>>> a='hello world'
>>> a.index('o')
4
>>> a.rindex('o')
7
>>> a.index('o',4,8)
4
>>> a.index('3')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
count() 统计字符的个数,数字表示索引范围:
>>> a='hello world'
>>> a.count('o')
2
>>> a.count('o',5,8)
1
join() 表示拼接字符串:
>>> name
['welcom', 'to', 'new', 'home']
>>> ' '.join(name)
'welcom to new home'
>>> ':'.join(name)
'welcom:to:new:home'
>>> name='welcom to new home'
>>> name.split()
['welcom', 'to', 'new', 'home']
>>> ' '.join(name.split())
'welcom to new home'
center(),ljust(),rjust(),zfull() 字符填充:
>>> a='hello'
>>> a.center(30,'*')
'************hello*************'
>>> a.rjust(30,'*')
'*************************hello'
>>> a.ljust(30,'*')
'hello*************************'
>>> a.ljust(30)
'hello '
>>> a.zfill(30)
'0000000000000000000000000hello'
expandtabs() 指定tab键的空格数目:
>>> name='hello\tworld'
>>> print(name)
hello world
>>> print(name.expandtabs(1))
hello world
字母大小写转换:
>>> name='hello world'
>>> name.upper() # 全部大写
'HELLO WORLD'
>>> name.capitalize() # 第一个单词首字母大写
'Hello world'
>>> name.swapcase() # 大小写反转
'HELLO WORLD'
>>> name.title() # 每个单词首字母大写
'Hello World'
>>> name='HELLO'
>>> name.lower() # 全部小写
'hello'
判断字符串的组成:
>>> name='hello'
>>> name.isalnum() # 判断由字符串或数字组成
True
>>> name.isalpha()
True
>>> name='hello123'
>>> name.isalpha() # 判断只有字母组成
False
>>> name.isalnum()
True
>>> name='123'
>>> name.isalnum()
True
>>> name='hello123###'
>>> name.isalnum()
False
判断是否为数字,多中不同的判断方式可以判断不同的数字类型, 在无特殊情况下,对数字的判断使用isdigit()
即可:
>>> n1=b'5' # Bytes 型数字
>>> n2=u'5' # unicode, python3中默认使用此种类型数字
>>> n3='四' # 中文数字
>>> n4='Ⅴ' # 罗马数字
>>> n1.isdigit()
True
>>> n2.isdigit()
True
>>> n3.isdigit()
False
>>> n4.isdigit()
False
>>> n1.isnumeric() # Bytes 类型无此方法
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'isnumeric'
>>> n2.isnumeric()
True
>>> n3.isnumeric()
True
>>> n4.isnumeric()
True
>>> n1.isdecimal() # Bytes 类型无此方法
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'isdecimal'
>>> n2.isdecimal()
True
>>> n3.isdecimal()
False
>>> n4.isdecimal()
False