六.Python3流程控制&&pass&&迭代器与生成器&&函数

一.流程控制

1.分类

选择结构:通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。
	if选择结构
	match...case
循环结构
	for循环
	while循环

(一)if选择结构

2.选择结构–if-else选择结构

2.1流程图

在这里插入图片描述

2.2 if-else执行过程

在这里插入图片描述

2.3 语法

if 条件:
	代码块
else:
  代码块

2.4案例

# 如果成年门票为50否则免费
age = int(input("请输入年龄"))
if age >= 18:
    print("请支付50元")
else:
    print("免费")

3.选择结构–if-elif-else选择结构

3.1流程图

在这里插入图片描述

3.2 语法

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3

如果 “condition_1” 为 True 将执行 “statement_block_1” 块语句
如果 “condition_1” 为False,将判断 “condition_2”
如果"condition_2" 为 True 将执行 “statement_block_2” 块语句
如果 “condition_2” 为False,将执行"statement_block_3"块语句
Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。

注意:

 - 每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
 - 用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
 - 在 Python 中没有 switch...case 语句,但在 Python3.10 版本添加了 match...case,功能也类似

4.选择结构–if嵌套

4.1 流程图

在这里插入图片描述

4.2 语法

if 表达式1:
    语句
    if 表达式2:
        语句
    elif 表达式3:
        语句
    else:
        语句
elif 表达式4:
    语句
else:
    语句
	    

4.3 案例

run_time = float(input("请输入百米时间: "))
if run_time < 10:
    sex = input("请输入性别: ")
    if sex == "男":
        print("进入男子决胜组")
    else:
        print("进入女子决胜组")
else:
    print("很遗憾,没有进入决胜局")

5.选择结构–match-case

5.1 流程图

在这里插入图片描述

5.2 语法

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

说明

  • Python 在 3.10 之前没有提供类似 switch case 一样的分支语句,虽然也能用 if elif else 或者字典来实现同样的逻辑。到 3.10 版本终于提供了 match case 结构化模式匹配,该语法比 switch case 更加灵活和强大。
  • match 语句接受一个表达式并将其值与以一个或多个 case 语句块形式给出的一系列模式进行比较。和其他语言 switch case 语句很不同的一点是,match case 不用 break 进行退出,每个 case 是独立的逻辑。
  • 其他 case 条件都不满足时,可以用 _ (下划线)通配符进行捕获(同其它语言 default 分支)
  • 可使用 | (或)组合多个 case 条件,满足其中一项时就匹配(同其它语言多个 case 只有一个break 的情况)。

5.3 匹配字面值

def func(str):
    match str:
        case 'cpp':
            print('cpp')
        case 'java':
            print('java')
        case 'js' | 'python': #case不用break跳出,多个条件时用或连接
            print('js or python')
        case _: #通配符,类似c语系switch语句的default分支,其他case都不满足时进入
            print('other')
 
func('python') #js or python
func('cpp') #cpp
func('sql') #other

5.4带有字面值和变量的模式

# tuple变量
point = (1, 2)
match point:
    case (0, 0):
        print('1:0,0')
    case (x, 0):
        print(f'2:{x},0')
    case (0, y):
        print(f'3:0,{y}')
    case (x, y):
        print(f'4:{x},{y}')  # 4:1,2

(二)循环结构

1.for循环

1.1 流程图

在这里插入图片描述

1.2语法
for <variable> in <sequence>:
   <statements>
else:
   <statements>
1.3案例1-for循环
# 遍历range
for item in range(1, 11):
    if item == 10:
        print(item)
    else:
        print(item, end=",")
print()
# 遍历字符串
str1 = "sdfsdfsf"
for item in str1:
    print(item)
else:
    print("字符串遍历结束")

# 遍历列表
list1 = ["张三", "李四", "王五"]
for item in list1:
    print(item)
else:
    print("列表遍历结束")

# 遍历元组
tuple1 = (1, 2, 3, 4, 5, 6)
for item in tuple1:
    print(item)
else:
    print("元组遍历结束")

# 遍历set集合
set1 = {"人民的名义", "长相思", "好先生", "下半生"}
for item in set1:
    print(item)
else:
    print("集合遍历结束")

