赋值语句

赋值语句用赋值运算符=来实现。赋值语句有一些特殊的使用技巧。

序列解包

多个赋值操作可以同时进行。也可以交换两个或者多个变量。事实上,这里所做的事情叫做序列解包或者叫递归解包——将多个值的序列揭开,然后放到变量的序列中。popitem方法将键-值作为元组放回。

>>> scoundrel={'name':'Robin','girlfriend':'Marioon'}
>>> key,value=scoundrel.popitem()
>>> key
'name'
>>> value
'Robin'

Python还可以链式赋值。也可以进行增量赋值。


条件语句

语句块

语句块并不是一种语法。语句块适当条件为真时执行或执行多次的一组语句。在代码前放置空格来缩进语句即可创建语句块。块中的每行都要缩进形同的量。在Python中,冒号用来表示语句块的开始,块中的每个语句都是缩进的(缩进的量相同)。当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束。

布尔变量

下面的值在作为布尔表达式的时候,会被编译器看作是假(false):

FalseNone0""()[]{}

除去上面的表达式之外的其他表达式在作为布尔表达式的时候都为真。bool函数可以用来转换其他值为布尔值。

条件执行和if语句

一个例子if-else

name=raw_input('What is your name ?')
if name.endswith('Gumy'):
    print('Hello,Mr.Gumy!')
else:
    print('Hello,stranger!')

语句elif

elif是else-if的缩写。如下例:

num=raw_input('Enter a number:')
if num>0:
    print('This is a positive number.')
elif num==0:
    print('This number is zero.')
else:
    print('This is a negative numeber.')

嵌套

name=raw_input('what is your name?')
if name.endswith('Gumy'):
    if name.startswith('Mr.'):
        print('Hello,Mr.Gumy')
    elif name.startwith('Mrs.'):
        print('Hello,Mrs.GGumy')
    else:
        print('Hello,Gumy')
else:
    print('Hello,stranger')

条件运算符

  • 比较运算符
表达式 描述
x==y x等于y
x x小于y
x<=y x小于或等于y
x>y x大于y
x>=y x大于或等于y
x!=y x不等于y
x is y x和y是同一个对象
x is not y x和y不是同一个对象
x in y x是y容器(序列、字典)的成员
x not in y x不是y容器的成员

分析:==is是两个不同的运算,==用来判断两个表达式的值是否相等,而is用来判断两个表达式是否是同一个对象(相同的内存)。如下例:

>>> x=[1,2,3]
>>> y=[2,1]
>>> x==y
False
>>> del x[2]
>>> y.reverse()
>>> x==y
True
>>> x is y
False

字符串和序列也可以比较,他们是按照字母顺序排列进行比较(一个字母的顺序值可以用ord函数查到,ord函数和chr函数的功能相反)。如:

>>> 'alpha'<'beta'
True

其他的序列也可以用同样的方式比较,不过比较的不是字符而是其他类型的元素。如果一个序列中包含其他序列元素,比较规则也同样适用于序列元素。

>>> [1,2]<[2,1]
True
>>> [1,2]>[1,3]
False
>>> [1,[2,[3,4]]]>[2,1]
False
  • 布尔运算符

    所有的返回值都可以看作是布尔值,所有表达式也都返回布尔值。and运算符就是所谓的布尔运算符。它连接两个布尔值,并且只有当两个布尔值都为真时,表达式才为真。另外两个布尔运算符是ornotor表示或者,当两边值都为假是才为假。not表示非,表示取与运算表达式真值相反的值。

    布尔运算符有一个有趣的特性:只有在需要求值是才进行求值。

    x or y当x为真时返回x的值,否则返回y的值。

    x and y当x为假时返回x的值,否则返回y的值。

    上面这种运算方式被称为逻辑短路(short-circuit logic)或惰性求值(lazy evaluation)。

  • 一个重要的表达

    a if b else c

    如果b为真,就返回a,否则返回c.


循环

while语句

while语句非常灵活,它可以用来在任何条件为真的情况下反复执行一个代码块。

sum=0
x=1
while x<=100:
    sum=sum+x
    x+=1
print(sum)

for循环

有时候要求按照一定次数迭代,这个时候要用for来实现。(当然,利用while也是可以做到的。)如果能用for循环,就尽量不用while循环,这是因为for循环的语法更简洁。

words=['this','is','an','ex','parrot']
for word in words:
    print(word)

for number in range(1,101):
    print(number)

d={'x':1,'y':2,'z':3}
for key in d:
    print(key,'corresponds to',d[key])

字典中项的顺序是不确定的,在字典循环的时候,可以保证所有的项都可以被循环,但是循环的顺序确实不确定的。上面的例子就说明了这点。

迭代工具

python中有很多很好的用于序列迭代的函数,这些函数位于itertool模块中。

  • 并行迭代

    程序可以同时迭代两个序列。这可以通过程序来实现,也可以直接利用zip函数来实现。如下:

