课程链接:https://aistudio.baidu.com/aistudio/course/introduce/7073
显示自定字符在字符串当中的个数
返回从左第一个指定字符的索引,找不到返回-1,可寻找字符串,返回字符串首字母的索引
返回从左第一个指定字符的索引,找不到报错
返回一个布尔数
按照指定的内容进行分割
从左到右替换指定的元素,可以指定替换的个数,默认全部替换
默认去除两边的空格、换行符之类的,去除内容可以指定
msg = 'wO shI feI haI laO shI'
print(msg. title()) #以首字母大写的方式显示每个单词
print(msg. upper()) #以每个字母都大写的方式显示每个单词
print(msg. lower()) #以每个字母都小写的方式显示每个单词
print(msg. capitalize()) #把字符串的第一个字母转换成大写
name = 'feihai'
hight = 180.5
score_math = 95
score_english = 89
print('大家好!我叫%s,我的身高是%d cm, 数学成绩%.2f分,英语成绩%d分' % (name, hight, score_math, score_english))
print('大家好!我叫{},我的身高是{:d} cm, 数学成绩{:.2f}分,英语成绩{}分'.format(name, int(hight), score_math, score_english)) #{:d}控制格式
print('Hello, {0}, 成绩提升了{2:.1f}分,百分比为 {1:.1f}%'.format('小明', 6, 17.523)) #{1:d}调位置
print('Hello, {name:}, 成绩提升了{score:.1f}分,百分比为 {percent:.1f}%'\
.format(name='小明', #\换行
score=6,
percent = 17.523))
#f-string 可读性最强
name = 'Molly'
hight = 170.4
score_math = 95
score_english = 89
print(f"大家好!我叫{name},我的身高是{hight:.3f} cm, 数学成绩{score_math}分,英语成绩{score_english}分")
list1.extend(list2) # list1 += list2, list2不变
可使用 list1 + list2 ,生成一个新列表,list1和list2的值不改变
list1 = [1,2,3,4,5,6,7]
list2 = list1[:4] #获取列表前4个元素
list3 = list1[2:] #获取列表从第3个以后的元素
list4 = list1[2:-8:-1] #获取前3个元素,并逆序排列
list1[:2]=[10,20] #可通过切片对列表赋值
list5=list1[:] #得到两个列表,可分别操作
list1.append('01')
list5.append('02')
可使用 list5 = list1 ,不过此操作指向同一个list,不可分别操作
list6 = [i**2 for i in range(1,11)] 创建1~10的平方数列表
格式为[表达式 for循环] , for循环用于提供值
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
g = (x * x for x in range(10))
相当于创建了一个对象g,可通过
for n in g:
print(n)
和
print(next(g))
来获取g中的值
def factor(max_num):
# 这是一个函数 用于输出所有小于max_num的质数
factor_list = []
n = 2
while n < max_num:
find = False
for f in factor_list:
# 先看看列表里面有没有能整除它的
if n % f == 0:
find = True
break
if not find:
factor_list.append(n)
a = yield n #a只是为了后文方便说明程序而建立的变量
print('a = ',a)
n += 1
g = factor(10)
print(next(g))
print('----------')
print(next(g))
上课时是第一次接触这个yield这个关键字,听的迷迷糊糊,课后翻阅了资料后有了自己的理解:
①若函数体包含yield关键字,调用函数,并不会执行函数体代码,得到的返回值即生成器对象
②直到程序执行print(next(g)),函数才开始执行,知道遇到yield关键字
③此时可以把yield当做return,return了一个2,程序停止,没有执行 赋值给a的操作, 此时next(g)语句执行完成
④程序执行print(’----------’)
⑤程序执行print(next(g)),与return不同的地方来了,这时候是从yield的地方开始执行的,也就是要执行a的赋值。这时候注意,赋值操作的右边是没有值的(因为刚才那个是return出去了,并没有给赋值操作的左边传参数),所以这个时候a赋值是None
⑥程序继续执行 n += 1 ,继续在while里执行,又一次碰到yield,此时同样return了一个3,然后程序停止。
⑦一直执行print(next(g)),就能获得一个列表,不过a的值永远为None
感谢冯爽朗大佬的《python中yield的用法详解——最简单,最清晰的解释》中的解释,才让我理解了这个yield关键字。附上地址:冯爽朗:python中yield的用法详解——最简单,最清晰的解释
同时,若想要上面程序中a能赋值,可用到
send方法有一个参数,该参数指定的是上一次被挂起的yield语句的返回值
def factor(max_num):
# 这是一个函数 用于输出所有小于max_num的质数
factor_list = []
n = 2
while n < max_num:
find = False
for f in factor_list:
# 先看看列表里面有没有能整除它的
if n % f == 0:
find = True
break
if not find:
factor_list.append(n)
a = yield n #a只是为了后文方便说明程序而建立的变量
print('a = ',a)
n += 1
g = factor(10)
print(next(g))
print('----------')
print(next(g))
print('----------')
print(g.send(5))
执行print(g.send(5))时,将表达式(yield n)的返回值定义为send方法参数的值,即为5。然后a = yield n会将a的值置为5
总的来说,send方法和next方法唯一的区别是在执行send方法会首先把上一次yield语句的返回值通过参数设定。但是需要注意,在一个生成器对象没有执行next方法之前,由于没有yield语句被挂起,所以执行send方法会报错。