# 遍历字典
dict1 = {1: "檀健次", 2: "杨洋", 3: "肖战", 4: "魏大勋"}
for item in dict1.keys():
    print(item)
for item in dict1.values():
    print(item)
for item in dict1.items():
    print(item)

1.4 案例:for循环&&break&&continue
	break:结束整个for循环
	continue:结束本次循环,执行下一次循环

break流程图
在这里插入图片描述
continue流程图
在这里插入图片描述

# continue
for item in range(11):
    if item % 3 == 0:
        continue
    else:
        print(item, end=" ")  # 1 2 4 5 7 8 10
print()
# break
for item in range(11):
    if item == 3:
        break
    else:
        print(item, end=" ")  # 0 1 2

2.while循环

2.1 流程图

在这里插入图片描述

2.2语法
while 判断条件(condition):
    执行语句(statements)……
2.3 案例
# while 循环
n = 1
while n <= 5:
    print("练习的第%d遍!" % n)
    n += 1
2.4while-else
# while-else 循环
n = 1
while n <= 5:
    print("练习的第%d遍!" % n)
    n += 1
else:
    print("练习结束!")

3.while循环—简单语句组

如果你的 while 循环体中只有一条语句,你可以将该语句与 while 写在同一行中

# while 简单语句组
n = 1
while n == 1: print(n)

二.pass语句

pass的中文含义是通过的意思,在Python3中是空语句,为了保证程序结构的完整性。
pass放在代码中就是啥都不做,就是一个站位语句

三.函数

1.为什么要使用函数


	在Python中函数分为两大类:
		内置函数(系统函数)
		自定义函数:我们自己定义的
	使用函数具有一种封装的思想,把重复的代码写一次放在一个函数中,可以解决代码冗余的问题,并且更好的维护代码

2.函数的定义


	def 函数名(参数列表):
		代码块
		return 返回值	

3.函数的分类


	分为四类:
		无参无返回值
		无参有返回值
		有参无返回值
		有参有返回值

4.调用函数


	无参无返回值 : 函数名()
	无参有返回值: res=函数名()
	有参无返回值: 函数名(实参)
	有参有返回值: res=函数(实参)

5.四类函数的简单案例

	# 定义四种函数
# 1.无参数无返回值
def hello():
    print("大家好,我是无参数无返回值的函数")


# 2.无参有返回值
def hi():
    return "胖虎和提莫打了招呼!"


# 3.有参无返回值
def add(a, b):
    print("%d+%d=%d" % (a, b, a + b))


# 4.有参有返回值
def sum(a, b):
    return "%d+%d=%d" % (a, b, a + b)


# 调用了无参数无返回值
hello()
# 调用了无参有返回值
res = hi()
print(res)
# 有参无返回值
add(1, 2)
# 有参有返回值
result = sum(1, 2)
print(result)

6.参数的深入讲解

6.1 函数参数的分类
 - 位置参数
 - 关键字参数
 - 缺省参数
 - 不定长参数/可变参数
 - 函数作为参数进行传递
6.2 位置参数
	位置参数调用函数时根据函数定义的参数位置来传递参数,传递的参数和定义的参数的顺序及个数必须一致
    形参的顺序就是实参的顺序要一一对应	 
# 1.位置参数  形参的顺序就是实参的顺序要一一对应
def show_stu_info(stu_name, stu_age, stu_major):
    """
        该函数的形参是位置参数,定义参数的顺序和实参的顺序要一一对应
    :param stu_name:
    :param stu_age:
    :param stu_major:
    :return:
    """
    print(f"大家好,我是{stu_name},今年{stu_age}岁,专业为{stu_major}!")


show_stu_info("美年达", 20, "英语")
6.3 关键字参数
	调用函数的时候,实参的语法为:键=值的方式
	形参名字是键
	实参是值
	传实参的时候可以不用按照顺序
# 1.关键字参数  传参的形式为键=值
def show_stu_info1(stu_name, stu_age, stu_major):
    """
        该函数的形参是未知参数,定义参数的顺序和实参的顺序随意 语法: 形参=值
    :param stu_name:
    :param stu_age:
    :param stu_major:
    :return:
    """
    print(f"大家好,我是{stu_name},今年{stu_age}岁,专业为{stu_major}!")


