设为首页 收藏本站
查看: 897|回复: 0

[经验分享] python学习笔记(五)——语句

[复制链接]

尚未签到

发表于 2015-4-20 07:11:20 | 显示全部楼层 |阅读模式
                 语句(条件、循环和其他语句)
    之前一直在学习数据结构,单纯的结构并不能做什么事,只有组成语句之后才能实现比较复杂的功能,和其他语言一样,条件、循环是必不可少的。学习基本语句之前,先看一些其它知识。
  关于print:



>>> print 1,2,3  #print的参数不能构成一个元组
1 2 3
>>> 1,2,3
(1, 2, 3)
>>> print (1,2,3)
(1, 2, 3)
>>> print 'Age',22  #输出的每个参数之间插入了一个空格
Age 22
>>> name='jason'
>>> greeting='hello,'
>>> print greeting,name  #同时输出文本和变量值
hello, jason
  如果在结尾处加上逗号,那么接下来的语句会和前一条语句在同一行打印,如:



print 'hello,',
print 'world!'    #输出的结果为hello,world,注意这里要在脚本中运行
  关于模块导入:
  已经知道,导入模块的时候可以有以下几个方式:
  import module
  from module import function
  from module import function1,function2,.....
  from module import *
  可以使用as为整个模块或者函数提供别名:



>>> import math as m
>>> m.sqrt(4)
2.0
>>> from math import sqrt as S
>>> S(4)
2.0
  关于赋值:
  (1)、序列解包——将多个值的序列解开,然后放到变量的序列中



>>> x,y,z=1,2,3  #多个赋值操作可以同时进行
>>> print x,y,z
1 2 3
>>> x,y=y,x  #两个或多个变量交换
>>> print x,y,z
2 1 3
>>> values=1,2,3  #序列解包
>>> values
(1, 2, 3)
>>> a,b,c=values
>>> a
1
#当函数或者方法返回元组时,这个很有用,它允许返回一个以上的值并打包成元组
>>> seq={'name':'jason','phone':'34223'}
>>> key,value=seq.popitem() #获取popitem方法删除时返回的键值对
>>> key
'phone'
>>> value
'34223'
  注意:解包的序列中的元素数量必须和放置在赋值号=左边的变量数量完全一致
  (2)、链式赋值



>>> x=y=z=2  #则xyz的值均为2
>>> y=3
>>> x=y
>>> x
3
  (3)、增量赋值



>>> x=2
>>> x+=1
>>> x*=2
>>> x
6
>>> str='python'
>>> str*=2
>>> str
'pythonpython'
    在学习语句之前,我想说python中的缩进是个很坑爹的东西,它不仅仅是可读性那么简单了,少了或多了一个空格都是语法错误,而且很难排查,而且tab键也不太建议用,每个缩进是4个空格。因为python中的语句块不是通过大括号来区分的,所以就由缩进担当了这个大括号的角色,对它要求严格也很正常。
  条件和条件语句:
  (1)、布尔变量
    python中把空值和0也看作是false,总结下来,python中的假有如下几个:
  False,None,0,"",(),[],{}  即空字符串、空元组、空列表、空字典都为假。其它的一切都被解释器解释为真



>>> True
True
>>> False
False
>>> bool(0)
False
>>> bool("")
False
>>> bool(42)
True
>>> 0==0
True
  (2)、if、elif、else语句(注意缩进且最好作为脚本运行而不是在交互式环境下)



num=input('enter a number:')
if num>0:
print 'positive number'
elif num>> 'foo'=='foo'
True
>>> 'foo'=='oof'
False
>>> 'foo'!='oof'
True
    2)、is:同一性运算符(判断是否属于同一个对象,而不是值是否相等)



>>> x=y=[1,2,3]
>>> z=[1,2,3]
>>> x==y
True
>>> x==z
True
>>> x is y
True
>>> x is z
False
    再看一个例子,有意让x和y的值相等,看看它们是否属于同一对象



>>> x=[1,2,3]
>>> y=[2,4]
>>> x is not y
True
>>> del x[2]  #删除x中的元素3,即为[1,2]
>>> y[1]=1   #将y的第二个元素改为1,即为[2,1]
>>> y.reverse ()  #将y的元素倒序,即为[1,2]
>>> x==y
True
>>> x is y
False
   3)、in:成员资格运算符



>>> name
'jason'
>>> if 's' in name:
print 'your name contains the letter "s"'
else :
print 'your name doesn\'t contains the letter "s"'
your name contains the letter "s"
   4)、字符串和序列的比较



>>> "alpha">> 'Jzhou'.lower()=='JZHOU'.lower()
True
>>> [1,2]>> [2,[1,5]]>[2,[1,4]]
True
   5)、逻辑运算符(and,or)



