Fork me on GitHub

python程序控制结构

程序都是有三种基本结构组成的顺序结构分支结构循环结构

分支结构

单分支结构:if结构

python中if语句的语法结构格式如下:

if <条件>:

<语句块>

语句块是满足if条件后执行的一句或几句程序,通常,当条件判断为True时,执行语句块,当判断为False时,跳过语句块不执行。

对于条件语句,python提供了六种关系操作符

操作符 操作符含义
< 小于
<= 小于或等于
>= 大于或等于
> 大于
== 等于
!= 不等于

特别注意:在python语言中’=’是赋值,‘==’是表示等于

二分支结构:if-else结构

python中if-else语句语法格式如下:

if<条件>:

​ <语句块一>

else:

​ <语句块二>

在执行二分支结构时,先判断if后的条件语句,但结果为True时,执行语句一,否则执行语句二。

多分支结构:if-elif-else

python语言中if-elif-else语句语法格式如下:

if<条件一>:

​ <语句块一>

elif<条件二>:

​ <语句块二>

…………………

elif<条件n>:

​ <语句块n>

else:

<语句块n+1>

执行时是从上到下依次执行判断,当某个条件语句结果为True时执行它所对应的语句块,然后跳出结构,及使后边还有条件语句判断为True,也不会执行;如果条件语句结果都为False,执行else下的语句块n+1。

循环结构

遍历循环:for语句

python通过保留字for实现“遍历循环”,格式为:

1
2
for <循环变量> in <遍历结构>:
<语句块>

遍历循环可以理解为从遍历结构中逐一提取元素,放在循环变量中,对于所提取的每个元素执行一次语句块。

遍历结构可以是字符串文件组合数据类型range()函数等,常用的方法如下:

1
2
3
for i in range(N):       #自行N次,是从0到N-1
<语句块>

1
2
for line in fi:  #遍历fi文件的每一行
<语句块>
1
2
for c in s:          #遍历字符串s的每个字符
<语句块>
1
2
for items in ls:                 #遍历列表ls的每个元素
<语句块>

也有一种和else结合使用的扩展模式

1
2
3
4
for <循环变量> in <遍历结构> :
<语句块1>
else:
<语句块2>

意义为:在执行完for循环后会执行else下的语句块2

无线循环:while语句

python通过保留字while实现无线循环,格式为:

1
2
while <条件>:
<语句块>

和if结构一样,当条件为True时,执行语句块,当条件为False时跳出循环结构

while也可以和else一起使用

1
2
3
4
while<条件>:
<语句块1>
else:
<语句块2>

循环保留字continue和break

和C语言中break和continue关键字的作用一样

continue:结束本次循环,仍在循环结构中

break:结束整个循环,跳出循环结构

而且,两者只能结束一层的循环,如果要对多层循环进行操作需要多次使用

datetime库的使用

datetime库的使用

Python时间处理的标准函数库datetime提供了一批显示日期和时间的格式化方法

datetime库的概述

Pythondatetime库可以从系统中获得时间,并以用户选择的格式输出

注意:datetime库以格林威治时间时间为基础,每天由3600*24秒精度定义。

该库包含两个常量:date.MINTEAR和date.MAXTEAR分别表示datetime所能表示的最小最大年份,值分别为1和9999

datetime库提供的表示日期的方式:

方法(类) 作用
datetime.date 日期表示类,可以表示年、月、日等
datetime.time 时间表示类,可以表示小时、分钟、秒、毫秒等
datetime.datetime 日期和时间表示类,功能覆盖date和time类
datetime.timedelta 与时间间隔有关的类
datetime.tzinfo 与时区有关的信息表示类

datetime库解析

datetime类(datetime.datetime类)的使用方法是先创建一个datetime对象,然后通过对象的方式和属性显示时间。创建datetime对象有3种方法:datetime.now(),datetime.utcnow()和datetime.datetime()。

实例1:使用datetime.now()获得当前日期的时间对象.

1
datetime.now()

作用:返回一个datetime类型,表示当前的日期和时间,精确到微秒

实例2:使用datetime.utcnow()获得日期和时间对应的UTC(世界标准时间)时间对象

1
datetime.utcnow()

