重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
事实上,Python的标准语法是不支持跳出多重循环的,所以只能利用一些技巧,大概的思路有:写成函数、利用笛卡尔积、利用调试。
创新互联专业为企事业单位提供成都网站建设公司、成都网站设计,网站优化、微信开发、手机网站建设、域名申请、雅安服务器托管、企业邮箱等互联网基础服务。从2013年创立,我们先后签约上千余家中小型企业和科技发展公司的网站建设和网站推广项目。通过多年的创新发展,已发展成为专业能力较强,服务较好的建站公司。
写成函数
在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环,例如
def work(): for i in range(10): for j in range(10): if i+j 5: return i,jprint work()
利用笛卡尔积
这种方法的思路就是,既然可以跳出单循环,我就将多重循环改写为单循环,这可以利用itertools中的笛卡尔积函数product,例如
from itertools import productfor i,j in product(range(10), range(10)): if i+j 5: print i,j break
利用调试模式
笛卡尔积的方式很巧妙,也很简洁,但它只能用于每次循环的集合都是独立的情形,假如每层循环都与前一层紧密相关,就不能用这种技巧了。这时候可以用第一种方法,将它写成函数,另外,还可以利用调试模式。这个利用了调试模式中,只要出现报错就退出的原理,它伪装了一个错误出来。
class Found(Exception): passtry: for i in range(10): for j in range(i): #第二重循环跟第一重有关 if i + j 5: raise Foundexcept Found: print i, j
Python中可以加断点调试
断点(break point)是指在代码中指定位置,当程序运行到此位置时便中断下来,并让开发者可查看此时各变量的值。
因断点中断的程序并没有结束,可以选择继续执行。
实现断点调试需要 IDE 的支持。下面以 PyCharm 来演示一下
在某一行代码的左侧栏点击,就可以在这行增加断点。现在在 3 个 if 判断的地方都加上断点。
选择 debug,程序开始运行。
输入 a、b 两个值之后,程序就在第一个 if 处中断,并且在工具栏中显示出当前程序中的各种数值。
选择“resume program”,程序就会继续执行,直到遇到下一个断点。
有了断点功能的帮助,调试的时候就方便许多,很容易观察程序运行时的状态。
在断点调试时,还有个经常一起使用的功能就是单步调试。
在程序中断时,选择“Step Over”,会向下执行一行代码后继续中断。
当所处代码行中有函数时,“Step Into”会中断在函数内部,之后将在其中单步执行。对应的,“Step Out”将中断在执行完当前所在函数后的位置。
这些操作在工具栏有快捷按钮,也可通过快捷键操作。
更多Python知识,请关注:Python自学网!!
会导致系统位置错误。
在多任务系统下,中断可能在任务执行的任何时间发生,如果一个函数的执行期间被中断后,到重新恢复到断点进行执行的过程中,函数所依赖的环境没有发生改变,那么这个函数就是可重入的,否则就不可重入。
在多任务系统下,中断可能在任务执行的任何时间发生,如果一个函数的执行期间被中断后,到重新恢复到断点进行执行的过程中,函数所依赖的环境没有发生改变,那么这个函数就是可重入的,否则就不可重入。
9.8. 异常也是类
用户自定义异常也可以是类。利用这个机制可以创建可扩展的异常体系。
以下是两种新的,有效的(语义上的)异常抛出形式,使用 raise 语句:
raise Class
raise Instance
第一种形式中,Class 必须是 type 或其派生类的一个实例。第二种形式是以下形式的简写:
raise Class()
发生的异常其类型如果是 except 子句中列出的类,或者是其派生类,那么它们就是相符的(反过来说--发生的异常其类型如果是异常子句中列出的类的基类,它们就不相符)。例如,以下代码会按顺序打印 B,C,D:
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except D:
print("D")
except C:
print("C")
except B:
print("B")
要注意的是如果异常子句的顺序颠倒过来( execpt B 在最前),它就会打印 B,B,B--第一个匹配的异常被触发。
打印一个异常类的错误信息时,先打印类名,然后是一个空格、一个冒号,然后使用内置函数 str() 将类转换得到的完整字符串。
一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。
具体,请参考下以下资料:
函数内用 return
函数外用 exit()
说明,函数内也可用 exit() 停止后面的指令执行,但这样会使基于函数的线程出现问题,所以不建议在函数内使用 exit(),函数内如果不想执行指令了,最好用 return 进行结束函数,这样可以把控制权交给主调函数,而不是退出程序
扩展资料:
return语句是python语言中函数返回的一个值,每个函数都应该有一个返回值,其中,return返回值可以是一个数值,一个字符串,一个布尔值,一个列表,或者函数。
在Python中return函数返回值return,函数中一定要有return返回值才是完整的函数,如果用户没有定义Python函数返回值,那么得到的结果是None对象。