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 相关文章推荐
python 动态获取当前运行的类名和函数名的方法
Apr 15 Python
python 文件操作删除某行的实例
Sep 04 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
如何卸载python插件
Jul 08 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
浅析PHP的ASCII码转换类
2013/07/05 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
2015/01/19 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
vant实现购物车功能
2020/06/29 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Python对象的属性访问过程详解
2020/03/05 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
查询优化的一般准则有哪些
2015/03/08 面试题
《鸟的天堂》教学反思
2014/02/27 职场文书
新学期决心书
2014/03/11 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python