第3章 程序控制结构与函数设计
在Python中,代码的缩进非常重要,缩进是体现代码逻辑关系的重要方式,同一个代码块必须保证相同的缩进量。
选择结构
一、选择结构的几种形式
1.单分支选择结构
if 表达式 :
语句块
表达式后面的冒号“ ;”是不可缺少的,表示一个语句块的开始
2.双分支选择结构
if 表达式:
语句块1
else:
语句块2
Python还提供了一个三元运算符
value1 if condition else value2
当条件表达式condition的值与True等价时,表达式的值为value1,否则表达式的
值为value2.
3.多分支选择结构
if 表达式 1:
语句块1
elif 表达式2:
语句块2
elif 表达式3:
语句块3
:
else:
语句块n
4.选择结构的嵌套
if 表达式 1:
语句块1
if 表达式 2 :
语句块2
else:
语句块3
else:
if 表达式 4:
语句块 4
循环结构
一、for循环与while循环的基本语法
while 条件表达式:
循环体
[ else :
else 子句代码块]
和
for 取值 in 序列或迭代对象:
循环体
[else :
else子句代码块]
二、break和continue 语句
break语句结束所属层次的循环
continue提前结束本次循环,忽略continue之后的语句,直接回到循环顶端,进入下一次循环。
函数设计与使用
一、基本语法
def 函数名 ([参数列表]):
‘‘‘注释’’’
函数体
函数形参不需要声明其类型,也不需要指定函数的返回值类型
即时该函数不需要接收任何参数,也必须保留一对空的圆括号
括号后面的冒号必不可少
函数体相对于def关键字必须保持一定的空格缩进
注释的两种方式:符号#,不属于任何语句的一对三引号
二、函数参数不得不说的几件事
如果传递给函数的是Python可变序列,并且在函数内部使用下标或序列自身支持的方式为可变序列增加、删除元素或修改元素值时,修改后的结果是可以反映到函数之外的,即实参也得到了相应的修改。
1.默认值参数
def 函数名 (… ,形参名=默认值):
函数体
当连续调用该函数而不给该函数传值时,再次调用时将保留上一次调用的结果。
2.关键参数
关键参数指调用函数时的参数传递方式,与函数定义无关。通过关键参数可以按参数名字传递值,实参顺序可以和形参顺序不一致,但不影响参数值的传递结果。
eg:>>>def demo(a,b,c=5):
print(a,b,c)
>>>demo(c=8,a=9,b=0)
9 0 8
3.可变长度参数
两种形式; *parameter和 **parameter
前者用来接收任意多个实参并将其放在一个元组中,后者接收类似于关键参数一样显示赋值形式的多个实参并将其放入字典中
- eg:>>>def demo(* p):
print ( p )
>>>demo(1,2,3)
(1,2,3) - eg:>>>def demo(**p):
print( p )
>>>demo(x=1,y=2,z=3)
{‘x’:1, ‘y’:2, ‘z’:3}
4.传递参数时的序列解包
调用含有多个参数的函数时,可以用Python列表、元组、集合、字典以及其他可迭代对象作为实参,并在实参名称前加一个星号,Python解释器将自动进行解包,然后传递给多个单变量形参。
eg:>>>def demo(a,b,c):
print(a+b+c)
>>>seq=[1,2,3]
>>>demo(*seq)
6
-
调用函数时如果对实参使用一个星号( * )序列解包,这些解包后的实参将会被当作普通位置参数对待,并且会在关键参数和使用两个星号(**)进行序列解包的参数之前进行处理
eg:>>>def demo(a,b,c):
print(a,b,c)
demo(b=1,*(2,3)) #❌eg:>>>def demo(a,b,c):
print(a,b,c)
demo(b=1,*(2,3)) #✔
三、变量作用域
在函数内部定义的变量一般为局部变量,在函数外部定义的变量为全局变量。
1.在函数内部通过global关键字可以声明或定义全局变量。
2. 如果局部变量与全局变量具有相同的名字,那么该局部变量会在自己的作用域内隐藏同名的全局变量
eg:>>>def demo():
x=3
print(x)
x=5
print(x)
5
demo()
3
print(x)
5
3.优先考虑局部变量局部变量的空间是在栈上分配的。
四、lambda表达式
lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数,例如第2章中列表对象的sort()方法以及内置函数,即没有函数名字的临时使用的小函数。
lambda表达式只可以包含一个表达式,不允许包含其他复杂的语句,但在表达式中可以调用其他函数,并支持默认值参数和关键参数,该表达式的计算结果相当于函数的返回值。
在使用lambda表达式时,要注意变量作用域可能带来的问题。