>>> number=input('enter a number between 1 and 10:')
enter a number between 1 and 10:4
>>> if number =1:
print 'Great!'
else:
print 'wrong!'

Great!
  断言——当输入不符合条件时,可以用断言来解释,即在程序中置入检查点



>>> age=-1
>>> assert 0 x=1
>>> while x>> words=['this','is','an','egg']
>>> for word in words:
print word
this
is
an
egg
>>> numbers=[1,2,3,4,5,6,7,8,9]
>>> for num in numbers:
print num
  有个内建的迭代函数range,它类似于分片,包含下界,不包含上界



>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for num in range(1,5):
print num
  (3)、循环遍历字典元素



>>> d={'x':1,'y':2,'z':3}
>>> for key in d:
print key,'corresponds to',d[key]
y corresponds to 2
x corresponds to 1
z corresponds to 3
>>> for key,value in d.items ():  #这种用法很重要
print key,'corresponds to',value
y corresponds to 2
x corresponds to 1
z corresponds to 3
  常见迭代工具
  (1)、并行迭代



>>> names=['jzhou','jason','james']
>>> ages=[22,42,45]
>>> for i in range(len(names)):  #i是循环索引
print names[1],'is',ages,'years old'
jason is 22 years old
jason is 42 years old
jason is 45 years old
  内建的zip函数可以进行并行迭代,并可以把两个序列“压缩”在一起,然后返回一个元素的列表



>>> for name,age in zip(names,ages):  #在循环中解包元组
print name,'is',age,'years old'
jzhou is 22 years old
jason is 42 years old
james is 45 years old
# zip函数可以作用于任意多的序列,并且可以应付不等长的序列,最短的序列“用完”则停止
>>> zip(range(5),xrange(10000))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
#注意:这里最好不要用range,因为range函数一次创建整个序列,而xrange一次只创建一个数。当需要迭代一个巨大的序列时,无疑xrange更高效。即此例中,使用xrange,序列只创建前5个数,而使用range则创建10000个,而我们只需要5个
  (2)、翻转和排序迭代



>>> sorted([4,3,6,8,3])
[3, 3, 4, 6, 8]
>>> sorted('hello,python!')
['!', ',', 'e', 'h', 'h', 'l', 'l', 'n', 'o', 'o', 'p', 't', 'y']
>>> list(reversed ('hello,world!'))
['!', 'd', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'h']
>>> ''.join(reversed('Hello,world!'))
'!dlrow,olleH'
  reversed和sorted函数和列表的reverse和sort函数类似
  跳出循环
  (1)、break——退出循环



>>> from math import sqrt
>>> for n in range(99,0,-1):
root=sqrt(n)
if root==int(root):
print n
break
81
  设置range的步长(第三个参数)也可以进行迭代



>>> range(0,10,2)
[0, 2, 4, 6, 8]
  (2)、continue——跳出本次循环,继续下轮循环(不常用)
  列表推导式——轻量级循环(列表推导式是利用其它列表创建新列表)



>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  也可以在循环中加判断条件,如计算能被3整除的数的平方



>>> [x*x for x in range(10) if x%3==0]
[0, 9, 36, 81]
  也可以使用双重循环,太强大了



>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
  如果我们用普通方式实现上述的双重循环,则代码显得有点冗余



>>> result=[]
>>> for x in range(3):
for y in range(3):
result .append((x,y))
>>> result
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
  其它语句——pass,del,exec
  (1)、pass
    由于python中空代码块是非法的,所以在什么事都不用做到情况下,可以使用pass作为占位符。(注释和pass语句联合的代替方案是插入字符串,后面笔记会介绍文档字符串)
  (2)、del



>>> x=1
>>> del x  #del会移除一个对象的引用,也会移除名字本身
>>> x   #x被删除后,则不存在
Traceback (most recent call last):
File "", line 1, in
x
NameError: name 'x' is not defined
>>> x=['hello','world']
>>> y=x  #x和y指向同一个列表
>>> y[1]='python'
>>> x
['hello', 'python']
>>> del x  #删除x后,y依然存在,因为删除的只是名称,而不是列表本身的值
>>> y
['hello', 'python']
  (3)、exec
    用来执行储存在字符串或文件中的Python语句。



>>> exec 'a=100'
>>> a
100
>>> exec 'print "hello,world!"'
hello,world!
>>> h=['hello']
>>> w='world'
>>> exec ('h.append(%s)' % 'w')
>>> h
['hello', 'world']
  >>> str = "for i in range(0,5): print i"
>>> c = compile(str,'','exec')
>>> exec c
0
1
2
3
4
  (4)eval
    用来计算存储在字符串中的有效Python表达式。



>>> eval('2*3')
6
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58593-1-1.html 上篇帖子: python学习笔记(六)——函数 下篇帖子: python学习笔记(四)——数据字典
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表