作用:返回一个datetime类型,表示当前日期的时间的UTC表示,精确到微秒

实例3:datetime.now()和datetime.utcnow()返回的都是一个datetime类型的对象,也可以直接使用datetime()构造一个日期和时间对象

1
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0)

作用:返回一个datetime类型,表示指定的日期和时间

datetime类的常用属性

属性 描述
someday.min 固定返回datetime的最小时间对象,datetime(1,1,1,0,0)
someday.max 固定返回datetime的最大时间对象
someday.year 返回someday包含的年份
someday.month 返回someday包含的月份
someday.day 返回someday包含的日期
someday.hour 返回someday包含的小时
someday.minture 返回someday包含的分钟
someday.second 返回someday包含的秒
someday.microsecond 返回someday包含的毫秒

datetime常用的时间格式化方法

属性 描述
someday.isoformat() 采用ISO861标准显示时间
someday.isoweekday() 根据日期计算星期后返回1~7,对应星期一到星期日
someday.strftime(format) 根据格式化字符串format进行格式显示的方法

strftime(format)

格式化字符 日期/时间 值范围和实例
%Y 年份 0001~9999
%m 月份 01~12
%B 月名 january~December
%b 月名缩写 jan~Dec
%d 日期 01~31
%A 星期 Monday~Sunday
%a 星期缩写 Mon~Sun
%H 小时(24h) 00~23
%M 分钟 00~59
格式化字符 日期/时间 值范围和实例
%S 00~59
%x 日期 月/日/年
%X 时间 时:分:秒

python内置函数

python提供了68个内置函数,不过常用的只有36个

abs() id() round() compile() locals all()
input() set() dir() map() any() int()
sorted() exec() memoryview() asci() len() str()
enumerate() next() bin() list() tuple() filter()
object() bool() max() type() formt() property()
chr() min() zip() frozenset() repr() complex()
oct() getattr() setattr() dict() open() globals()
slice() divmod() ord() bytes() hasattr() staticmethod()
eval() pow() delatter() help() sum() float()
print() bytearray() isinstance() super() hash() range()
callable() issubclass() vars() hex() reversed() classmethod()
iter() _ import() _

部分内置函数的用途

  • all()函数:一般针对组合数据类型,如果其中每个元素都是True,则返回True,否则返回False。需要注意的是,整数0、空字符串“”、空表格[]等都被当成False
  • any()函数:只要数据中有一个元素是True,则返回True,全部元素都是False时返回False
  • hash()函数:对于能够计算哈希的类型,并返回哈希值
  • id():对每一个数据返回唯一的编号
  • reversed(): 函数返回输入组合数据类型的逆序形式
  • sorted():对一个序列进行排序,默认从小到大排序
  • type():函数返回每个数据对应的类型

组合数据类型概述

组合数据类型概述

组合数据额类型为多个同类型或不同类型数据提供单一表示。组合数据类型分3类:序列类型、集合类型、映射类型


  • 基本数据类型:表示单一数据类型
  • 组合数据类型:能够表示多个数据的类型

三种数据类型

  • 序列类型:是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他(可以有重复项)
  • 集合类型:一个元素集合,元素之间无需,相同元素在集合中唯一存在
  • 映射类型:“键-值”数据项的组合,每个元素是一个键值对,表示为(key,value)

序列类型

序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。序列的基本思想和表示方法均来源于数学概念


由于元素之间存在顺序关系,所以序列中可以存在数值相同但位置不同的元素。序列类型支持成员关系操作符(in)、长度计算函数(len())、分片([]),元素本事也可以是序列类型

三种比较重要的类型及其特点

Python语言中有很多数据类型都是序列类型,不过比较重要的有三种:str(字符串)、tuple(元祖)、list(列表)

  • 字符串:字符串可以看成是单一字符的有序组合,属于序列类型,同时因为序列经常用一个字符串表示一个含义,也被看作是基本数据类型
  • 元组:是包含0个或多个数据项的不可变序列类型。元组生成后是固定的,其中任何数据项不能替换或删除
  • 列表:可以修改序列中的数据,比较灵活

序列类型的通用操作符和函数