show_stu_info1(stu_age=30, stu_major="金融", stu_name="王亮")
6.4 既有位置参数也有关键字参数
	传实参的时候,位置参数在前,关键字参数在后,位置参数之间没有顺序
# 3.既有位置参数又有关键字参数
def flower_info(flower_name, flower_area, flower_price):
    print(f"产于{flower_area}{flower_name},售价为{flower_price}¥!")


flower_info("玫瑰", flower_area="云南", flower_price=380)
flower_info("丁香花", flower_price=180, flower_area="湖北")
6.5 缺省参数
	缺省参数也叫做默认参数,该参数可传实参,可以不传实参
	如果传实参就使用默认值
	位置参数在前,缺省参数在后
# 缺省参数
def emp_info(emp_name, emp_position, emp_company="XXXX公司"):
    print(f"员工{emp_name},从事{emp_position}岗,入职{emp_company}")


emp_info("阿美", "后期维护", emp_company="画XXX饼公司")
emp_info("阿绿", "售前客服")
6.6不定长参数/可变参数
   愿意传就传,不传就不传
	位置传递:*args  所有的参数会被args统一管理,其实是元组类型
	关键字传递:**kwargs	 所有的参数贝贝kwargs统一管理,其实是字典类型
# 位置传递
def he(*args):
    print(args)
    sum1 = 0
    for item in args:
        sum1 += item
    print(sum1)


def he1(*args):
    print(args)


he(1, 2, 3, 4, 5)  # 15
he1("张三", "李四", "王五")  # ('张三', '李四', '王五')
# 关键字传递
def order_info(**kwargs):
    print(kwargs)
    for item in kwargs.keys():
        print(item, "\t", kwargs.get(item))


order_info(no=1101, name="香蕉", count=12, price=50)
6.7 函数作为参数传递
	传递的参数是函数名,其实传递的是计算逻辑
# 函数作为参数
def a(fun):
    print(fun(1, 2))


def b(num1, num2):
    return num1 + num2


a(b)
函数之间的互相调用
# 函数作为参数
def add_1(a, b):
    print(f"{a}+{b}={a + b}")


def subduction_1(a, b):
    print(f"{a}-{b}={a - b}")


def multiplication_1(a, b):
    print(f"{a}*{b}={a * b}")


def division_1(a, b):
    print(f"{a}/{b}={a / b}")


def compute(a, b):
    while True:
        type = input("请输入运算符号")
        match type:
            case "+":
                add_1(a, b)

            case "-":
                subduction_1(a, b)
            case "*":
                multiplication_1(a, b)
            case "/":
                subduction_1(a, b)
            case _:
                print("运算符号输入有误,请重新输入")
                continue
        break
    else:
        print("谢谢使用!")


compute(10, 2)

7.返回值的深入讲解

 7.1 函数返回值分类
 	没有返回值
 	一个返回值
 	多个返回值
7.2 没有返回值
 一个函数没有些return不是没哟返回值,而是返回值为None
# 无返回值
def user_info():
    print("用户信息")


user_return = user_info()
print(type(user_return))  # <class 'NoneType'> None是一种数据类型,代表无具体值
print(user_return)  # None

7.3 一个返回值

用一个变量接收即可
# 一个返回值
def dept_info():
    return "运维岗"


dept_return = dept_info()
print(dept_return)

7.4 多个返回值

return后台面可以返回多个不同数据类型的值,用逗号分隔
用多个变量接收函数的返回值,用逗号分隔
# 多个返回值
def animal_info():
    return "又", "鸟", True, 11


a, b, c, d = animal_info()
print(a, b, c, d)  # 又 鸟 True 11

8.函数的说明文档

在函数的内容使用三引号对函数进行说明
功能
参数
返回值
# 函数说明文档的使用
def waimai_info(name, produce):
    """
    输出外卖信息的一个函数
    :param name: 平台名称
    :param produce:  平台介绍
    :return: 平台信息
    """
    print(name, produce)

9.变量在函数中的作用域

9.1 分类
	局部变量/内部变量
	全局变量
9.2 局部变量
	- 由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
    - 函数内部定义的变量为局部变量,在函数外无法访问
# 局部变量
def show():
    show_info = "hello" #局部变量
    print(show_info)


