Python 去剑式

种种变化,用以体演总诀。共有三百六十种变化。

用以破解普天下各门各派的剑法。「破剑式」虽只一式,但其中于天下各门各派剑法要义兼收并蓄;虽说「无招」却是以普天下剑法之招数为根基,因而其变化之多端不逊于总决式。

摘自金庸 《笑傲江湖》

前两章介绍了python的基本的语法格式----代码块的使用和python的简单介绍。

本章会介绍python的 控制语句的语法形式。

在任何一种计算机语言中,学会如何声明、使用变量 , 学会如何使用控制语句。做到这两点,就算是入门了。在Python 变量的声明不需要掌握,也就是说:现在了解如何使用控制语句就行了。

控制语句只有三种:

循环(while for)、选择(if-elise)、转向(break,continiue)

实际上,我们使用所有的程序逻辑都是由以上三种语句构成的。这三种语句构成了各种程序。是不是有点像独孤九剑的总诀式----种种变化,用以体演总诀。共有三百六十种变化。

1条件语句

1.1 简单条件语句

if <expression> :

if_suite # if语句中的代码块

1.2 if-else结构

if <expression> :

if_suite #

else:

else_suite ##

1.3 if-elseif 语句(多重分支判断)

if <expression>:

if-suite

elif <expression>:

elif--suite

else:

else_suite

1.4 鸡肋部分

在看条件语句的时候,你也许会问:python有没有 三目运算符 ? 个人一直认为三目运算是一个鸡肋。java和c++都有,但是很少会有人用到。

python在很长一段时间内是没有三目的。 Guido Van Rossum 本人也是一直拒绝加入这样的功能,因为他认为应该保持代码简单,让程序员不易出错。但是许多年之后,他发现自己错了,主要因为在这几年里人们试着使用and和or来模拟三目运算符,而且大多数都是错误的。于是,他本人给出了一个比较合理的解决方案:

C?X:Y 是一个三元运算符的表达式。那么,在python中应该写成:

if C :

x

else :

Y

答案是错的。

----》 Guido Van Rossum 本人觉得正确的应该是:

X if C else Y ###PS看的是不是比较怪异;

demo:

在比较大小的时候:

res = x if x<y else y

print res

2循环语句

2.1 while循环

while语句我就不多说了,使用的形式基本一样。

while <exp> :

while-suite

还有一个像C++ 一样的东西:无线循环

2.2 for循环

在python中for循环和传统的c、C++的for循环(计数器循环)不太一样,它更像是shell脚本或者js中的for-each的迭代循环。(有点像java的增强for循环)

python中的for接受可迭代对象作为参数,每次迭代其中的一个元素。

For提供了python中最强大的循环结构。它可以遍历序列的成员,可以用在解析和生成器的表达式中,他会自动的调用迭代器的next()函数。这一点和java的增强for循环是一样的。

例如:

在java中是这样写的:

在python中是:

运行的效果:

2.2.1 for使用方法:

本节叙述一下for的简单使用方法:

1. 用于序列类型的迭代

这里需要说明一下:

len()函数是获取集合的大小。

Range()用于可以迭代。

2. 用于迭代器类型

3. 通过range()函数迭代

range()提供了两种不同的方法类调用。完整的语法是:
range(start, end , step=1 )

step是步长,start是一个是起始,end是结束的

range(end)

细说xrange与range

Xrange类似于range , 不过当你有一个很大范围的;列表时,xrange更为合适。因为Xrange不会在内存里创建列表的完整copy ,他的性能远远高出range,xragne返回的是一个迭代对象。

两者使用方法相同,不再赘述。

4. 关于for的总结

在此希望大家来看看 xrange()和range()函数。。。。。不再赘述。

Break与continue、pass

在python中break的作用类似于C、java语言: 用于跳出当前的循环。

例如:

而continiue用于终止本次循环,并忽略continiue作用的语句,然后回到循环的顶端。

例如:

Pass 语句:

由于python没有使用传统的{}类标记代码快,所以有些地方在语法上要求要有代码,而python中没有对用的空的代码快或者是; 号 ,如果你在需要写代码快(code block)的地方空着,不写任何语句,python解释器会提示你语法错误。 这就很尴尬了。我的天哪,怎么没有{}和; ,这让我怎么写空语句???

没关系,python的设计者早已替你想好了对策: 使用pass语句,他不做任何事情---NOP(No OPeration)。同时pass也可以作为开发的小技巧,标记你后来要完成的代码。

例如:

再看else

在python中,else不仅可以与if连用,还可以与while一起使用。

while expression :

语句块

else :

Else语句块

再看迭代器

迭代器是在python2.2的时候添加的功能,他为类序列对象提供了一个类序列的接口。实际上,学过设计模式的我们,应该知道:迭代器模式。

设计模式中是这样解释的:

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。

在python中,iter(obj )函数会返回一个迭代期对象。使用next()方法迭代。

例如:

这样会出现异常:

在python中,应该这样做:

此处使用while+iterate的形式等价与for循环。在java中的for-eache也是如此的。

Python 去剑式的更多相关文章

  1. Python列表推导式和嵌套的列表推导式

    列表推导式提供了一个更简单的创建列表的方法.常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列. 例如,假设我们想创建一个平方 ...

  2. python 使用流式游标 读取mysql怎么不会内存溢出

    使用过java读取mysql大数据量的人应该都知道,如果查询时不开游标不设置一次性区大小的话,会一次性的把所有记录都拉取过来再进行后续操作,数据量一大就很容易出现OOM 如果用python去读取mys ...

  3. ubuntu14.04 python + opencv 傻瓜式安装解决方案

    ubuntu14.04  python + opencv 傻瓜式安装解决方案 ubuntu下使python和opencv来做开发的话,总要花那么点时间来配置环境.我偶然间发现了一种傻瓜式安装办法希望快 ...

  4. python的推导式 —— 列表推导式、集合和字典推导式

    python的推导式是用于快速处理数据的方法. 主要有:列表推导式.集合推导式和字典推导式 import time import numpy as np 列表推导式: 1. 速度快 t1 = time ...

  5. python字典推导式 - python基础入门(17)

    在昨天的文章中,我们介绍了关于python列表推导式 的使用,字典推导式使用方法其实也类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,所以整个表达式需要写在{}内部. ...

  6. python 列表推导式 - python基础入门(16)

    截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...

  7. Selenium2+python自动化38-显式等待(WebDriverWait)

    From: https://www.cnblogs.com/yoyoketang/p/6517477.html 前言: 在脚本中加入太多的sleep后会影响脚本的执行速度,虽然implicitly_w ...

  8. Python生成器/推导式/生成器表达式

    一   生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样,取值方式和迭代器一样(__next__(),  send():  给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创 ...

  9. python(列表推导式和生成器表达式)

    从母鸡下蛋的故事讲起 老母鸡 = ('鸡蛋%s'%i for i in range(10)) print(老母鸡) for 蛋 in 老母鸡: print(蛋) g = (i*i for i in r ...

随机推荐

  1. Line segment matching

    FMII2方法:FMII方法的轻微的修改.有限线段和无限线段(直线)的匹配. 求解方法: SVD分解 Unit Quaternion 协方差矩阵: 通过对C进行SVD分解得到R,根据R求得T. 算法流 ...

  2. JavasSript实现秒转换为“天时分秒”控件和TDD测试方法应用

    背景 时间累计值,在顶层一般以秒为计算单位, 所以到页面上如果直接显示xx秒, 如果秒的值很大, 则用户得不到直观的感受, 到底有多长时间, 在日长生活中, 人们以天 时 分 秒为单位来记录时间累计值 ...

  3. Java基础之在窗口中绘图——渐变填充(GradientApplet 1)

    Applet程序. import javax.swing.*; import java.awt.*; import java.awt.geom.*; @SuppressWarnings("s ...

  4. qunit学习(一)

    QUnit是一个强大的JavaScript单元测试框架,用于调试代码.该框架是由jQuery团队的成员所开发,并且是jQuery的官方测试套件.任意正规JavaScript代码QUnit都能测试. 其 ...

  5. Groovy学习笔记(二)

    在上一篇文章中我们主要学习了如何搭建Groovy开发环境,为我们的Groovy之旅做好了准备工作,不知道你是否准备好了?接下来我们就一起看看Groovy与我们熟悉的Java有什么异同. Groovy是 ...

  6. Linux操作系统备份之一:使用LVM快照实现Linux操作系统数据的在线备份

    这里我们讨论Linux操作系统的备份. 在生产环境,客户都会要求做全系统的数据备份,用于系统崩溃后的一种恢复手段.这其中就包含操作系统数据的备份恢复. 由于是生产环境,客户都会要求备份不中断业务,也就 ...

  7. Yii2框架查询指定字段和获取添加数据的id

    指定字段: $historyinfo = Healthy::find()->select(['healthy_id','pet_name','hardware_name','hardware_c ...

  8. StringBuilder和Append的一个程序及一个基础概念

    废话少说直接来说:比如在串口数据操作中,我们只想显示串口接收的字符串,好吧你用string[]吧,有多少个字符串(顺便说下二进制在C#中是以字符串形式出现的)就要分配多少个储存空间,自己试下,要你你干 ...

  9. [课程设计]Scrum 2.8 多鱼点餐系统开发进度(下单一览页面-菜式一览功能的最终实现)

    Scrum 2.8 多鱼点餐系统开发进度 (下单一览页面-菜式一览功能的最终实现) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队 ...

  10. Swashbuckle for asp.net core 配置说明

    0x00 安装 Swashbuckle 6.0 打开程序包管理器控制台,输入: Install-Package Swashbuckle -Pre 0x01 配置 Startup.cs public v ...