我们昨天说了python的数据类型,今天说说python的缩进规则和函数、python的顺序语句结构,条件和分支语句以及循环语句。缩进不规范会报错(IndentationError: unexpected indent),python的函数使用,从定义到实参形参再到分类。
目录
缩进规则
代码缩进规则
物理行:代码编辑器中显示的代码,每一行是一个物理行。
逻辑行:Python解释器对代码进行解释,一个语句是一个逻辑行。
缩进规则
缩进量及缩进字符
函数
函数定义
函数概述
函数的定义
形参和实参
函数的返回值
函数分类
内置函数
自定义函数
顺序语句结构
顺序结构
顺序结构实例
条件与分支语句
条件表达式
单分支选择结构
双分支选择结构
多分支选择结构
选择结构的嵌套
三元表达式
循环语句
while循环
while else循环
for 循环
for else循环
循环控制语句
break语句
continue语句
pass语句
缩进规则
python是使用缩进来区分不同的代码块,所以对缩进有严格要求。
1、缩进不符合规则,解析器会报缩进错误,程序无法运行。
缩进错误,python报错
IndentationError:unexpected indent
2、缩进的不同,程序执行的效果也有可能产生差异。
代码缩进规则
缩进是针对逻辑行的,因此首先要区分代码中的物理行和逻辑行。
物理行:代码编辑器中显示的代码,每一行是一个物理行。
逻辑行:Python解释器对代码进行解释,一个语句是一个逻辑行。
python代码中
1、可以使用";"
号将多个逻辑行合并成一个物理行。
i=5;j=2;k=0;print(i,j,k)
>>>输出结果 5 2 0
**这里有个前提,多个逻辑行应该属于同一个代码层级。
像这种分支else代码块就不能直接使用“;”连接了。
if True:a=1; else: a=2
2、可以使用"\"
对一个逻辑行进行换行,书写为多个物理行。
print("1111111111\
22222")
>>>输出结果 111111111122222
3、字典、列表等变量赋值语句,是可以直接换行,书写为多个物理行的。
缩进规则
1、逻辑行的“首行”需要顶格,即无缩进(也就是一份源码的第一个逻辑行)
a="hello"
print(a)
2、相同逻辑层(同一个代码块)保持相同的缩进量
3、":"
标记一个新的逻辑层
如:while循环、if分支、函数声明、类定义等等
缩进量及缩进字符
Python可以使用空格或制表符(tab符)标记缩进。缩进量(字符个数)不限。
而空格
和tab符
通常都以空白形式显示,混用不容易区分,影响代码阅读,增加维护及调试的困难。因此 Python PEP8 编码规范,指导使用4个空格作为缩进。
函数
任何一门语言都离不开函数,python也不例外。
函数定义
函数概述
在程序设计中,函数的使用可以提升代码的复用率
和可维护性
。
提升代码的复用率: 程序设计中,一些代码的功能是相同的,操作是一样的,只不过针对的数据不一样。此种情况下,可以将这种功能写成一个函数模块,要使用此功能时只需调用这个函数模块就可以了。
提升代码的可维护性: 使用函数后,实现了代码的复用,某个功能需要核查或修改时,只需要核查或修改此功能相对应的函数就可以了。对功能的修改可以使调用该函数的所有模块同时生效,极大提升了代码的可维护性。
内建函数
:内建函数也叫内置函数,即系统已经定义好的函数,开发者可以直接调用。为了使开发者对内函数
和自定义函数
有一个直观的认识,下面给出一个简单示例。
调用系统内建函数pow():
pow(2, 4)
自定义函数func():
def func(a, b):
return a ** b
func(2, 4)
上述代码中,首先调用了Python语言的内建函数pow()进行幂运算;
然后,自定义了一个函数func(),功能是输出a的b次幂;最后调用了自定义函数func(),输出相应的结果。可以看出,Python语言中函数的定义和使用都是非常便捷的。
函数的定义
在Python语言中,函数通常是由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:
def 函数名(参数列表):
函数体
例如:
def hello():
print("hello")
print("world!")
以上实例定义的hello()函数虽然不包含任何参数,但是函数名后的一对括号
是不能省略
的。在实际应用中,稍复杂的函数通常都会包含一个或多个参数。
通常情况下,在Python语言中定义一个具有特定功能的函数需要符合以下规则:
- 函数代码块以def关键字开头,后接函数标识符名称和形参列表;
- 任何传入的参数和自变量必须放在圆括号内;
- 函数的第一行语句可以选择性地使用文档字符串(即函数说明);
- 函数内容以冒号起始,并且严格统一缩进;
- 函数都有返回值,默认返回None。
形参和实参
在编程语言中,函数定义时用的是形参,调用时用的是实参
-
形参(parameter)
,全称为"形式参数"
,不是实际存在的变量,又称虚拟变量。形参是在定义
函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。 -
实参(argument)
,全称为"实际参数"
,是在调用
时传递给函数的参数。实参可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。 -
形参和实参的功能是数据传送。
在调用函数时,实参将赋值给形参。必须注意实参的个数、类型应与形参要一一对应
,并且实参必须要有确定的值
。形参的作用域一般仅限函数体内部,而实参的作用域根据实际设置而定。
函数的返回值
-
函数的返回值是函数执行完成后,系统根据函数的具体定义返回给外部调用者的值。
-
在实际开发中,有时不仅仅要执行某个函数的功能,而且还需要把该函数的执行结果作为其他函数或功能的计算单元。所以,函数返回值是非常有用的
-
在Python语言中,当函数运行到return语句时即执行完毕,同时将结果返回。因此,可以在函数内部通过条件判断和循环设置实现较复杂的逻辑,并返回预期的结果。如果没有return语句,函数体内所有语句执行完毕后默认返回None。
函数分类
内置函数
Python语言中自带的函数叫做内建函数,这些内建函数对大部分常用操作进行有效封装,可以直接调用,为开发提供了极大便利。由于内建函数是Python语言内置的函数,因此不需要导入任何函数库即可直接调用。
在Python语言中,除内建函数外的其他类型函数通常被称为第三方函数。
- 第三方函数一般是由其它开发者或组织针对某些特定需求编写的函数库,并共享给大家使用。Python语言的强大功能,也正是得益于其丰富的第三方函数库。不管是内建函数,还是第三方函数,在Python语言中都可以非常方便的使用。
- 要成功调用一个内建函数或第三方函数,首先需要知道的是该函数的准确名称和参数列表信息。如求绝对值的内建函数abs()有一个数值类型参数。
自定义函数
当内建函数不能满足要求时,开发者可以根据实际需要自定义函数。函数自定义完成后,开发者可以在其他代码处通过函数名调用。
在Python语言中,内建函数可以直接使用,第三方函数需要使用import命令导入相应的库才能使用。对于自定义函数,其定义和调用可以在同一个文件中,也可分离成不同的文件。
from test import hello
hello()
顺序语句结构
程序有三种基本的控制结构:顺序结构
、选择结构
、循环结构
。
顺序结构
顺序结构
是最简单也是最常见的一种结构,采用顺序结构的程序通常按照由前到后的顺序执行各个语句
,直到程序结束,结构如下所示:
顺序结构:
顺序结构实例
举例如下:
a = 2
b = 3
c = a + b
d = c * 24
print(a, b, c, d)
条件与分支语句
条件语句是通过判断条件是否成立,根据条件表达式的结果做出决策,控制不同代码块的执行。
条件表达式
条件表达式由运算符
和操作数
组成
例如:a<4,其中a、4都是操作数,小于符号<是运算符
判断条件可以是具有布尔属性的任意元素,包括数据、变量或由变量与运算符组成的表达式,若其布尔属性为True,条件成立;若布尔属性为False,条件不成立。
除了非空常量外,Python还常使用关系操作符和成员运算符构成判断条件 。
条件表达式常用的运算符有:
算术运算符:+、-、*、/、//、%、**
关系运算符:
Python支持通过保留字not、and和or对判断条件进行逻辑组合:
- not,表示单个条件的“否”关系。如果“条件”的布尔属性为True,“not 条件”的布尔属性就为False;如果“条件”的布尔属性为False,“not 条件”的布尔属性就为True。
- and,表示多个条件之间的“与”关系。当且仅当使用and连接的所有条件的布尔属性都为True时,逻辑表达式的布尔属性为True,否则为False。
- or,表示多个条件之间的“或”关系。当且仅当使用or连接的所有条件的布尔属性都是False时,逻辑表达式的布尔属性为False,否则为True。
单分支选择结构
- 若if语句中的判断条件成立,执行if语句后的代码段;
- 若判断条件不成立,则跳过if语句后的代码段。
- 单分支结构中的代码段只有“执行”与“跳过”两种情况。
示例:使用单分支结构判断当天是否是星期天。
day = int(input("今天是工作日吗(请输入整数1~7)?"))
if day in [1,2,3,4,5]:
print("今天是工作日。")
if day in [6,7]:
print("今天非工作日。")
双分支选择结构
双分支选择结构就是if else语句,相信大家都不陌生。
- 若if语句中的判断条件成立,执行代码段1
- 若判断条件不成立,则执行代码段2
示例:使用二分支结构判断当天是否是工作日。
day = int(input("今天是工作日吗(请输入整数1~7)?"))
if day in [1,2,3,4,5]:
print("今天是工作日。")
else:
print("今天非工作日。")
多分支选择结构
选择结构的嵌套
选择结构的嵌套是指选择结构的内部包含选择结构
if 判断条件1:
代码段1
if判断条件2:
代码段2
代码段3
三元表达式
python中没有c语言中的三目运算符,但是可以通过以下的形式实现三目运算符的功能
格式:条件判断为真时的结果 if 判断条件 else 条件为假时的结果
示例:x=x-1 if x>0 else x=x+1
等价于:
if x > 0:
x = x - 1
else:
x = x + 1
我们可以利用三元表达式来实现裴波那契数列:
def fun(n):
return n if n < 2 else fun(n - 1) + fun(n - 2)
还有一种用法,用bool方法选择相应的值,例如:
x = 1
print([2, 3][bool(x)])
x = 0
print([2, 3][bool(x)])
结果:
3
2
循环语句
在实际应用中有些需要重复进行的操作,可以用循环语句实现。
循环语句有:
while、do while、for
while循环
- 若循环条件为True,则循环执行while循环中的代码段;
- 若循环条件为False,终止while循环。
- 若while循环的条件总是True,这种情况叫做死循环 。
例如:使用while循环实现计算n的阶乘
n = int(input("请输入一个整数:"))
fact = 1
i = 1
while i<= n:
fact = fact*i
i = i + 1
print("n!={}".format(fact))
while else循环
Python的while循环也支持使用保留字else产生分支。
示例2:使用while-else循环实现计算n的阶乘
n = int(input("请输入一个整数:"))
fact = 1
i = 1
print("n!计算中……")
while i<= n:
fact = fact*i
i = i + 1
else:
print("n!计算完成 ,循环正常结束")
print("n!={}".format(fact))
for 循环
- 目标可以是字符串、文件、range()函数或组合数据类型等;
- 循环变量用于保存本次循环中访问到的遍历结构中的元素;
- for循环的循环次数取决于遍历的目标元素个数。
示例1:遍历字符串中的每个字符
string = input("请输入一个字符串:")
for c in string:
print(c)
for else循环
for…else循环的具体实现形式:
for 循环变量 in 目标:
循环体
else:
代码块
用法与while…else相同,如果循环体结束后没有碰到break语句,就会执行else语句块,如果结束之前碰到了break语句,就会跳出整个for循环,因此else语句块也就不会执行。
循环控制语句
·在循环语句中,有时候需要达到中断循环,或者跳过本次循环,执行下次循环的情况,因此就需要有循环控制语句
python中使用break、continue语句控制循环的执行过程
break用于跳出整个循环
continue用于跳出本次循环,继续执行下次循环
break语句
while 循环条件:
[代码段1]
if 判断条件:
break
[代码段2]
for 循环变量 in 遍历结构:
[代码段1]
if 判断条件:
break
[代码段2]
continue语句
while 循环条件:
[代码段1]
if 判断条件:
continue
[代码段2]
for 循环变量 in 遍历结构:
[代码段1]
if 判断条件:
continue
[代码段2]
pass语句
pass的意思是过,pass掉就是淘汰掉的意思。
在python中,pass的意思是空语句,pass语句不做任何事情,只是为了保持程序结构的完整性。
我们下次说说面向对象,python基础有很多的知识,篇幅有限,不能一一列举完,需要的可以自行搜索。