7-1 while循環(huán)與使用場(chǎng)景
循環(huán)、循環(huán)語(yǔ)句
主要看看兩個(gè)循環(huán) while和for
先看while
'''
CONDITION = True
while CONDITION:
print('i am while') #按ctrl + c 結(jié)束運(yùn)行終端里的循環(huán)
'''
counter = 1 # 在遞歸的環(huán)境里用while的情況多點(diǎn)
while counter <= 10:
counter += 1
print(counter)
else:
print('EOF')
while不僅可以單獨(dú)使用校仑,還可以和else一起使用忠售!
7-2 for與for-else循環(huán)
'''
主要是用來(lái)遍歷/循環(huán) 序列或者集合、字典
for target_list in expression_list: #for循環(huán)的形式
pass
'''
# 簡(jiǎn)單的for循環(huán)
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) 這種方法打印的是大列表中的一個(gè)列表和元組迄沫,并不是所有元素
看下列方法稻扬。稱為循環(huán)嵌套!Q虼瘛泰佳!
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
for y in x:
print(y)
打印的結(jié)果如圖
默認(rèn)的打印結(jié)果是按列排放的,那么如何改成按行排放呢尘吗?
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
for y in x:
print(y,end = '')
打印結(jié)果按行排放
# for也可以用來(lái)和else搭配
a = [['apple','orange','banana','grape'],(1,2,3)]
for x in a:
for y in x:
print(y)
else:
print('fruit is gone')
#當(dāng)遍歷完才執(zhí)行else
# 想一想逝她,如何終止for循環(huán)? a = [1,2,3],當(dāng)x 遍歷到2的時(shí)候就終止睬捶,怎么操作黔宛?
a = [1,2,3]
for x in a:
if x == 2:
break #一旦遇到break,就會(huì)跳出循環(huán)侧戴,后面的都不會(huì)被遍歷了(強(qiáng)行終止)
print(x)
# 想一想宁昭,如何終止for循環(huán)? a = [1,2,3],當(dāng)x不遍歷到2酗宋,直接遍歷到3积仗,怎么操作?
for x in a:
if x == 2:
continue#一旦遇到continue蜕猫,當(dāng)前的不會(huì)被執(zhí)行寂曹,后續(xù)的還是會(huì)被執(zhí)行出來(lái)
print(x)
看看下面的代碼,回答問(wèn)題
for x in a:
if x == 2:
break
print(x)
else:
print('EOF')
上述代碼中回右,通過(guò)break強(qiáng)制性打斷的隆圆,而非正常結(jié)束的,那么后面的else語(yǔ)句是不會(huì)再執(zhí)行了翔烁。
如果是continue渺氧,那么else語(yǔ)句將繼續(xù)會(huì)被執(zhí)行
再來(lái)看一個(gè)問(wèn)題,想一想為什么蹬屹?
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')
這段代碼卻什么也沒(méi)打印出來(lái)B卤场!
出現(xiàn)上述兩種情況的原因是因?yàn)橛袃蓚€(gè)嵌套的for循環(huán)慨默,并不是一個(gè)for循環(huán)贩耐,第一段代碼跳出的是內(nèi)部的循環(huán),外部的循環(huán)照樣打印厦取,所以并不影響123的打印潮太,和else配對(duì)的是外面的循環(huán),里面的循終止虾攻,并不影響else的打印
第二段代碼是表示外部終止铡买,所以什么都不會(huì)被打印台谢!
7-3 for 與range
for x in range (0,10): # 0是起始寻狂,10是偏移量
print(x)
#輸出0,1,2,3,4,5朋沮,6,7,8,9
# 若果想打印的數(shù)字有間隔蛇券,并不是連續(xù)的數(shù)字,怎么辦樊拓?
for x in range (0,10,2): # 0是起始纠亚,10是偏移量 第三個(gè)參數(shù)2 表示步長(zhǎng),間隔多少的意思
print(x)
#如果將間隔的數(shù)列按行排列怎么辦筋夏?
for x in range (0,10蒂胞,2): # 0是起始,10是偏移量 第三個(gè)參數(shù)2 表示步長(zhǎng)条篷,間隔多少的意思
print(x,end = ' | ') # end = ' | ' 表示按行排列
#如果想打印遞減的等差數(shù)列怎么辦骗随?
for x in range (10,0蛤织,-2): # 10是起始,0是偏移量 第三個(gè)參數(shù) -2 表示步長(zhǎng)鸿染,間隔多少的意思
print(x,end = ' | ') # end = ' | ' 表示按行排列
# 思考題:有序列a = [1,2,3,4,5,6,7,8],也可能是無(wú)線長(zhǎng)指蚜,打印相間隔的數(shù)字出來(lái)!
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新篇章導(dǎo)言
會(huì)寫(xiě)代碼摊鸡,非常容易
難的是:高性能、封裝性(可服用)蚕冬、抽象
直白
美與不美
7-5Python工程的組織結(jié)構(gòu):包免猾、模塊、類
Python的項(xiàng)目組織結(jié)構(gòu)
包(可以理解成文件夾)
模塊(可以理解成文件)
類
函數(shù)囤热、變量
7-6Python包與模塊的名字
那么如何區(qū)分猎提,不同包的同名模塊呢?
采用命名空間 命名方式是:包的名字.模塊的名字
如:seven.c4 six.c4
包下面可以有子包
如果想讓一個(gè)文件夾編程Python的一個(gè)包赢乓,則必須含有init.py(本身就是個(gè)模塊.這個(gè)模塊的名字就是包名)文件
不能說(shuō)一個(gè)文件夾就是包
7-7import導(dǎo)入模塊
我們把公用的東西或者重復(fù)的東西提取出來(lái)放在同一個(gè)模塊里忧侧,我們只要調(diào)用即可。
import t.c7 #(包名.模塊名) import只能導(dǎo)入模塊牌芋,不能導(dǎo)入變量
print(t.c7.a)#(包名.模塊名.變量名)
以下有種快捷方法
import t.c7 as m # as 關(guān)鍵字可以把命名空間簡(jiǎn)化成一個(gè)很簡(jiǎn)單的字符
print(m.a)
7-8 from import 導(dǎo)入變量
導(dǎo)入的是具體的變量蚓炬,可以簡(jiǎn)化
#from import 導(dǎo)入變量
# import 導(dǎo)入的模塊
from module import a,def # 可以是變量或者定義的函數(shù)
#如下兩種方式都是可以的
from t.c7 import a
print(a)
from t import c7 #導(dǎo)入t包中的c7模塊
print(c7.a) #導(dǎo)入模塊
#如果要引用的變量過(guò)多,怎么辦躺屁?看看下面的方法
from t.c7 import * #(全部變量導(dǎo)入肯夏,不建議使用,導(dǎo)致引入不明確)
print(a)
print(b)
print(c)
#導(dǎo)入多個(gè)變量
#如果導(dǎo)入的變量過(guò)多犀暑,可以通過(guò)\來(lái)?yè)Q行驯击,python建議1行最多80個(gè)字符
#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.....兩個(gè)效果相同
#推薦使用 from c9 import (a,b,c,
#d,d)也可以達(dá)到相同效果
2、Python中的包和模塊有兩種導(dǎo)入方式:精確導(dǎo)入和模糊導(dǎo)入
以上圖為例耐亏,精準(zhǔn)導(dǎo)入徊都,假如A.py里有函數(shù)A1(),A2()广辰。
此時(shí)B.py需要引用它們暇矫,可以如下:
from hello.A import A1,A2
假如方法比較多,或許會(huì)偷懶择吊,用模糊導(dǎo)入:
from hello.A import *
而all李根,則可以控制*所表示要引入的東西(模塊,函數(shù)几睛,類等):
如果將all里的sayA2去掉房轿,B.py里就會(huì)報(bào)sayA2查找不到的錯(cuò)誤。
7-9 init.py 的用法
當(dāng)一個(gè)包被導(dǎo)入的時(shí)候箩退,init.py首先會(huì)被自動(dòng)執(zhí)行
通常用于包初始化工作
導(dǎo)入模塊
7-10 包與模塊的幾個(gè)常見(jiàn)錯(cuò)誤
包的導(dǎo)入不是重復(fù)的
避免循環(huán)導(dǎo)入(在p1中導(dǎo)入p2盔粹,在p2中導(dǎo)入p1,重復(fù)循環(huán)報(bào)錯(cuò))
【看視頻看懵逼了】
7-13 name的經(jīng)典應(yīng)用
import sys
infos = dir(sys) #dir函數(shù)里傳入?yún)?shù)慢味,可以打印出想要查詢模塊的變量
print(infos)
if __name__ == '__main__':
print('this is app')
# make a script both importable and executable 經(jīng)典定義
print('this is a moudule')
也可以作為導(dǎo)入纷妆,打印結(jié)果如下:
import c15