首页 > 代码库 > Python程序控制结构---第三天笔记

Python程序控制结构---第三天笔记

类:数据+方法

变量名没有类型

对象才有类型

类型一旦确定,其可做的操作取决于此类型所支持的方法

. 号运算符

可调用属性:数据

返回一个数据,显示需要使用print语句

可调用方法:操作()

调用:执行一段代码

可调用对象:callable()

这么理解吧~~~

In [61]: def printName():

  ....:     print ‘hello‘

  ....:     

In [62]: callable(printName)

Out[62]: True

In [63]: callable(int)

Out[63]: True

列表:[]

元组:()

字典:{}

数值:


获取使用帮助:

获取对象支持的使用的属性和方法:dir()

某种方法的具体使用帮助:help()

获取可调用对象的文档字串:print obj.__doc__


*************集合:无序排列、可哈希*****************

支持集合关系测试

成员关系测试

in

not in

迭代

不支持:索引、元素获取、切片

集合类型:

set()

frozenset()

没有特定语法格式,只能通过工厂函数创建

In [86]: s1 = set([1,2,3])

In [87]: s1.

s1.add                          增加一个元素,可以是一个字串

s1.issubset

s1.clear                        

s1.issuperset

s1.copy       制作一份副本                   

s1.pop

s1.difference   求差集                

s1.remove

s1.difference_update            

s1.symmetric_difference 对称差,也可以^

s1.discard                     

s1.symmetric_difference_update

s1.intersection     交集,也可以用&             

s1.union 求并集

s1.intersection_update          

s1.update 合并两个集合,支持异构

s1.isdisjoint                   

In [87]: len(s1) 集合中的项数

Out[87]: 3


*************容器、类型、对象*****************

所有对象都有引用计数 sys.getrefcount

列表和字典都支持两种类型的复制操作:浅复制和深复制【deepcopy()】

python中的所有对象都是‘第一类的’,这意味着使用标识符命名的所有对象都具有相同的状态,于是,能够命名的所有对象都可以直接当数据直接处理

所有序列都支持迭代

所有序列都支持的操作和方法:

s[i]

s[i:j]

s[i:j:stride]

len(s)

min(s)

max(s)

sum(s)

all(s)

any(s)

s1 + s2 连接

s1 * N 重复

obj in s1 成员关系判断

obj not in s1

可变序列操作

s1[index] = value

s1[i:j] = t:切片赋值

del s1[index]

del s1[i:j]

del s1[i:j:stride]


*************表达式和语句*****************

常用的表达式操作符

+ -

* / //

逻辑运算

or and not

成员关系测试

in not index

对象实例测试

is not is

比较运算

< > <= >= == !=

位运算:

| & ^ << >>

一元运算

-x +x ~x

幂运算

x ** y

索引和分片

x[i], x[i,j], x[i,j,stride]

调用:

x(...)

取属性:

x.attribute

元组:()

序列:[...]

字典:{...}

三元选择表达式:x if y else z

匿名函数:lambda args:express

生成器函数发送协议:yield x


运算优先级:

(...), [...],{...}

s(i), s(i,j)

s.attribute

s(...)

一元运算

x ** y

*,/,//,%

+,-

<<,>>

&

^

|

<,<=,>,>=,==,!=

is,not is

in, not in

not

and

or

lambda

语句:

赋值语句

调用

print:

if/elif/else

for/else

while/else

pass:占位符

break:跳出最内层循环

continue:调到所处的最近层循环的开始处

return

yield

global:命名空间

raise:触发异常

import

from:模块属性访问

else代码块:循环终止才会执行,但是如果break终止的循环则不执行

class

try/except/finally:捕捉异常

del:删除引用

assert:调试检查

with/as:环境管理器

赋值语句:

隐式赋值:import,from,def,class,for,函数参数

元组和列表分解复制:当赋值符号(=)的左侧为元组或列表时,python会按照位置吧右侧的对象和左侧的目标自左而右逐一配对;个数不同时触发异常

l1 = (‘a‘,‘b‘,‘c‘)

x,y,z = l1

多重目标赋值

num1 = num2 = num3 = 44

增强赋值:+=, -=, *=, /=, //=, %=

流程控制结构

**************比较操作****************

python对象都支持比较操作

数字:通过大小比较

字符串:按照字母顺序

列表和元组:自左至右比较各部分内容

