流程控制结构(如if语句和for循环)是在Python中创建有逻辑、干净和组织良好的代码的强大方法。
If语句测试一个条件,如果测试为真,则执行某些操作。For循环对定义数量的元素执行某些操作。列表生成式是使用一行代码动态创建列表的一种简洁的python方法。
结构和空格缩进:在Python中,它们的结构有两个部分:
一是父语句行,它用if或for关键字定义语句,这一行必须以:(冒号)结尾。
二是子语句,它包含在条件为真时(在if语句中)或分别实现(在for循环的情况下)的代码块。子语句必须在开头用四个空格(或制表符空格)缩进,否则将引发IndentationError。
父语句:
用4个空格缩进的子语句或代码块
If语句
这些语句以“if”关键字开头,后跟一个应计算为True或False的条件,再跟一个冒号。代码块位于第2行,以4个空格缩进。这是满足条件时要实现的代码。
Ifcondition:
codeblock
下面是一个例子。请注意,如果条件为False,则不会显示任何内容。没有错误。
if5>1:
print('True,FiveisgreaterthanOne')
###结果
True,FiveisgreaterthanOne
If… Else
如果条件为false,则可以包含一个else语句,其中包含要实现的代码块。
Ifcondition:
codeblock
else:
codeblock
下面是If..else语句的示例。
if'a'>'b':
print('True')
else:
print('False,"a"isnotgreaterthan"b"')
#结果
False,"a"isnotgreaterthan"b"
If…elif…else
你可以使用elif(else if的缩写)检查其他多个条件,最后的else只在没有其他条件为真时计算。请注意,else和elif语句是可选的,你可以选择只设置其一,但必须有一个if语句。
age=60
ifage>=55:
print("Youareasenior")
elifage<35:
print("Youareayouth")
else:
print("Youaremiddleaged")
###结果
Youareasenior
For循环
For循环引入了迭代的概念,即在多个元素(如列表中的元素)上重复一个过程。
For循环包含for关键字、iterable(比如要循环的元素的list)、表示列表中每个元素的变量名以及将为每个元素运行的代码块。代码块用4个空格缩进。
forvariable_nameinlist:
codeblock
下面两个例子展示了循环遍历列表并打印列表中的每个元素的for循环。请注意,为了节省空间,我将打印结果包含在同一行中,但实际上每个元素打印后都会换行,因为print函数在默认情况下会在每次打印的末尾添加换行符。
fornamein['sue','joe','gee']:
print(name)
fornumin[1,2,3,4,5]:
print(num+1)
###结果
suejoegee
23456
range
此函数用于生成可在for循环中使用的整数列表。可以按range(stop), range(start,stop) 或 range(start, stop, step) 创建列表。
参数start(可选)定义序列中的第一个数字,默认值为0。
参数stop(非可选)定义列表在何处结束,但该数字不包含在列表中,因此序列中的最后一个数字是(stop-1)。step(可选)是列表中每个数字的增量,默认值为1。
例如,range(10)创建一个从0到9的列表,range(2,10)创建一个从2到9的列表,range(1,10,2)创建列表[1,3,5,7,9]。注意,range()只创建整数列表,如果传递的不是整数,则会返回类型错误。
foriinrange(5):
print(i)
foriinrange(2,9):
print(i)
foriinrange(0,11,2):
print(i)
###结果
01234
2345678
0246810
也可以使用reverse(list)以相反的顺序迭代列表:
l=[’one’,’two’,'three’]
forrevinreversed(l):
print(rev)
forrinreversed(range(95,101)):
print(r)
###结果
threetwoone
1009998979695
嵌套控制流
可以在For循环中嵌套If语句。例如,可以循环查看列表,以检查元素是否满足某些条件。
ages=[78,34,21,47,9]
forageinages:
ifage>=55:
print("{}isasenior".format(age))
elifage<35:
print("{}isayouth".format(age))
else:
print("{}ismiddleaged".format(age))
也可以在一个For循环中包含另一个For循环,基于第一个列表中的每个元素,遍历第二个列表中的所有元素。
first_names=['john','sam','will']
last_names=['white','smith','alexander']
forfnameinfirst_names:
forlnameinlast_names:
print(fname,lname)
###结果
johnwhite
johnsmith
johnalexander
samwhite
samsmith
samalexander
willwhite
willsmith
willalexander
列表生成式
列表生成式是一种在对现有列表应用转换后从现有列表中构造新列表的方法。
每个列表生成式都有一个输出(通常但不一定要转换)和一个for循环,并用方括号括起来。使用方括号是因为我们正在构建一个列表(输出的结果是一个列表)。
[transformed_lforlinlist]
要构造集合或元组,请分别用{}或()将列表生成式括起来。
(请阅读下文,了解python中列表、集合和元组之间的主要区别:https://towardsdatascience.com/ultimate-guide-to-lists-tuples-arrays-and-dictionaries-for-beginners-8d1497f9777c )
下面的第一行代码将原始列表中的每个元素乘以2来创建一个新列表。num*2是所需的输出,后跟for循环。第二行代码不转换元素并输出相同的列表。
print([num*2fornumin[2,4,6,8,10]])
print([numfornumin[2,4,6,8,10]])
###结果
[4,8,12,16,20]
[2,4,6,8,10]
条件逻辑:可以在末尾添加If语句,只返回满足某个条件的项。
[outputforlinlistifcondition]
例如,下面的代码只返回列表中大于2的数字。
[lforlinlistifl>2]
此代码返回大于160的高度列表。
heights=[144,180,165,120,199]
tall=[hforhinheightsifh>160]
print(tall)
###结果
[180,165,199]
可以支持条件表达式。例如,可以通过创建一个新列表来对列表中的元素进行分类。请注意,必须同时具有if和else关键字,否则将返回SyntaxError。elif不适用于此。
[outputifconditionelseoutputforlinlist]
下面的代码创建了一个从0到9的列表,然后我们定义了一个列表生成式,它遍历列表并为列表中的每个数字输出“偶数”或“奇数”。我们使用模(%)运算符返回除法的余数。如果除以2的余数为0,则数字为偶数,否则该数字为奇数。
nums=list(range(10))
num_classes=['even'ifnum%2==0else'odd'fornuminnums]
print(num_classes)
###结果
['even','odd','even','odd','even','odd','even','odd','even','odd']
函数
我们不能谈论流控制而不提函数。函数使你能够创建可重用的代码块,它们在代码中创建模块化(执行特定功能的独立代码块),使代码有组织。
函数以def关键字开始,然后是所需的函数名、括号()和冒号,以结束父语句。可以在括号内提供可选参数,这些参数只是传递到函数中的变量。下一行包含用4个空格缩进的代码块。在代码块的最后一行中可以有一个可选的return语句,它将是函数的结果(输出)。
defname():
codeblock
returnvalue
只需键入函数名,然后键入括号即可调用函数。如果函数接受参数,请在调用时在括号内提供参数。
name()
下面的代码定义了一个函数,该函数在调用时打印“Hi there”。代码块没有return语句。
defhello():
print('Hithere')
hello()
###结果
Hithere
下面的代码定义了一个接受整数值并将其平方的函数。请注意,它有一个return语句。
defsquare_number(num):
returnnum*num
five_squared=square_number(5)
print(five_squared)
###结果
25
函数必须包含代码块,它可能只是一个return语句,或者执行某些操作的代码。如果没有return语句,默认情况下函数将返回None。
这是Python控制流结构的基本教程。我们可以在数据科学中大量使用这些概念。