Python的控制结构之For、While、If循环问题


Posted in Python onJune 30, 2020

传统Python语言的主要控制结构是for循环。然而,需要注意的是for循环在Pandas中不常用,因此Python中for循环的有效执行并不适用于Pandas模式。一些常见控制结构如下。

  • for循环
  • while循环
  • if/else语句
  • try/except语句
  • 生成器表达式
  • 列表推导式
  • 模式匹配

所有的程序最终都需要一种控制执行流的方式。本节介绍一些控制执行流的技术。

01 for循环

for循环是Python的一种最基本的控制结构。使用for循环的一种常见模式是使用range函数生成数值范围,然后对其进行迭代。

res = range(3) 
print(list(res)) 
 
#输出:[0, 1, 2] 

for i in range(3): 
print(i) 
 
'''输出: 
0 
1 
2 
'''

for循环列表

使用for循环的另一种常见模式是对列表进行迭代。

martial_arts = ["Sambo","Muay Thai","BJJ"] 
for martial_art in martial_arts: 
 print(f"{ martial_art} has influenced\ 
  modern mixed martial arts") 
 
'''输出: 
Sambo has influenced modern mixed martial arts 
Muay Thai has influenced modern mixed martial arts 
BJJ has influenced modern mixed martial arts 
'''

02 while循环

while循环是一种条件有效就会重复执行的循环方式。while循环的常见用途是创建无限循环。在本示例中,while循环用于过滤函数,该函数返回两种攻击类型中的一种。

def attacks(): 
 list_of_attacks = ["lower_body", "lower_body", 
  "upper_body"] 
 print("There are a total of {lenlist_of_attacks)}\ 
  attacks coming!") 
 for attack in list_of_ attacks: 
 yield attack 
attack = attacks() 
count = 0 
while next(attack) == "lower_body": 
 count +=1 
 print(f"crossing legs to prevent attack #{count}") 
else: 
 count += 1 
 print(f"This is not lower body attack, \ 
I will cross my arms for# count}") 
 
'''输出: 
There are a total of 3 attacks coming! 
crossing legs to prevent attack #1 
crossing legs to prevent attack #2 
This is not a lower body attack, I will cross my arms for #3 
'''

03 if/else语句

if/else语句是一条在判断之间进行分支的常见语句。在本示例中,if/elif用于匹配分支。如果没有匹配项,则执行最后一条else语句。

def recommended_attack(position): 
 """Recommends an attack based on the position""" 
 if position == "full_guard": 
 print(f"Try an armbar attack") 
 elif position == "half_guard": 
 print(f"Try a kimura attack") 
 elif position == "fu1l_mount": 
 print(f"Try an arm triangle") 
 else: 
 print(f"You're on your own, \ 
  there is no suggestion for an attack") 
recommended_attack("full_guard")#输出:Try an armbar attack 
recommended_attack("z_guard") 
 
#输出:You're on your own, there is no suggestion for an attack

04 生成器表达式

生成器表达式建立在yield语句的概念上,它允许对序列进行惰性求值。生成器表达式的益处是,在实际求值计算前不会对任何内容进行求值或将其放入内存。这就是下面的示例可以在生成的无限随机攻击序列中执行的原因。

在生成器管道中,诸如 “arm_triangle”的小写攻击被转换为“ARM_TRIANGLE”,接下来删除其中的下划线,得到“ARM TRIANGLE”。

def lazy_return_random_attacks(): 
 """Yield attacks each time""" 
 import random 
 attacks = {"kimura": "upper_body", 
  "straight_ankle_lock": "lower_body", 
  "arm_triangle": "upper_body", 
  "keylock": "upper_body", 
  "knee_bar": "lower_body"} 
 while True: 
  random_attack random.choices(list(attacks.keys())) 
  yield random attack 
 
#Make all attacks appear as Upper Case 
upper_case_attacks = \ 
  (attack.pop().upper() for attack in \ 
  lazy_return_random_attacks()) 
next(upper-case_attacks) 
 
#输出:ARM-TRIANGLE 
## Generator Pipeline: One expression chains into the next 
#Make all attacks appear as Upper Case 
upper-case_attacks =\ 
 (attack. pop().upper() for attack in\ 
 lazy_return_random_attacks()) 
#remove the underscore 
remove underscore =\ 
 (attack.split("_")for attack in\ 
 upper-case_attacks) 
#create a new phrase 
new_attack_phrase =\ 
 (" ".join(phrase) for phrase in\ 
 remove_underscore) 
next(new_attack_phrase) 
 
#输出:'STRAIGHT ANKLE LOCK' 
for number in range(10): 
 print(next(new_attack_phrase)) 
 
'''输出: 
KIMURA 
KEYLOCK 
STRAIGHT ANKLE LOCK 
'''

05 列表推导式

语法上列表推导式与生成器表达式类似,然而直接对比它们,会发现列表推导式是在内存中求值。此外,列表推导式是优化的C代码,可以认为这是对传统for循环的重大改进。

martial_arts = ["Sambo", "Muay Thai", "BJJ"] 
new_phrases [f"mixed Martial Arts is influenced by \ 
 (martial_art)" for martial_art in martial_arts] 
print(new_phrases) 
['Mixed Martial Arts is influenced by Sambo', \ 
'Mixed Martial Arts is influenced by Muay Thai', \ 
'Mixed Martial Arts is influenced by BJJ']

06 中级主题

有了这些基础知识后,重要的是不仅要了解如何创建代码,还要了解如何创建可维护的代码。创建可维护代码的一种方法是创建一个库,另一种方法是使用已经安装的第三方库编写的代码。其总体思想是最小化和分解复杂性。

使用Python编写库

使用Python编写库非常重要,之后将该库导入项目无须很长时间。下面这些示例是编写库的基础知识:在存储库中有一个名为funclib的文件夹,其中有一个_init_ .py文件。要创建库,在该目录中需要有一个包含函数的模块。

首先创建一个文件。

touch funclib/funcmod.py

然后在该文件中创建一个函数。

"""This is a simple module""" 
def list_of_belts_in_bjj(): 
 """Returns a list of the belts in Brazilian jiu-jitsu""" 
 belts= ["white", "blue", "purple", "brown", "black"] 
 return belts 
import sys;sys.path.append("..") 
from funclib import funcmod 
funcmod.list_of_belts_in-bjj() 
 
#输出:['white', 'blue', 'purple', 'brown', 'black']

导入库

如果库是上面的目录,则可以用Jupyter添加sys.path.append方法来将库导入。接下来,使用前面创建的文件夹/文件名/函数名的命名空间导入模块。

安装第三方库

可使用pip install命令安装第三方库。请注意,conda命令(

https://conda.io/docs/user-guide/tasks/manage-pkgs.html)是pip命令的可选替代命令。如果使用conda命令,那么pip命令也会工作得很好,因为pip是virtualenv虚拟环境的替代品,但它也能直接安装软件包。

安装pandas包。

pip install pandas

另外,还可使用requirements.txt文件安装包。

> ca requirements.txt 
pylint 
pytest 
pytest-cov 
click 
jupyter 
nbval 
 
> pip install -r requirements.txt

下面是在Jupyter Notebook中使用小型库的示例。值得指出的是,在Jupyter Notebook中创建程序代码组成的巨型蜘蛛网很容易,而且非常简单的解决方法就是创建一些库,然后测试并导入这些库。

"""This is a simple module""" 
 
import pandas as pd 
 
def list_of_belts_in_bjj(): 
 """Returns a list of the belts in Brazilian jiu-jitsu""" 
 
 belts = ["white", "blue", "purple", "brown", "black"] 
 return belts 
 
def count_belts(): 
 """Uses Pandas to count number of belts""" 
 
 belts = list_of_belts_in_bjj() 
 df = pd.Dataframe(belts) 
 res = df.count() 
 count = res.values.tolist()[0] 
 return count 
from funclib.funcmod import count_belts 
print(count_belts()) 
 
#输出:5

可在Jupyter Notebook中重复使用类并与类进行交互。最简单的类类型就是一个名称,类的定义形式如下。

class Competitor: pass

该类可实例化为多个对象。

class Competitor: pass 
conor = Competitor() 
conor.name = "Conor McGregor" 
conor.age = 29 
conor.weight = 155 
nate = Competitor() 
nate.name = "Nate Diaz" 
nate.age = 30 
nate.weight = 170 
def print_competitor _age(object): 
 """Print out age statistics about a competitor""" 
 
 print(f"{object.name} is {object.age} years old") 
print_competitor_age(nate) 
 
#输出:Nate Diaz is 30 years old 
print_competitor_age(conor) 
 
#输出:Conor McGregor is 29 years old

类和函数的区别

类和函数的主要区别包括:

  • 函数更容易解释。
  • 函数(典型情况下)只在函数内部具有状态,而类在函数外部保持不变的状态。
  • 类能以复杂性为代价提供更高级别的抽象。

总结

到此这篇关于Python的控制结构:For、While、If…的文章就介绍到这了,更多相关Python控制结构 If、While、For内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Python写的服务监控程序实例
Jan 31 Python
在Python中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
学习python 之编写简单乘法运算题
Feb 27 Python
Python Socket使用实例
Dec 18 Python
Django中使用Celery的教程详解
Aug 24 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python logging.info在终端没输出的解决
May 12 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
Python面向对象之内置函数相关知识总结
Jun 24 Python
python实现会员信息管理系统(List)
Mar 18 Python
关于tensorflow softmax函数用法解析
Jun 30 #Python
基于tensorflow for循环 while循环案例
Jun 30 #Python
解析Tensorflow之MNIST的使用
Jun 30 #Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 #Python
Python requests模块安装及使用教程图解
Jun 30 #Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 #Python
TensorFlow-gpu和opencv安装详细教程
Jun 30 #Python
You might like
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
用PHP发电子邮件
2006/10/09 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
Python中的高级函数map/reduce使用实例
2015/04/13 Python
python fabric使用笔记
2015/05/09 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python实现基于POS算法的区块链
2018/08/07 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
浅析python中while循环和for循环
2019/11/19 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
2015年教研工作总结
2015/05/23 职场文书
导游词之桂林
2019/08/20 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python