names=['anne','betah','aymi','cocoa']
ages=[12,23,34,45]
aaa=zip(names,ages)
for name,age in aaa:
    print(name,'is',age,'Years sld')
  • 按索引迭代

    enumerate函数可以在提供索引的地方迭代索引-值对。

    for index,string in enumerate(strings):
     if 'XXX' in string:
         strings[index]='[censored]'   
  • 翻转和排序迭代

    reversed和sorted函数作用在任何序列或可迭代对象上,不是原地的修改对象,而是返回翻转或排序后的版本。

    >>> sorted([4,3,6,8,9])
    [3, 4, 6, 8, 9]
    >>> sorted('Hello,world!')
    ['!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
    >>> list(reversed('Hello,world!'))
    ['!', 'd', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'H']
    >>> ''.join(reversed('Hello,world!'))
    '!dlrow,olleH'

跳出循环

一般来说,循环会一直执行到条件为假,或者序列元素用完时。但是有时候可能会需要中断一个循环,进行新的迭代,这个时候就需要跳出循环。

break

break用来跳出循环,执行循环后面的语句。

from math import sqrt
for n in range(99,0,-1):
    root=sqrt(n)
    if root==int(root):
        print(n)
        break
continue

continue用来结束当前迭代,进行下一步迭代。他的意思是:跳出剩余的循环体,但是不结束循环。

 for x in seq:
    if not(condition1 or condition2 or condition3):
        do_something()
        do_something_else()
        do_another_thing()
        etc()xxxxxxxxxx 
while true/break语句
while True:
    word=input('Please enter a word:')
    if not word:break
    print('The word was:',word)

while true部分实现了一个永远不会停止的循环,但是在内部if语句的条件成立的时候会停止。

循环中的else子句
from math import sqrt
for n in range(99,81,-1):
    root=sqrt(n)
    if root==int(root):
        print(n)
        break
else:
    print('I didn\'t find it.')

for、while循环中都可以使用continue、if、else、break语句。

轻量级循环——列表推到

列表推倒式是利用其他列表创建新列表的一种方式。它的工作原理类似与for循环。

>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> [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)]

>>> girls=['alice','berce','bob']
>>> boys=['chrits','arnold','clarice']
>>> [b+'+'+g for b in boys for g in girls if b[0]==g[0]]
['arnold+alice']

pass、del、exec

  • pass程序什么都不用做,而让程序通过。
  • del不仅移除一个对象的引用,也会移除对象本身。 注意,这里删除的是名称,而不是内存。所以,当有两个或者以上的名称指向同一块内存时,删除其中一个或者几个名称,并不会删除内存(值)本身。
>>> x=1
>>> del x
>>> x
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'x' is not defined

>>> x='hello,world!'
>>> y=x
>>> x
'hello,world!'
>>> del x
>>> y
'hello,world!'

小结

  • 打印 print语句打印多个表达式时可以分别用逗号隔开。
  • 导入 有些时候可以利用import...as...来进行函数的局部重命名。
  • 赋值 通过序列解包和链式赋值功能,多个变量值可以一次性赋值,通过增量赋值可以原地改变变量。
  • 块是通过缩排使语句成组的一种方法。它可以在条件或者循环语句中使用。块也可以在函数或者类中使用。
  • 条件 条件语句可以通过判断条件的真假来决定一个语句到底是执行还是不执行。几个条件语句可以串联使用,也可以嵌套使用。还有一个条件表达式 a if b else c.
  • 断言 断言就是肯定事物为真。
  • 循环 在条件为真的时候不断的执行某一语句块。可以配合continue、break、if、else等语句使用。
  • 列表推倒式 它不是真正的语句,而是看起来像for循环的表达式。通过列表推导式可以通过已知的列表产生新列表。

Python学习记录4(语句)的更多相关文章

  1. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  2. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  3. Python学习记录day8

    目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...

  4. Python学习记录day7

    目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...

  5. Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  6. 实验楼Python学习记录_挑战字符串操作

    自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...

  7. 我的Python学习记录

    Python日期时间处理:time模块.datetime模块 Python提供了两个标准日期时间处理模块:--time.datetime模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...

  8. Python学习(3)——if语句

    虽然在之前接触过C.C++.Java等,但是还是觉得Python写出来的好看o(≧v≦)o~,简洁明了! score = raw_input("score:") score=int ...

  9. python学习之条件语句(if循环)

    Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块.可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为tru ...

  10. python 学习笔记 if语句

    一.if语句的格式 语句块必须有相同的缩进. 语句块必须比if,elif,else多一层缩进 # 如果条件成立则执行语句块1, # 否则 如果条件2成立则执行语句块2 # 其他情况执行语句块3 # e ...

随机推荐

  1. Mac 下nginx 环境的配置

    这个是在度娘那里学来的. 因为是使用brew所以先安装: 安装命令如下:curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo ...

  2. python所有的魔术方法

    据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...

  3. python进阶05 常用问题库(1)json os os.path模块

    python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...

  4. Jaspersoft Studio简介

    参考来源:https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v640/introduc ...

  5. C. Epidemic in Monstropolis

    http://codeforces.com/contest/733/problem/C 一道很恶心的模拟题. 注意到如果能凑成b[1],那么a的前缀和一定是有一个满足是b[1]的,因为,如果跳过了一些 ...

  6. Batch梯度下降

    1.之前讲到随机梯度下降法(SGD),如果每次将batch个样本输入给模型,并更新一次,那么就成了batch梯度下降了. 2.batch梯度下降显然能够提高算法效率,同时相对于一个样本,batch个样 ...

  7. vue之store中属性更新用法

    //1.首先定义store对象下的属性 state: { data:'测试数据' } // 2.定义更改data数据的方法 mutations: { updatedata(state, p) { st ...

  8. Oracle中文乱码,字符集问题处理

    1. 右键计算机,选择属性,增加环境变量 NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2.进入注册表,依次单击HKEY_LOCAL_MACHINE --> ...

  9. nodejs 实践:express 最佳实践(五) connect解析

    nodejs 实践:express 最佳实践(五) connect解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需 ...

  10. 投资20万研发的JFinal项目《旅游线路营销管理系统》准备公开课中

    18年初上线了一套旅游营销管理系统,目前给几个合作客户内测试用,是基于JFinal研发的一套旅游行业旅游线路批发零售系统(SAAS)版. 系统终端: PC后台管理分:总部.线路批发商.旅行社门店.个人 ...