程序结构
1 分支
-
分支的基本语法
if 条件表达式: 语句1 语句2 语句3 ......
-
条件表达式就是计算结果必须为布尔值的表达式
-
表达式后面的冒号不能少
-
注意if后面的出现的语句,如果属于if语句块,则必须同一个缩进等级
双向分支
-
if…else…语句
if 条件表达式: 语句1 语句2 ... else: 语句1 语句2 .....
-
双向分支有两个分支,当程序执行到if … else…语句的时候,一定会执行if或else中的一个,也仅执行一个
-
缩进问题,if和else一个层级,其余语句一个层级
input()
- 在屏幕上输出括号内的字符串
- 接受用户输入的内容并返回到程序
- input返回的内容一定是字符串类型
gender = input("请输入性别:")
print("你输入的性别是:{0}".format(gender)) #{}表示这里是添加的字符串,0表示第一个字符串
score = input("请输入学生成绩:")
# 需要把str转换成int
score = int(score)
多路分支
-
很多分支的情况,简称多路分支
if 条件表达式: 语句1 .... elif 条件表达式: 语句1 ... elif 条件表达式: 语句1 ... ..... else: 语句1 ....
-
elif 可以由很多个
-
else可选
-
多路分支只会选一个执行
if语句其他:
- if语句可以嵌套使用,但不推荐
- python没有switch-case语句
2 循环语句
- 重复执行某些固定动作或者处理基本固定的事物
- 分类
- for循环
- while循环
for循环
-
for循环
for 变量 in 序列: 语句1 语句2 ...
列表
- 列表就是一列数字或者其他值,一般用中括号表示
- 例如 [‘zhangsan’, ‘lisi’, ‘wangwu’,‘jingjing’]
# 打印学生列表姓名
for name in ['zhangsan', 'lisi', 'wangwu','jingjing']:
print(name)
zhangsan
lisi
wangwu
jingjing
range介绍
- 生成一个数字序列
- 具体范围可以设定
range(1,5) #代表从1到5(不包含5)
[1, 2, 3, 4]
range(1,5,2) #代表从1到5,间隔2(不包含5)
[1, 3]
range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]
for-else语句
- 当for循环结束的时候,会执行else语句
- else语句是可选语句
break,contineu,pass
- break: 无条件结束整个循环,简称循环猝死
- continue:无条件结束本次循环,从新进入下一轮循环
- pass:表示略过,通常用于站位
while循环
while 条件表达式:
语句块
#另外一种表达方法
while 条件表达式:
语句块1
else:
语句块2
3 函数
定义函数
def func():
print("我是一个函数")
print("我要完成一定功能")
print("我结束了")
- 调用函数的时候,不会输出“我结束了”
函数的参数和返回值
- 参数: 负责给函数传递一些必要的数据或者信息
- 形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,成为形参
- 实参(实际参数): 在调用函数的时候输入的值
- 返回值: 函数的执行结果
- 使用return关键字
- 如果没有return,默认返回一个None
- 函数一旦执行return语句,则无条件返回,即结束函数的执行
参数详解
- 参数分类
- 普通参数
- 默认参数
- 关键字参数
- 收集参数
默认参数
- 形参带有默认值
- 调用的时候,如果没有对相应形参赋值,则使用默认值
def func_name(p1=v1, p2=v2..........):
func_block
#调用1
func_name()
# 调用2
value1= 100
value2=200
func_name(value1,value2)
关键字参数
-
语法
def func(p1=v1, p2=v2.....): func_body 调用函数: func(p1=value1, p2=value2.......)
-
比较麻烦,但也有好处:
- 不容易混淆, 一般实参和形参只是按照位置一一对应即可,容易出错
- 使用关键字参数,可以不考虑参数位置
收集参数
-
把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中
-
语法
def func(*args): func_body 按照list使用方式访问args得到传入的参数 调用: func(p1, p2, p3, .....)
-
参数名args不是必须这么写,但是,我们推荐直接用args,约定俗成
-
参数名args前需要由星号
-
收集参数可以和其他参数共存
# 收集参数代码
# 函数模拟一个学生进行自我介绍,但具体内容不清楚
# args把他看做一个list
def stu( *args):
print("Hello 大家好,我自我介绍以下,简答说两句:")
# type函数作用是检测变量的类型
print(type(args))
for item in args:
print(item)
stu("liuying", 18, "北京大通州区", "wangxiaojing", "single")
Hello 大家好,我自我介绍以下,简答说两句:
<class 'tuple'>
liuying
18
北京大通州区
wangxiaojing
single
收集参数之关键字收集参数
-
把关键字参数按字典格式存入收集参数
-
语法:
def func( **kwargs): func_body # 调用: func(p1=v1, p2=v2, p3=v3........)
-
kwargs一般约定俗成
-
调用的时候,把多余的关键字参数放入kwargs
-
访问kwargs需要按字典格式访问
# 收集参数案例
# 自我介绍
# 调用的时候需要使用关键字参数调用
def stu( **kwargs):
# 在函数体内对于kwargs的使用不用带星号
print("Hello 大家好,我先自我介绍一下:")
print(type(kwargs))
# 对于字典的访问,python2 和python3有区别
for k,v in kwargs.items():
print(k, "---", v)
stu(name="liuying", age=19, addr="北京大通州区", lover="王晓静", work="Teacher")
print("*" * 50)
stu(name="周大神")
收集参数混合调用的顺序问题
- 收集参数,关键字参数,普通参数可以混合使用
- 使用规则就是,普通参数和关键字参数优先
- 定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict
收集参数的解包问题
- 把参数放入list或者字典中,直接把list/dict中的值放入收集参数中
- 语法:参看案例
# 收集参数的解包问题
def stu(*args):
print("哈哈哈哈哈")
# n 用来表示循环次数
# 主要用来调试
n = 0
for i in args:
print(type(i))
print(n)
n += 1
print(i)
#stu("liuying", "liuxiaoyhing", 19, 200)
l = ["liuying", 19, 23, "wangxiaojing"]
#stu(l)
# 此时,args的表示形式是字典内一个list类型的元素,即 arg = (["liuying", 19, 23, "wangxiaojing"],)
# 很显然跟我们最初的想法违背
# 此时的调用,我们就需要解包符号,即调用的时候前面加一个星号
stu(*l)
同理,dict类型收集参数一样可以解包,但是
- 对dict类型进行解包
- 需要用两个星号进行解包
4 返回值
- 函数和过程的区别
- 有无返回值
- 需要用return显示返回内容,
- 如果没有返回,则默认返回None
- 推荐写法,无论有无返回值,最后都要以return 结束
5 函数文档
- 函数的文档的作用是对当前函数提供使用相关的参考信息
- 文档的写法:
- 在函数内部开始的第一行使用三引号字符串定义符
- 一般具有特定格式
- 参看案例
- 文档查看
- 使用help函数,形如 help(func)
- 使用__doc__, 参看案例
def stu(name, age):
'''
这是文档的文字内容
:param name: 表示学生的姓名
:param age: 表示学生的年龄
:return: 此函数没有返回值
'''
pass
print(help(stu))
print("*" * 20)
print(stu.__doc__)
Help on function stu in module __main__:
stu(name, age)
这是文档的文字内容
:param name: 表示学生的姓名
:param age: 表示学生的年龄
:return: 此函数没有返回值
None
********************
这是文档的文字内容
:param name: 表示学生的姓名
:param age: 表示学生的年龄
:return: 此函数没有返回值