python3.5修炼手册11
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3.5修炼手册11相关的知识,希望对你有一定的参考价值。
条件、循环和其他语句
import的使用
import的标准语法是:
import module1[,module2[,...moduleN]]
表示允许一个import导入多个模块,但是各个模块需要用逗号隔开。
当解释器遇到import语句时,如果模块在当前搜索路径就会被导入。搜索路径是一个解释器,会先搜索所有目录的列表。
python搜索路径由一系列目录名组成,python解释器会依次从这些目录中寻找引入模块。
搜索路径是在python编译或安装时确定的,被存储在sys模块的path的变量中
查看python默认搜索路径的方式如下:
import sys print(‘python默认的搜索路径是:%s‘%sys.path)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
python默认的搜索路径是:[‘C:\\python.py‘, ‘C:\\python.py‘, ‘C:\\python\\python35.zip‘, ‘C:\\python\\DLLs‘, ‘C:\\python\\lib‘, ‘C:\\python‘, ‘C:\\python\\lib\\site-packages‘]
由上面可以到sys.path输出的是一个列表,第一项输出的是执行文件所在的目录,即python解释器的目录
除了import语句引入模块,还可以使用from语句引入模块。
from 语句可以从模块中导入指定部分到当前的命名空间。
form语法如下:
from modname import name1[,name[,...name]]
例如:
from math import pi print(pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
上例语句就是从math模块中导入pi到当前命名空间,该语句不会将math整个模块导入。
import和from做一个比较:(以math模块中的sin、exp、pi为例)
import语句示例:
import math print(math.pi) print(math.sin(1)) print(math.exp(1))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
0.8414709848078965
2.718281828459045
从上面可以看出import导入math模块后里面的函数是可以输出的
from语句示例:
from math import pi print(pi) print(sin(1))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
Traceback (most recent call last):
3.141592653589793
File "C:/python.py/tiaojianxunhuanyuju.py", line 9, in <module>
print(sin(1))
NameError: name ‘sin‘ is not defined
从上面可以看出from语句指定math模块的pi函数后math中的其他函数是无法输出的
使用from语句的好处如下:
import math print(math.pi) print(pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
Traceback (most recent call last):
3.141592653589793
File "C:/python.py/tiaojianxunhuanyuju.py", line 9, in <module>
print(pi)
NameError: name ‘pi‘ is not defined
从上面可以看出使用impot语句导入math模块时访问pi对象,需要使用math.pi否则会报错
from math import pi print(pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
从上面可以看出使用from语句后,可以直接访问pi对象,不需要加模块名
from语句可以一个语句导入多个函数,多个函数之间用逗号分割。
例如:
from math import pi,sin,exp
也可以将模块中的所有函数导入。
例如:
from math import *
注意:在实际开发环境中from语句不建议过多使用,不利于编写清晰、简单的代码。只有想从给定模块导入所有功能时才使用这种方式。
import语句给模块取别名
例如:
import math as m print(m.pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
给模块取别名的方式为:在导出模块的语句末尾增加一个as子句,as后面跟上别名名称。
from语句给模块取别名同上
例如:
from math import pi as p print(p)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
使用逗号输出
使用逗号输出示例:
name=‘杜宇恒‘ print(‘我叫:‘,name)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
我叫: 杜宇恒
还可以使用逗号输出多个表达式,只要将多个表达式用逗号隔开即可!
aa = ‘大家好!‘ bb = ‘我叫杜宇恒,‘ cc =‘来自北京。‘ print(aa,bb,cc)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
大家好! 我叫杜宇恒, 来自北京。
别样的复赋值
序列解包
多个赋值操作同时进行。
例如:
x,y,z = 1,2,3 print(x,y,z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
1 2 3
交换两个或多个变量的值。
x,y,z = 1,2,3 x,y = y,x print(x,y,z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
2 1 3
上例的输出结果可以看出x和y的值交换了
在python中,交换所做的事情叫做序列解包(sequence unpacking)或可选迭代解包,即将多个值的序列解开,然后放到变量序列中。
例如:
num = 1,2,3 print(‘原始值:‘,num) x,y,z = num print(‘获得序列解开的值(x):‘,x) print(‘获得序列所有解开的值:‘,x,y,z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
原始值: (1, 2, 3)
获得序列解开的值(x): 1
获得序列所有解开的值: 1 2 3
可以使用popitem方法将键-值作为元组返回,返回元组可以直接赋值到两个变量中。
例如:
student = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘} key,value=student.popitem() print(key) print(value)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
name
杜宇恒
序列解包允许函数返回一个以上的值并打包成元组,然后通过一个赋值句进行访问。
注意:解包序列中的元素数量必须和放置在赋值符号"="左边的数量必须完全一致。
链式赋值
通过多个等式为多个变量赋同一个值,这种方法叫做链式赋值。
例如:
x=y=z=10 print(x) print(y) print(z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
10
10
10
链式赋值是将同一个值赋值给多个变量。
也可以单独赋值
例如:
x=10 y=x print(y)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
10
单独赋值相比较链式赋值,显然链式赋值更简洁。
增量赋值
将表达式放置在赋值运算符(=)的左边(如将x=x+1写成x+=1),这种写法就叫做增量赋值(Augemented Assignment)。
这种写法对 + - * / % 等标志运算符都适应。
例如:
x=5 x+=1 print(‘加‘,x) x-=2 print(‘减‘,x) x*=2 print(‘乘‘,x) x/=4 print(‘除‘,x)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
加 6
减 4
乘 8
除 2.0
使用增量赋值相对赋值操作看上去更简洁。
增量赋值除了适用于数值类型,还适用于二元运符的数据类型。
例如:
name=‘杜宇恒,‘ name+=‘666‘ print(name) name*=2 print(name)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
杜宇恒,666
杜宇恒,666杜宇恒,666
语句块
在python中,冒号(:)用来标识语句块的开始,语句块中每一个语句都需要缩进(缩进量相同)。当退回到和已经闭合的块一样的缩进量时,表示当前语句块已经结束。
条件语句
if语句
if的基本用法
例如:
greeting = ‘hello‘ if greeting == ‘hello‘: print(‘hello‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
hello
如果条件(在if冒号之间的表达式)判定为真,后面的语句块就会被执行:如果条件判定为假,语句块就不会被执行。
if语块可以由多条语句组成,编写过程中要注意保持语句的缩进一致。
例如:
greeting = ‘hello‘ if greeting == ‘hello‘: student={‘杜宇恒‘:‘666‘,‘高爽‘:‘777‘,‘徐伟‘:‘888‘,‘杜兆利‘:‘999‘} print(‘字典中的元素有%d个‘%len(student)) student.clear() print(‘字典删除后元素的个数为:%d个‘%len(student))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
hello
字典中的元素有4个
字典删除后元素的个数为:0个
if语句的条件判定除了使用==外,还可以使用>(大于)、<(小于)、>=(大于等于)、<=(小于等于)等条件表示符大小关系。
还可以使用各个函数或方法返回值作为条件判定。
else子句
else的基本用法
例如:
greeting = ‘hi‘ if greeting == ‘hello‘: print(‘hello‘) else: print(‘该语句块不在if中,greeting的值不是hello‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
该语句块不在if中,greeting的值不是hello
这段程序加入了一个新的条件子句——else子句,之所以叫子句,是因为else不是独立语句,只能做为if语句的一部分。使用else子句可以增加一种选择。
注意:在else子句后面没有条件判定
elif子句
elif子句的基本用法
例如:
num = 10 if num > 10: print(‘num的值大于10‘) elif 0 <=num<=10: print(‘num的值介于0到10之间‘) else: print(‘num的值小于0‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
num的值介于0到10之间
由输出结果可知,这段程序执行的是elif子句中的语句块,即elif子句的条件判定结果为true,所以执行这个子句后的语句块。
elif需要和if、else子句联合使用,不能独立使用,并且必须以if语句开头,可以选择是否以else子句结尾。
嵌套代码块
嵌套代码块嵌套代码块就是把if,else、elif等条件语句再放入if、slse、elif条件语句块中,作为深层次的条件判定语句。
嵌套代码块的基本用法
例如:
num = 10 if num %2 == 0: if num %3 == 0: print("你输入的数字可以整除2和3") elif num % 4 == 0: print("你输入的数字可整除2和4") else: print("你输入的数字可以整除2,但不能整除3和4") else: if num % 3 == 0: print("你输入的数字可以整除3,但不能整除2") else: print("你输入的数字不能整除2和3")
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
你输入的数字可以整除2,但不能整除3和4
由上例可以看出在if语句的语句块中还存在if语句、语句块以及else子句,else子句的语句块中也可以存在if语和else子句。
is
is:同一性运算符
is的基本用法
例如:
x=y=[1,2,3] z=[1,2,3] print(x==y) print(x==z) print(x is y) print(x is z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
True
True
True
False
从上例可以可看出x和z相等确不相同。这是应为变量x和y被绑定在同一个列表上,而变量z被绑定在另外一个具有相同数值和顺序的列表上。它们的值可能相等,却不是同一个对象。
使用==运算符判定两个对象是否相等,使用is判定两个对对象是否相同(是否为同对象)。
比较字符串和序列
对列表进行比较操作
例如:
print([1,2]<[2,1]) print([1,2]<[1,2]) print([1,2]==[1,2])
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
True
False
True
比较规则还适用于序列元素
例如:
print([2,[1,2]]<[2,[1,3]])
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
True
布尔运算符
and运算符用于连接两个布尔值,并在两者都为真值是返True,否则返回假。
例如:
num = 10 if num <=10 and num>=5: print(‘num的值在5到10之间‘) else: print(‘num的值不在5到10之间‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
num的值在5到10之间
与and同类的还有or和not连个运算符
布尔值的特性:只有在需要求值时才求值。
布尔运算符通常被称为逻辑运算符,种行为同样适用于or。比如说在表达式x or y 中, x为真时直接返回x的值,否则返回y的值。这意味着在布尔运算符后面的代码都不执行。
断言
使用断言时需要注意注意以下几点:
①assert断言是用来声明某个条件是真的。
②如果你非常确信你使用的列表中至少有一个元素,想要检验这一点,并在它非真时引发一个错误,那么assert语句是应用在这种情形下的理想语句。
③assert语句失败时,会引发一个AssertionError。
例如:
x=3 assert x > 0,‘x is not zero or negative‘ #提示x不是偶数 assert x % 2 ==0,‘x is not an even number‘
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
Traceback (most recent call last):
File "C:/python.py/tiaojianxunhuanyuju.py", line 8, in <module>
assert x % 2 ==0,‘x is not an even number‘
AssertionError: x is not an even number
由上例可以看出,当assert后面的条件为真是,程序正常运行;当assert后面的条件为假时,输出错误信息,错误信息的提示是自定义的,这个错误提示信息可以称为异常参数。assert的异常参数是在断言表达式后添加的字符串信息,用来解释断言并更容易知道问题出在哪里。
循环
while循环
while循环的基本语法如下:
while 判断条件:
执行语句......
执行语句可以是单个语句或语句块。判断条件可以是任何表达式,所有非零、非空(null)的值都为真(True)。当判断语句为假(False)时,结束循环。
小例子:
使用简单的程序输出1~5所有的数字如下:
n=1 while n < 6: print("当前数字是:",n) n+=1
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4
当前数字是: 5
for循环
for循环的语法格式如下:
for iterat_var in sequence:
statements(s)
sequence是任意序列,iterat_var是序列中需要遍历的元素。statements是待执行的语句块。
对字符串进行for循环:
for letter in ‘good‘: print(‘当前字母‘,letter)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
当前字母 g
当前字母 o
当前字母 o
当前字母 d
对数字序列进行for循环
number =[1,2,3] for num in number: print(‘当前数字‘,num)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
当前数字 1
当前数字 2
当前数字 3
对字典进行for循环
name = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘} for tup in name: print(‘%s:%s‘%(tup,name[tup]))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
name:杜宇恒
number:666
循环遍历字典元素
使用items方法将键-值对作为元组返回。
例如:
name = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘} for key,value in name.items():
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
name:杜宇恒
number:666
字典中的元素是没有顺序的。也就是说,迭代字典中的键和值都能保证被处理,但是处理顺序不确定,这也是用for循环输出字典中的元素时不按照顺序输出的原因;
迭代工具
并行迭代:
程序可以迭代两个序列。
例如:
student =[‘duyuheng‘,‘xuwei‘,‘gaoshuan‘] number = [‘666‘,‘777‘,‘888‘] for i in range(len(student)): print(student[i],‘的学号是‘,number[i])
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
duyuheng 的学号是 666
xuwei 的学号是 777
gaoshuan 的学号是 888
在上例中程序中,i是循环索引的标准变量名。
还可以使用内建的函数zip来进行并行迭代,把两个序列合并在一起,返回一个元组的列表。
例如:
student =[‘duyuheng‘,‘xuwei‘,‘gaoshuan‘] number = [‘666‘,‘777‘,‘888‘] for name,num in zip(student,number): print(name,‘的学号是:‘,num)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
duyuheng 的学号是: 666
xuwei 的学号是: 777
gaoshuan 的学号是: 888
zip函数可以运作于任意数量的序列,并且可以应付不等长的序列,当短序列"用完"时就会停止。
例如:
for num1,num2 in zip(range(3),range(100)): print(‘zip键值对为‘,num1,num2)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
zip键值对为 0 0
zip键值对为 1 1
zip键值对为 2 2
由输出结果可以看出,zip函数以短序列为准,当短序列遍历结束时,for循环就会结束遍历。
翻转和排序迭代
reversed和sorted这两函数可作用于任何序列或迭代对象,但不是原地修改对象,而是返回翻转或者排序后的版本。
例如:
print(sorted([2,3,4,1,5])) print(sorted(‘hello,world!‘)) print(list(reversed(‘hello,world!‘))) print(‘‘.join(reversed(‘hello,world!‘)))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
[1, 2, 3, 4, 5]
[‘!‘, ‘,‘, ‘d‘, ‘e‘, ‘h‘, ‘l‘, ‘l‘, ‘l‘, ‘o‘, ‘o‘, ‘r‘, ‘w‘]
[‘!‘, ‘d‘, ‘l‘, ‘r‘, ‘o‘, ‘w‘, ‘,‘, ‘o‘, ‘l‘, ‘l‘, ‘e‘, ‘h‘]
!dlrow,olleh
由输出结果可以看到,sorted函数返回的是一个列表, reversed函数返回的是一个可迭代对象。在for循环和join方法中使用不会有任何问题。如果需要对这两个函数使用索引、分片及调用list方法,就可以使用list类型转换返回对象。
跳出循环
break
break语句用来终止循环语句,即使循环条件中没有False条件或序列还没有遍历完,也会停止执行循环语句。
break语句用在while和for循环中。
如果使用嵌套循环,break语句就会停止执行最深层的循环并开始执行下一行代码.
当遇到break语句时,无论什么条件,都跳出这个循环。
例如:
#for示例 for letter in ‘hello‘: if letter ==‘l‘: break print(‘当前字母为:‘,letter) #while循环 num = 10 while num > 0: print(‘输出数字为:‘,num) num -= 1 if num == 8: break
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
当前字母为: h
当前字母为: e
输出数字为: 10
输出数字为: 9
for 循环示例可以看出,输出语句输出循环遍历到的字符,遇到指定字符时,跳出for循环。
使用while做条件判定时,在语句块中输出满足条件的数字,当数字等于指定数字时,跳出while循环,不再继续遍历。
continue
continue语句用来告诉python跳过当前循环剩余语句,然后继续进行下一轮循环。
当执行过程中遇到continue语句时,无论执行条件是真还是假,都要跳出这次循环,进入下一次循环。
例如;
#for示例 for letter in ‘hello‘: if letter == ‘l‘: continue print(‘当前字母:‘,letter) #while示例 num = 3 while num > 0: num -= 1 if num == 2: continue print(‘当前变量值:‘,num)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
当前字母: h
当前字母: e
当前字母: o
当前变量值: 1
当前变量值: 0
由上例可以看出,相比break语句,使用continue语句知识跳过一次循环,不会跳出整个循环。
循环中的else子句
在while循环中使用else语句
在while条件语句为False时,执行else的语句块。
例如:
num = 0 while num < 3: print(num,"小于 3") num += 1 else: print(num,"大于或等于3") print("结束循环!!!")
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
0 小于 3
1 小于 3
2 小于 3
3 大于或等于3
结束循环!!!
从输出结果可以看到,while循环结束后执行了else语句中的语句块,输出了"3大于或等于3"语句。
在for循环中使用else语句
在for如条件语句为False或者结束后没有被break中断时,执行else的语句块。
例如:
names = [‘duyuheng‘,‘duzhaoli‘] for name in names: if name =="du": print(‘名称:‘,name) break print("循环名称列表"+name) else: print("没有循环数据!") print("结束循环!")
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
循环名称列表duyuheng
循环名称列表duzhaoli
没有循环数据!
结束循环!
由输出条件看到,for循环结束后执行else语句块中的内容。
pass语句
python中pass是空语句,作用是保持程序结构的完整性。
pass语句的基本用法:
name = ‘duyuheng‘
if name == ‘duyuheng‘:
print(‘hello‘)
elif name == ‘duzhaoli‘:
pass
else:
print(‘nothing‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
hello
上例如果不使用pass占位就会报错
本文出自 “duyuheng” 博客,谢绝转载!
以上是关于python3.5修炼手册11的主要内容,如果未能解决你的问题,请参考以下文章