操作符 描述
x in s 如果x是s的元素,返回True,否则返回False
x not in s 如果x不是s的元素,返回True,否则返回False
s + t 连接s和t
s * n 或 n * s 将序列s复制n次
s[i] 索引,返回序列的第i个元素
s[i:j] 分片,返回包含s第i到j个元素的子序列(不包含第j个元素)
s[i:j:k] 步骤分片,返回包含s第i到j个元素的子序列(不包含第j个元素),以k为步数
len(s) 序列s的元素个数(长度)
min(s) 序列s中的最小元素
操作符 描述
max(s) 序列s中的最大元素
s.index(x[,,i[,j]]) 序列s中从i开始到j位置中第一次出现元素x的位置
s.count(x) 序列s中出现x的总次数

生成元组只需要使用逗号将元素隔离开即可,一个元组可以作为另一个元组的元,可以采用多级索引获取信息。

元组除了用于表达固定数据项外,还常用于3种情况:函数多返回值、多变量同步赋值、循环遍历

集合类型

和数学中集合的特点一样,集合中的元素不能重复,元素类型只能是固定数据类型:整数、浮点数、字符串、元组等。

而列表,字典和集合类型本身都是可变数据类型,不能作为集合的元素出现

哈希运算

哈希运算可以将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是对数据的一种有损紧凑的表示形式。Python提供了一个内置的hash()函数来计算数据的哈希值

哈希值与哈希前的内容无关,也与这些内容的组合无关,可以说,哈希值是在另一维度的数据。

结合类型的操作

由于集合是无序组合,它没有索引位置的概念,不能分片,集合中元素可以动态增加或删除。集合用大括号({})表示,可以用赋值语句生成一个集合

集合类型的操作数

操作数 描述
S_T或S.difference(T) 返回一个新集合,包括在集合S中但不在集合T中的元素
S-=T或S.difference_update(T) 更新集合S,包括在集合S中但不在集合T中的元素
S&T或S.intersection(T) 返回一个新的集合,包括同时集中在集合S和T中的元素
S&=T或intersction_update(T) 更新集合S,包括同时集中在集合S和T中的元素
s^T或s.symmetric_difference(T) 返回一个新集合,包括集合S和T中的元素但不包括同时在其中的元素
S^=T或s.symmetric_difference_update(T) 更新集合S,包括集合S和T中的元素但不包括同时在其中的元素
S|T或S.union(T) 返回一个新的集合,包括S和T中的所有元素
S|=T或S.update(T) 更新集合S,包括S和T中的所有元素
S<=T或S.issubset(T) 如果S与T相同或S是T的子集,返回True,否则返回False
操作数 描述
S>=T或S.issuperset(T) 如果S与T相同或S是T的超级,返回True,否则返回False

集合类型的操作函数或方法

操作函数或方法 描述
S.add(x) 如果数据项x不在集合S中,将x增加到S
S.clear() 移除S中的所有数据项
S.copy() 返回一个集合S的副本
S.pop() 随机返回集合S中的一个元素,如果S为空,产生KeyError异常
S.discard(x) 如果x在集合S中,移除该元素;如果x不在集合S中,不报错
S.remove(x) 如果x在集合S中,移除该元素;不在则产生KeyError异常
S.isdisjoint(T) 如果集合S与T没有相同元素,返回True
len(S) 返回集合S的元素个数
x in S 如果x是S的元素,返回True,否则返回False
操作函数或方法 描述
x not in S 如果x不是S的元素,返回True,否则返回False

pycharm下载

pycharm下载

pycharm是一款现下载量比较多的Python IDE, PyCharm 是 JetBrains 开发的 Python IDE。PyCharm用于一般IDE具备的功能,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制……另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持Google App Engine,更酷的是,PyCharm支持IronPython!

第一步: JetBrains 官网

进入官网后找到Developer Tools,找到PyCharm,这是针对与Python的软件, JetBrains 还有其他的优秀的产品,下载方式都是一样的。

第二部:选择下载规格

PyCharm支持Windows,Mac(苹果系统),Linux,这里按照自己的情况来选择对应操作系统下的软件

