字符串格式化

字符串格式化

1.字符串格式占位符

数据和格式占位符一一对应

1
2
3
4
%s - 字符串占位符 - 可以给任何类型的数据站位
%d - 整数占位符 - 只能给数字占位,如果是浮点数会去除小数点后面的数
%f - 浮点数占位符 - 只能给数字占位,默认保留6位小数
%.Nf - 浮点数占位符,只能给数字占位,保留N位小数
1
2
3
4
5
6
7
name = '小明'
age = 18
gender = '男'
money = 19999.9

message = '%s今年%d岁,性别:%s,月薪是:%s元' % (name,age,gender,money)
print(message)

2.f-string

在字符串外面加f,里面就可以通过{表达式} 来为字符串指定位置赋值

2.1基本用法:{提供数据的表达式}

2.2加参数:{提供数据的表达式:参数}

2.2.1 - :, - 数字数据在显示时以银行显示金额的方式显示,(每三位以逗号隔开)(用于数字数据)

2.2.2 - :.N% - 数字数据以百分比方式显示, .N控制小数位数,默认为6位小数,可以不写

2.2.3 - :.Nf - 直接控制小数位数,由N控制

2.2.4 - :x>N - 相当于rjust x 表示填充字符,不给是空格,N是填充后的长度

2.2.5 - :x<N - 相当于ljust x 表示填充字符,不给是空格,N是填充后的长度

2.2.6 - :x^N - 相当于center x 表示填充字符,不给是空格,N是填充后的长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name = '小明'
age = 18
gender = '男'
money = 99999999

# message = f'{name}今年{age}岁,性别:{gender},月薪:{money}元'
# message = f'{name}今年{age}岁,性别:{gender},月薪:{money:,}元,增长率:{0.2344:%}'
message = f'{name}今年{age}岁,性别:{gender},月薪:{money:,}元,增长率:{0.2344:.2%}'
print(message)


a = 100
list1 = [10,20,30]
message = f'a:{a},ax10:{a*10},d:{list1},e:{list1[0]},f:{[i for i in list1 if i <=20]}'
print(message)

print(f'数字:{"abc":a>5}')
### 数字:aaabc 其中a可以不给,就是空格

总结 - 容器型数据类型

1.区分不同容器的应用场景(列表,元组,集合,字典,字符串,range)

1.1容器的本质:能够同时保存多个数据

1.1.1 字符串和range - 不适合作为容器来保存多个别的数据

a.字符串 - 只能以字符为单位保存多个文字符号

b.range - 只能存储等差数列的数据(程序只能控制范围和差)

1.1.2 列表,元组,集合,字典 - 都可以存储通过别的方式提供的多个数据

a.列表,字典 - 同时保存多个数据的最好选择(意义相同的数据用列表,反之用字典)

b.元组 - 特点:不可变!要求多个数据存储到容器中以后不能修改

c.集合 - 去重,数学集合运算

2.拷贝和不拷贝的问题

2.1 为什么元组没有copy()方法(不可变的数据拷贝没有意义)

1
2
python存储数据的底层逻辑
数据保存在堆里面,变量在栈里面,变量保存的是数据在堆中的地址

2.2 可变数据类型的变量直接赋值和拷贝的区别

直接用一个变量给另外一个变量赋值,是将这个变量保存的地址复制给另一个变量

拷贝会生成一份新的内存地址

3.怎么判断是否需要获取函数或者方法的结果

1
2
3
4
5
6
7
8
9
10
### 获取使用结果
list1 = [20,10,30,40,20,50]
result = list1.count(20)
print(result)

## 不获取,不使用方法的结果

result2 = list1.append(100)
print(list1)
print(result2) ##None 没有意义,不获取不使用方法的结果

扩展id函数:id(数据/变量) - 获取数据在内存中的地址/变量直接存储的地址

多个相同的不可变数据在内存中只保留一个

多个相同的可变数据在内存中保留多个

1
2
3
4
num = 100
age = 100
print(id(num),id(age))
##140711439569680 140711439569680