码迷,mamicode.com
首页 > 编程语言 > 详细

python3.5修炼手册11

时间:2017-09-01 09:45:50      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:别样的赋值   条件语句   语句块   import的使用   循环   

条件、循环和其他语句


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

标签:别样的赋值   条件语句   语句块   import的使用   循环   

原文地址:http://duyuheng.blog.51cto.com/12879147/1961531

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!