不完美的Python
自從各類Python大火,感覺天上地下哪兒都有Python的一席之地,Python功夫好啊…但python有些細(xì)節(jié)上缺少其他語(yǔ)言的便利。今天我們就來(lái)舉幾個(gè)例子。
跳出外層循環(huán)
大家都知道,在Java中存在標(biāo)簽的概念,當(dāng)我們存在多層循環(huán)時(shí),Java可以使用標(biāo)簽控制指定的循環(huán)層。舉個(gè)小栗子:
public class OuterLoop {
public static void main(String[] args) {
outer:
for (int i = 0; i < 5; i++) {
inner:
for (int j = 0; j < 5; j++) {
System.out.println(j);
if (j == 2) {
break outer;
}
}
}
System.out.println("over!");
}
}
output:
0
1
2
over!
我們通過(guò)定義標(biāo)簽,在遇到break continue等關(guān)鍵字時(shí),可以控制指定的循環(huán)層,然而Python沒有標(biāo)簽的概念,那么Python該如何實(shí)現(xiàn)這種功能呢?
Python循環(huán)跳出
為了方便大家理解,我們來(lái)舉一個(gè)臭不要臉的例子吧!
加入小張、我、小李三個(gè)人經(jīng)常一起吃飯,吃飯就涉及付賬了,如果AA那大家都能接受,如果一個(gè)人請(qǐng)客,那他倆付錢我當(dāng)然愿意,如果是我付錢那我吃完了就趕緊尿遁…好了,有這個(gè)前提,我們開始寫代碼吧。
定義函數(shù)實(shí)現(xiàn)
對(duì)于多層循環(huán),在Python中,也許最易于理解的方式就是通過(guò)函數(shù)return來(lái)實(shí)現(xiàn)了。但這里要注意一個(gè)問題,函數(shù)的return會(huì)跳出所有循環(huán),對(duì)于兩層以上的循環(huán)不適用…
?
# -*- coding: utf-8 -*-
# @Author : 王翔
# @WeChat : King_Uranus
# @公眾號(hào) : 清風(fēng)Python
# @Date : 2019/9/11 0:03
# @Software : PyCharm
# @version :Python 3.7.3
# @File : OuterLoop.py
import random
people = ['zhang', 'me', 'li']
payments = ['AA', 'stand_treat']
def dine_together():
# 為了避免一成不變的套路,我們添加兩個(gè)列表隨機(jī)
random.shuffle(payments)
print(payments)
random.shuffle(people)
print(people)
for payment in payments:
for person in people:
if payment == 'stand_treat':
if person == 'me':
print("居然我請(qǐng)客,趕緊尿遁...")
people.remove('me')
schlemiel = random.choice(people)
print("倒霉孩子{}請(qǐng)客".format(schlemiel))
# 當(dāng)遇到我請(qǐng)客,直接結(jié)束外層循環(huán),函數(shù)返回...
return
else:
print("今天{}請(qǐng)客".format(person))
else:
print('今天吃飯{},等下{}付錢,大家記得把錢給它...'
.format(payment, person))
dine_together()
output:
['stand_treat', 'AA']
['zhang', 'li', 'me']
今天zhang請(qǐng)客
今天li請(qǐng)客
居然我請(qǐng)客,趕緊尿遁...
倒霉孩子li請(qǐng)客
標(biāo)記變量實(shí)現(xiàn)
我們可以通過(guò)定義變量值來(lái)進(jìn)行判斷是否退出循環(huán),操作如下:
import random
people = ['zhang', 'me', 'li']
payments = ['AA', 'stand_treat']
# 為了避免一成不變的套路,我們添加兩個(gè)列表隨機(jī)
random.shuffle(payments)
print(payments)
random.shuffle(people)
print(people)
runaway = False
for payment in payments:
for person in people:
if payment == 'stand_treat':
if person == 'me':
print("居然我請(qǐng)客,趕緊尿遁...")
people.remove('me')
schlemiel = random.choice(people)
print("倒霉孩子{}請(qǐng)客".format(schlemiel))
# 修改標(biāo)記變量
runaway = True
# 當(dāng)遇到我請(qǐng)客,直接結(jié)束外層循環(huán),函數(shù)返回...
break
else:
print("今天{}請(qǐng)客".format(person))
else:
print('今天吃飯{},等下{}付錢,大家記得把錢給它...'
.format(payment, person))
# 判斷標(biāo)記變量
if runaway:
break
output:
['stand_treat', 'AA']
['li', 'me', 'zhang']
今天li請(qǐng)客
居然我請(qǐng)客,趕緊尿遁...
倒霉孩子zhang請(qǐng)客
for else實(shí)現(xiàn)
for…else…的運(yùn)行邏輯是當(dāng)for循環(huán)正常執(zhí)行結(jié)束就會(huì)運(yùn)行其else語(yǔ)句,如果中途break的話,就不會(huì)執(zhí)行else中的內(nèi)容
有失必有得,雖然python沒有循環(huán)標(biāo)記,卻多出了一個(gè)for else的操作,幫助我們實(shí)現(xiàn)需求。
import random
people = ['zhang', 'me', 'li']
payments = ['AA', 'stand_treat']
# 為了避免一成不變的套路,我們添加兩個(gè)列表隨機(jī)
random.shuffle(payments)
print(payments)
random.shuffle(people)
print(people)
for payment in payments:
for person in people:
if payment == 'stand_treat':
if person == 'me':
print("居然我請(qǐng)客,趕緊尿遁...")
people.remove('me')
schlemiel = random.choice(people)
print("倒霉孩子{}請(qǐng)客".format(schlemiel))
# 當(dāng)遇到我請(qǐng)客,直接結(jié)束外層循環(huán),函數(shù)返回...
break
else:
print("今天{}請(qǐng)客".format(person))
else:
print('今天吃飯{},等下{}付錢,大家記得把錢給它...'
.format(payment, person))
else:
# 未出現(xiàn)break操作,執(zhí)行else,通過(guò)continue繼續(xù)操作
continue
# 出現(xiàn)break操作,跳過(guò)else,直接外層break,結(jié)束外層循環(huán)
break
The End
OK,今天的內(nèi)容就到這里,如果覺得內(nèi)容對(duì)你有所幫助,歡迎點(diǎn)贊。
期待你關(guān)注我的公眾號(hào)?
清風(fēng)Python
,如果覺得不錯(cuò),希望能動(dòng)動(dòng)手指轉(zhuǎn)發(fā)給你身邊的朋友們。
作者:清風(fēng)Python
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