在Windows系统下有两个Professional和Community,按照自己的经济能力和需求来选择下载的版本

  • Proessional是旗舰版,功能比较全,但是收费
  • Community是阉割版,Free,但对于学习是够用的

第三部:安装PyCharm

安装过程一路next就行,但是有些地方还是要注意

在这里如果不是特别需要,最好全选

  1. create desktop shortcut(创建桌面快捷方式
  2. update path variable(restart needed)更新路径变量将路径添加到环境变量中
  3. update context menu : 更新通知
  4. create associations:关联.py文件,双击都是以pycharm打开

第四步:优化pycharm设置

在下载之后为了更人性化的使用,可以个性化设置pycharm

初识python语言

初识python语言

编译与解释

高级语言按照计算机执行的方式不同可分为两种:静态语言和脚本语言

  • 静态语言采用编译执行——>C语言,Java语言
  • 动态语言采用解释执行——>python语言

编译是将源代码转换成目标代码的过程,通常,源代码是高级语言,目标代码是机器语言代码,执行编译的计算机程序称为编译器

解释是将源代码逐条转换成目标代码同时逐条运行目标代码的过程。执行解释的计算机程序称为解释器


注意两者区别:

一旦程序被编译,不再需要编译程序或源代码。解释则在每次程序进行时都需要解释器和代码


编译与解释的好处

采用编译方式有如下好处

  • 对于相同的源代码,编译所产生的目标代码执行速度更快。
  • 目标代码不需要编译器就可以运行,在同类型操作系统上使用灵活

采用解释方式有如下好处

  • 解释执行需要保留源代码,程序纠错和维护十分方便
  • 只要存在编译器,源代码可以在任何操作系统上运行,可移植性好

python语言概述

python语言是一语法简洁、跨平台、可拓展的开源通用脚本语言

开源软件

开源软件是一类开放源代码软件的统称,这类软件的源代码在特定可协议范围内,可以被任何人学习、修改、甚至发布。

Python语言特点

  1. 语法简洁:实现相同功能,python语言的代码行数仅为C语言的1/10~1/5
  2. 与平台无关:作为脚本语言,python程序可以在任何安装了解释器的电脑上运行,可以不经修改实现跨平台
  3. 粘性扩展:python可以通过接口和函数库等方式将其他语言整合在一起
  4. 开源理念:
  5. 灵活运用:功能十分强大,在各种领域都有运用
  6. 强制可读:具有很强的格式,采用强制缩进来实现语句间的逻辑关系
  7. 支持中文:
  8. 模式多样
  9. 库类丰富

用python写Hello World

运行python程序有两种方式:交互式和文件式

交互式

交互式又可分为通过cmd运行和通过IDLE远行两种

这种方式写的Python代码是输入一行,执行一行

通过cmd运行hello world

  1. 打开cmd
  2. 在命令控制栏输入python进入python解释器
  3. 在>>>后输入print(“hello world”)

通过IDLE运行hello world

  1. 点击python IDLE进入解释器
  2. 在file中新建或打开一个python文件
  3. 在文件中书写print(“hello world”)
  4. 点击Run即可运行

通过pycharm运行hello world

pycharm和idle都是Python语言的集成开发软件,在这里编写会更加方便,代码也会被pycharm自动保存下来

步奏和在IDLE编写代码时相同

文件式

  1. 新建一个文本文档
  2. 将新建的文本文档命名,并改变文档的拓展名为.py
  3. 在该文档中书写代码
  4. 通过cmd找到该文档运行
    • 查找文档所在的位置
    • 输入python 文档名.py运行

创建高级联结

使用表别名

别名除了用于列名和计算字段外,SQL还允许给表名起别名。这主要有两个方面:

  • 缩短SQL语句
  • 允许在单条SELECT语句中多次使用相同的表

表另名只在查询执行中使用。与列别名不一样,表别名不返回到客户机。

使用不同类型的联结

我们将内部联结或等值联结的简单联结。其他的三种其外联结,它们是自联结、自然联结和外部联结。

自联结

在单条SELECT语句中不止一次引用相同的表。

用自联结而不用子联结:自联结通常作为外部语句用来代替从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快的多。

自然联结

标准的联结返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,每个列只返回一次。

自然联结是这样一种联结,其中你只能悬着那些唯一的列。这一般是通过对表使用通配符(SELECT*),对所有其他表的列使用明确的子集完成的。

通配符只能对第一个表使用

外部联结

外部联结:联结包含了那些在相关表中没有关联行的行

语法结构

1
2
3
SELECT 全称列名1,全称列名2
FROM 第一个表格 LEFT OUTER JOIN 第二个表格
ON 条件(联结条件);

其中,OUT JOIN是来指定联结的类型的

在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT JOIN指出的是OUTER JOIN左边的表)