print(show_info)  #无访问权限 NameError: name 'show_info' is not defined. Did you mean: 'show_stu_info'?
9.3 全局变量
	- 全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用
	- 在函数内外都可以被访问到的变量
cat = "提莫"


def cat_info():
    print(cat)


cat_info()  # 提莫
print(cat)  # 提莫
9.4 global关键字
	- global中文含义是全球,全部,全局
	- global是Python中的全局变量关键字。
	- global关键字的作用是可以使得一个局部变量为全局变量
	- Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部将其声明其为global 变量。添加了global关键字后,则可以在函数内部对函数外的对象进行操作了,也可以改变它的值。

没有添加global

#没有添加global
x = 4
def my():
    x = 8
    print("x = ", x)

my()
print("x = ", x)

# 结果是:# 内部的没有影响外部的的局部变量
x = 8
x = 4

添加global

# 添加global
# 在my函数中,在 x 前面加 global,my函数将 x 赋为8,此时全局变量中的 x 值改变。需要注意的是 global 需要在函数内部声明,若在函数外声明,则函数依然无法操作 x 。
x = 4


def my():
    global x
    x = 8
    print("x = ", x)


print("x = ", x)
my()
print("x = ", x)

# 结果是:
x = 4
x = 8
x = 8

global语句被用来声明 x 是全局的变量。
可以使用同一个 global 语句指定多个全局变量。
全局无法使用局部变量,只有对应的局部作用域可用

# global语句同时指定多个全局变量
# 全局无法使用局部变量
x = 4
y = 5
z = 6


def my():
    global x, y, z  # 一个global关键字定义多个全局变量
    x = 7
    y = 8
    z = 9
    k = 10
    print(f"x = {x},y = {y}, z = {z}, k = {k}")


print(f"x = {x},y = {y}, z = {z}")
my()
print(f"x = {x},y = {y}, z = {z}")
print(f"k = {k}")

# 结果是:
x = 4, y = 5, z = 6
x = 7, y = 8, z = 9, k = 10
x = 7, y = 8, z = 9
NameError: name
'k' is not defined  # 打印k时报错

10.lambda匿名函数

1.定义
	def关键字:定义带有名称的函数
	lambda关键字:定义匿名函数(没有名称)
2.区别
	语法不同
	有名称的函数可以多次使用
	没有名字的匿名函数只可以临时使用一次
3.匿名函数语法
	lambda 传入参数:函数体(函数体必须是一行代码)
		- lambda是关键字,表示定义匿名函数
		- 传入参数表示匿名函数的形式参数,如: x, y表示接收2个形式参数
		- 函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码
# lambda匿名函数
def calc(add):
    result = add(1, 1)
    print(result)


calc(lambda x, y: x + y)  # 传入一个匿名函数

四.迭代器与生成器

(一).迭代器

 1.作用
 	迭代器的作用是访问集合元素的,可以遍历字符串,列表或者元组
 2.两个基本方式
 	iter() 创建迭代器对象的
 	next() 获取遍历到的每一个元素
遍历集合
	# 遍历集合
import sys

list1 = ["centos", "ubuntu", "Redhat"]
# 创建迭代器对象
it1 = iter(list1)
# 1.通过for循环遍历迭代器
for x in it1:
    print(x)

# 2.通过next()函数获取集合数据
while True:
    try:
        print(next(it1))
    except StopIteration:
        sys.exit()

遍历字符串
# 遍历字符串
str1 = "dfsdfsdfsdfs"
it2 = iter(str1)
while True:
    try:
        print(next(it2))
    except StopIteration:
        sys.exit()

(二).生成器

1.定义
	在Python中使用了yield关键字的函数被称为生成器
	yield是一个关键字,用于定义生成器函数,生成器函数是一种特殊函数,可以在迭代过程中逐步产生值,不是一次性返回所有的结果
2.普通函数和生成器函数的区别
	生成器是一个返回迭代器的函数,只能用于迭代曹操作,换句话说生成器就是一个迭代器
3.原理
	在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回.然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果

说明:调用一个生成器函数,返回的是一个迭代器对象

# 生成器
def show_stu_count(n):
    while n > 0:
        yield n
        n -= 1


it1 = show_stu_count(5)
while True:
    try:
        print(next(it1))
    except StopIteration:
        break
for val in it1:
    print(val)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值