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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
基于python编写的微博应用
Oct 17 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
tensorflow获取变量维度信息
Mar 10 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python之修改图片像素值的方法
Jul 03 Python
python+logging+yaml实现日志分割
Jul 22 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 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
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
PHP图片上传代码
2013/11/04 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
接口中的方法可以是abstract的吗
2015/07/23 面试题
八项规定整改方案
2014/02/21 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