使用带聚集函数的联结

聚集函数可以与联结一起使用。

在SELECT语句中,可以使用COUNT()函数等等函数。

使用联结和联结条件

  • 注意所使用对的联结类型。一般我们使用内部联结,但使用外部联结也是有效的
  • 保证正确的联结条件,否则将返回不正确的数据
  • 应该总是提供联结条件,否则会得出笛卡尔而积(将返回所有列的结合)
  • 在一个联结中可以包含多个表,甚至对于每个联结可以采用不用的联结类型。虽然这样做是合法的,一般也是很有用的,但应该在测试他们前分别测试每个联结。

组合查询

多数的SQL查询都值包含从一个或多个表中返回数据的单条SELECT语句,MYSQL也允许执行多个查询,并将结果单一返回。这些组合查询通常称为并或符合查询

以下两种情况需要用到组合查询

  • 在单个查询中从不同的表返回类似结构的数据;
  • 对单个表执行多个查询,按单个查询返回数据。

组合查询和多个WHERE条件:组合相同表的两个查询完成的工作与具有多个WHERE子句条件的单条查询完成的工作相同。

创建组合查询

可用UNION操作符来组合数条SQL查询。利用UNION。可以给出多条SELECT语句,将他们的结果组合成的那个结果集。

使用UNION

UNION的使用方法:所需做得只是给出每条SELECT语句,在各条语句之间放上关键字UNION

语法结构

1
2
3
第一条SELECT语句
UNION
第二天SELECT语句;

注意:这样使用组合查询,返回的是两条SELECT语句可以返回的数据对的并集。

UNION规则

UNION的使用规则

  • UNION必须由两条或两条以上的SELECT语句组成,语句之间用关联词UNION分隔
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数
  • 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型

包含或取消重复的行

UNION从查询结果集中自动去除重复的行(换句话说,他的行为与单条SELECT语句中使用多个WHERE子句条件一样)。

如果想要返回所有的数据,使用UNION ALL而不是UNION

语法结构

1
2
3
第一条SELECT语句
UNION ALL
第二条SELECT语句;

对组合查询结果排序

在使用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。对于结果集,不存在用一种方式排序一部分,而有用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY子句。

如果要排序,在最后一个SELECT子句中使用

使用子查询

使用子查询

子查询

查询:任何SQL语句都是查询。但此术语一般指SELECT语句

利用子查询进行过滤

通过多重的子查询,可以实现从多个表格中调用其中的某些列

使用子查询的原理:在SELECT语句中,子查询总是从内向外处理。在处理上面的SELECT语句时,MySQL实际上执行了两个操作。

语法结构

1
2
3
4
5
6
SELECT 表格1中的列名
FROM 表格1
WHERE 列名 IN(
SELECT 表格2中的列名
FROM 表格2
WHERE 限制条件);

从上边的语法结构可以看出,子查询的套用就是用另一个SELECT子句来替换了WHERE子句的过滤的作用

格式化SQL:包含子查询的SELECT语句难以阅读和调试,特别是它们较为复杂时更是如此。如上所示把子查询分解为多行并且适当地进行缩进,能极大地简化子查询的使用。

在WHERE子句中使用子查询能够编写出功能很强并且很灵活地SQL语句。对于能嵌套的子查询的数目没有限制。

子嵌套的要求

列必须匹配,在WHERE子句中使用子查询应该保证SELECT语句具有与WHERE子句中相同数目的列。

作为计算字段使用子查询

相关子查询

涉及外部查询的子查询。这种类型的子查询称为相关子查询。任何时候只要列名可能有多义性,就必须使用这种语法。

  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信