why 发表于 2018-8-6 06:31:03

Python3.5修炼手册11-duyuheng

  条件、循环和其他语句
  import的使用
  import的标准语法是:
  import module1[,module2[,...moduleN]]
  表示允许一个import导入多个模块,但是各个模块需要用逗号隔开。
  当解释器遇到import语句时,如果模块在当前搜索路径就会被导入。搜索路径是一个解释器,会先搜索所有目录的列表。
  python搜索路径由一系列目录名组成,python解释器会依次从这些目录中寻找引入模块。
  搜索路径是在python编译或安装时确定的,被存储在sys模块的path的变量中
  查看python默认搜索路径的方式如下:
importsys  
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]]
  例如:
frommath importpi  
print(pi)
  C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
  3.141592653589793
  上例语句就是从math模块中导入pi到当前命名空间,该语句不会将math整个模块导入。
  import和from做一个比较:(以math模块中的sin、exp、pi为例)
  import语句示例:
importmath  
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语句的好处如下:
importmath  
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 importpi  
print(pi)
  C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
  3.141592653589793
  从上面可以看出使用from语句后,可以直接访问pi对象,不需要加模块名
  from语句可以一个语句导入多个函数,多个函数之间用逗号分割。
  例如:
  from math importpi,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 importpi 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  
ifnum %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=  
z=
  
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(<)  
print(<)
  
print(==)
  C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
  True
  False
  True
  比较规则还适用于序列元素
  例如:
print(]<])  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 =  
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))
  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']
  
fori in range(len(student)):
  
    print(student,'的学号是',number)
  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())  
print(sorted('hello,world!'))
  
print(list(reversed('hello,world!')))
  
print(''.join(reversed('hello,world!')))
  C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
  
  ['!', ',', '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占位就会报错
页: [1]
查看完整版本: Python3.5修炼手册11-duyuheng