赋值
x = y = 123 #链式赋值
a,b = 1,2 #系列赋值
a,b = b,a #变量互换
MAX_NUM = 100 #常量实际可以更改,逻辑上不要改
内置类型
1.整型
2.浮点型3.14=314e-2
3.布尔型 :Ture、False
4.字符串型
运算
运算符:±*%
/(浮点除)
//(整除)
**(幂)
divmod(13,4) #同时输出商和余数元组
a += 2 a = a+2
类型转换
#int()实现类型转换
a = int('456')
b = int(True)
c = int(3.14)
#不能转换
int('abc')
int('true')
python整数大小无上限
类型转换不改变原有值,而是生成新值
round(value) #返回四舍五入值
>>> round(3.6)
4
时间的表示
时间的元年是1970
import time
print(time.time())
比较运算符
==、!=…
逻辑运算符
or
>>> a = True
>>> b = False
>>> a or b #第一个True,返回第一个,不计算后面的
True
>>> 30 or b
30
>>> b or 30 #第一个False,返回第二个
30
and
>>> 30 and b #第一个为True,直接返回第二个
False
>>> b and a #第一个为False,不计算后面,直接返回False
False
>>> 30 and a
True
not
>>> not 1
False
>>> not False
True
同一运算符
is :判断是不是同一对象,比较的是地址
==:比较的是值
>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False
>>> id(b)
2327959247312
>>> id(a)
2327959247568
整数缓存【-5,256】
>>> c = 3
>>> d = 3
>>> c is d
True
字符串
- 编码
16 位 Unicode 编码
字符串的修改,实质上是创建新的字符串
>>> ord('A')
65
>>> ord('1')
49
- 创建字符串
>>> a = "I'm a student" #双引号包单引号
>>> b = 'I am "Tom"' #单引号包双引号
a = '''name = 'sxl, age = 21,
sex = 1''' #创建多行
- input() 从控制台获取字符串
name = input('请输入你的名字:')
- len()
>>> d = '' #空字符串
>>> e = ' '
>>> len(d)
0
>>> len(e)
1
- 拼接
>>> "aa" + "b"
'aab'
- 复制
>>> "12"*5
'1212121212'
转义字符
\ +特殊字符
不换行打印
print("sxl", end='*')
print('ok')
sxl*ok #不换行
取字符
>>> str(123) #转为字符串
'123'
>>> a = 'abcde'
>>> a[0] #正向搜索
'a'
>>> a[-1] #负向搜索
'e'
>>> a.replace('c','u') #字符串替换,不过a对象没有变化,只是生成新对象。
'abude'
切片操作(包头不包尾)
>>> a = 'abcdefg'
>>> a [1:6:1] #起始偏移量、终止、步长
'bcdef'
>>> a [:] #全
'abcdefg'
>>> a [1:] #简写
'bcdefg'
>>> a [:2] #简写
'ab'
>>> a [-4:-2] #反向
'de'
>>> a [::-2] #反向
'geca'
split()切割、join()合并
>>> a = 'to be or not to be'
>>> a.split() #切割,默认空白字符
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('to')
['', ' be or not ', ' be']
>>> b = ['', ' be or not ', ' be']
>>> 'to'.join(b) #合并列表,用to连接
'to be or not to be'
#join()合并效率高
import time
time01 = time.time()
a = ''
for i in range(100000):
a += 'sxl'
time02 = time.time()
print('join函数只生成一个对象的时间' + str(time02-time01))
time03 = time.time()
li = []
for i in range(100000):
li.append('sxl')
a = ''.join(li)
time04 = time.time()
print('+生成n个对象' + str(time04-time03))
字符串驻留机制
#已经生成了'abc_1'对象,a、b变量只是引用对象。(该对象必须符合标识符规则)
>>> a = 'abc_1'
>>> b = 'abc_1'
>>> id(a)
2590876081968
>>> id(b)
2590876081968
字符串格式化str.format()
#{索引}
>>> a = '名字是{0},年龄是{1},{0}是中国人'
>>> a.format('sxl',21)
'名字是sxl,年龄是21,sxl是中国人'
#{参数名}
>>> a = '名字是{name},年龄是{age}'
>>> a.format(name ='sxl', age = 21)
'名字是sxl,年龄是21'
#^、<、>分别是居中、左对齐、右对齐,后面带宽度
#:号后面带填充的字符,只能是一个字符,
#不指定的话默认是用空格填充
>>> "{:*>8}".format("245")
'*****245'
#数字格式化
>>> a = "我是{0},我的存款有{1:.2f}"
>>> a.format("sxl",3888.234342)
'我是sxl,我的存款有 3888.2
可变字符串
字符串是不可变对象,如果修改其值只能创建新对象。或者用io.StringIO()原地修改
>>> import io
>>> a = '123456789'
>>> b = io.StringIO(a)
>>> b
<_io.StringIO object at 0x00000249E854D820> #可变对象,可以修改
>>> id(a)
2516453935024
>>> id(b)
2516453742624
>>> b.seek(7) #移动到索引值为7的位置
7
>>> b.write('6') #在该位置写如6
1
>>> b.getvalue()
'123456769'