7-1 while循环与使用场景
循环、循环语句
主要看看两个循环 while和for
先看while
'''
CONDITION = True
while CONDITION:
print('i am while') #按ctrl + c 结束运行终端里的循环
'''
counter = 1 # 在递归的环境里用while的情况多点
while counter <= 10:
counter += 1
print(counter)
else:
print('EOF')
while不仅可以单独使用,还可以和else一起使用!
7-2 for与for-else循环
'''
主要是用来遍历/循环 序列或者集合、字典
for target_list in expression_list: #for循环的形式
pass
'''
# 简单的for循环
a = ['apple','orange','banana','grape']
for x in a:
print(x)
如下列表中打印所有的列表元素
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
print(x) 这种方法打印的是大列表中的一个列表和元组,并不是所有元素
看下列方法。称为循环嵌套!!!
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
for y in x:
print(y)
打印的结果如图
默认的打印结果是按列排放的,那么如何改成按行排放呢?
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
for y in x:
print(y,end = '')
打印结果按行排放
# for也可以用来和else搭配
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
for y in x:
print(y)
else:
print('fruit is gone')
#当遍历完才执行else
# 想一想,如何终止for循环? a = [1,2,3],当x 遍历到2的时候就终止,怎么操作?
a = [1,2,3]
for x in a:
if x == 2:
break #一旦遇到break,就会跳出循环,后面的都不会被遍历了(强行终止)
print(x)
# 想一想,如何终止for循环? a = [1,2,3],当x不遍历到2,直接遍历到3,怎么操作?
for x in a:
if x == 2:
continue#一旦遇到continue,当前的不会被执行,后续的还是会被执行出来
print(x)
看看下面的代码,回答问题
for x in a:
if x == 2:
break
print(x)
else:
print('EOF')
上述代码中,通过break强制性打断的,而非正常结束的,那么后面的else语句是不会再执行了。
如果是continue,那么else语句将继续会被执行
再来看一个问题,想一想为什么?
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
for y in x:
if y == 'orange':
break
print(y)
else:
print('fruit is gone')
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
if 'banana' in x:
break
for y in x:
if y == 'orange':
break
print(y)
else:
print('fruit is gone')
这段代码却什么也没打印出来!!
出现上述两种情况的原因是因为有两个嵌套的for循环,并不是一个for循环,第一段代码跳出的是内部的循环,外部的循环照样打印,所以并不影响123的打印,和else配对的是外面的循环,里面的循终止,并不影响else的打印
第二段代码是表示外部终止,所以什么都不会被打印!
7-3 for 与range
for x in range (0,10): # 0是起始,10是偏移量
print(x)
#输出0,1,2,3,4,5,6,7,8,9
# 若果想打印的数字有间隔,并不是连续的数字,怎么办?
for x in range (0,10,2): # 0是起始,10是偏移量 第三个参数2 表示步长,间隔多少的意思
print(x)
#如果将间隔的数列按行排列怎么办?
for x in range (0,10,2): # 0是起始,10是偏移量 第三个参数2 表示步长,间隔多少的意思
print(x,end = ' | ') # end = ' | ' 表示按行排列
#如果想打印递减的等差数列怎么办?
for x in range (10,0,-2): # 10是起始,0是偏移量 第三个参数 -2 表示步长,间隔多少的意思
print(x,end = ' | ') # end = ' | ' 表示按行排列
# 思考题:有序列a = [1,2,3,4,5,6,7,8],也可能是无线长,打印相间隔的数字出来!
a = [1,2,3,4,5,6,7,8]
for i in range(0,len(a),2):
print(a[i],end=' | ' )
# 上述方法挺好,但是用切片的方法可以起到同样的效果
b = a[0:len(a):2]
print(b)
7-4新篇章导言
会写代码,非常容易
难的是:高性能、封装性(可服用)、抽象
直白
美与不美
7-5Python工程的组织结构:包、模块、类
Python的项目组织结构
包(可以理解成文件夹)
模块(可以理解成文件)
类
函数、变量
7-6Python包与模块的名字
那么如何区分,不同包的同名模块呢?
采用命名空间 命名方式是:包的名字.模块的名字
如:seven.c4 six.c4
包下面可以有子包
如果想让一个文件夹编程Python的一个包,则必须含有init.py(本身就是个模块.这个模块的名字就是包名)文件
不能说一个文件夹就是包
7-7import导入模块
我们把公用的东西或者重复的东西提取出来放在同一个模块里,我们只要调用即可。
import t.c7 #(包名.模块名) import只能导入模块,不能导入变量
print(t.c7.a)#(包名.模块名.变量名)
以下有种快捷方法
import t.c7 as m # as 关键字可以把命名空间简化成一个很简单的字符
print(m.a)
7-8 from import 导入变量
导入的是具体的变量,可以简化
#from import 导入变量
# import 导入的模块
from module import a,def # 可以是变量或者定义的函数
#如下两种方式都是可以的
from t.c7 import a
print(a)
from t import c7 #导入t包中的c7模块
print(c7.a) #导入模块
#如果要引用的变量过多,怎么办?看看下面的方法
from t.c7 import * #(全部变量导入,不建议使用,导致引入不明确)
print(a)
print(b)
print(c)
#导入多个变量
#如果导入的变量过多,可以通过\来换行,python建议1行最多80个字符
#from c9 import a,b,v,v,c,c,c,c,c,v,v,v,b,f,f,d,d,d,d
#from c9 import a,b,v,\
#cccc.....两个效果相同
#推荐使用 from c9 import (a,b,c,
#d,d)也可以达到相同效果
2、Python中的包和模块有两种导入方式:精确导入和模糊导入
以上图为例,精准导入,假如A.py里有函数A1(),A2()。
此时B.py需要引用它们,可以如下:
from hello.A import A1,A2
假如方法比较多,或许会偷懒,用模糊导入:
from hello.A import *
而all,则可以控制*所表示要引入的东西(模块,函数,类等):
如果将all里的sayA2去掉,B.py里就会报sayA2查找不到的错误。
7-9 init.py 的用法
当一个包被导入的时候,init.py首先会被自动执行
通常用于包初始化工作
导入模块
7-10 包与模块的几个常见错误
包的导入不是重复的
避免循环导入(在p1中导入p2,在p2中导入p1,重复循环报错)
【看视频看懵逼了】
7-13 name的经典应用
import sys
infos = dir(sys) #dir函数里传入参数,可以打印出想要查询模块的变量
print(infos)
if __name__ == '__main__':
print('this is app')
# make a script both importable and executable 经典定义
print('this is a moudule')
也可以作为导入,打印结果如下:
import c15