字典:对排序之后的(键,值)列表进行比较

python中的真假:

任何非0和数字和非空对象都为真

数字0和空对象以及特殊对象均为假

比较和相等测试会递归地应用于数据结构中

返回值为True和False

组合条件测试

x and y:与运算

x or y:或运算

not x:非运算


*************if : elif : else :*****************

In [11]: name = ‘jerry‘

In [13]: if name == ‘Tom‘:

   ....:     print "It si %s" %name

   ....: elif name == "hanmeimei":

   ....:     print "It is %s" %name

   ....: else:

   ....:     print "alien"

*************A = X if Y else Z 三元表达式*****************

In [14]: A = 7

In [15]: B = 9

In [16]: max = A if A > B else B

In [17]: print max

9

*************while : else:*****************

用于编写通用迭代结构

顶端测试为真即会执行循环体,并会重复执行测试直到为假

In [19]: url = ‘www.magedu.com‘

In [20]: while url:

   ....:     print url

   ....:     url = url[1:]

   ....:     

www.magedu.com

ww.magedu.com

w.magedu.com

.magedu.com

magedu.com

agedu.com

gedu.com

edu.com

du.com

u.com

.com

com

om

m

########

url = ‘www.magedu.com‘

while url:

    print url

url = url[:-1]

########

url = ‘www.magedu.com‘

x = 0

while url:

    print url

url = url[:-1]

x += 1 

if x < 7 :

   break

else:

    print "game over"

########

x = 0 ; y = 100

In [27]: while x < y :

    print x,

    x+=1

   ....:     

0 1 2 3 4 5 6 7 8 ... 98 99

########

练习1:逐一显示列表中的元素

In [46]: l1 = [‘z‘,‘c‘,‘v‘]

In [47]: len(l1)

Out[47]: 3

In [48]: i = 0

In [49]: while i < len(l1) :

   ....:     print l1[i]

   ....:     i += 1

   ....:     

方法2

In [51]: while l1:

   ....:     print l1[0]

   ....:     l1 = l1[1:]

   ....: 

逆序:

In [56]: while l1:

    print l1[-1]

    l1 = l1[:-1]

########

练习2:求100以内所有的偶数


########

练习3:逐一显示字典的所有键,并在最后说明总键数

In [59]: d1 = {‘x‘:1, ‘y‘:2, ‘z‘:3}

keyslist  = d1.keys() 生成key列表

valuelist = d1.values() 生成value列表

In [116]: while keylist:

    print keylist[0]

    keylist.pop(0)

########

练习4:创建一个包含100以内所有奇数的列表

In [132]: l1 = []

In [133]: i = 1

In [134]: while i < 100:

   .....:     l1.append(i)

   .....:     i += 2

   .....: else: 

   .....:     print l1

   .....:  

########

练习5:列表

l1 = [0,1,2,3,4,5,6] 

l2 = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]

以第一个列表中的元素为键,第二个列表中的元素为值生成字典d1

In [138]: i = 0

In [139]: d1 = {}

In [140]: while i < 7 :

   .....:     d1.update({l1[i]:l2[i]}) #也可以d1[l1[i]] = l2[i],给键值赋值

   .....:     i += 1

   .....: else:

   .....:     print d1

注意:可以在循环外加if语句判断列表的长度len()


########


*************for  in iterable: else:*****************

一个通用的序列迭代器,用于遍历任何有序的序列对象内的元素

可用于字符串、元组、列表和其他的内置可迭代对象,以及通过类所创建的新对象

########

url = "www.baidu.com"

for x in url:

    print x

########

In [24]: sum = 0

In [25]: for i in range(1,101): 也可以xrangge(1,101)

    sum += i

   ....: else: 

   ....:     print sum

   ....:     

5050

########

*************隐性迭代工具*****************

in成员关系测试

列表解析

map、reduce和filter函数


*************zip 并行遍历*****************

1. 取得一个或多个序列为参数,将给定的序列中并排的元素配成元组,

返回这些元组的列表

2. 可在for循环中用于实现并行迭代

3. 也常用于动态构造字典

####例子####

keys = [0,1,2,3,4,5,6] 

values = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]

D = {}

for (k,v) in zip(keys,values):

    D[k] = v

else:

    print D




本文出自 “linux-halt” 博客,请务必保留此出处http://loveall.blog.51cto.com/8658573/1873202

Python程序控制结构---第三天笔记