Python学习笔记(二)

1  python语言中对象的类型和内存都是运行时确定的。在创建也就是赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型。


2  GAE 英文全称为 Google App Engine。它是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台,目前支持python、java和php开发

 

3.HTTPError: HTTP Error 403: Forbidden

import sys,urllib2

req = urllib2.Request("http://blog.csdn.net/nevasun")

fd = urllib2.urlopen(req)

while True:

    data = fa.read(1024)

    if not len(data): break

    sys.stdout.write(data)


 


这是由于网站禁止爬虫,可以在请求加上头信息,伪装成浏览器访问。添加和修改.这样爬下来的网页是乱码,网站是utf-8编码的,需要转换成本地系统的编码格式,因此要改两个地方:

import sys,urllib2
headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6)Gecko/20091201 Firefox/3.5.6'}  


req = urllib2.Request("http://blog.csdn.net/lotluck",headers=headers)
content = urllib2.urlopen(req).read()    ## UTF-8  

type = sys.getfilesystemencoding()    # local encode format  

print content.decode('UTF-8').encode(type)    # convert encode format  


 

 

4 https与http区别
HTTPS(Secure Hypertext Transfer Protocol):安全超文本传输协议,基于HTTP,使用安全套接层(SSL)作为HTTP应用的子层,HTTPS使用443端口,SSL使 用40 位关键字作为RC4流加密算法,HTTPS和SSL支持使用X.509数字认证。
http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方

也可以验证客户端的身份。
 1.https协议需要到ca申请证书,一般免费证书很少,需要交费
2.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
3.http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443
4.http的连接很简单,是无状态的
5.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

 


5.迭代器(iterator)有时又称游标(cursor)迭代器就是有一个next()方法的对象,而不是通过索引来计数的。当你或是一个循环机制(例如for语句)需要下一个项时,调用迭代器的next()方法就可以获得它。条目全部取出后,会引发

一个StopIteration异常,这并不是表示错误的发生,只是告诉外部的调用者,迭代完成。可以使用iter()函数来创建迭代器,另外还有一种就是自定义类。
>>> a = [122,221,333]
>>> b = iter(a)
>>> b.next()
122
>>> b.next()
221
>>> b.next()
333
>>> b.next()

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    b.next()
StopIteration
>>>


>>> lst = range(2)
>>> it = iter(lst)
>>> it
<listiterator object at 0x0000000002C5EBE0>
>>> it.next()
0
>>> it.next()
1


6.变量交换
>>> x = 6
>>> y = 5
>>> x,y = y,x
>>> x
5
>>> y
6


7.if…elif…else语句

例子:

# if elif else语句

score = raw_input("score:")

score=int(score)

if(score >= 90) and (score <= 100):

    print "A"

elif(score >= 80) and (score < 90):

    print "B"

elif(score >= 60) and (score < 80):

    print "C"

else:

    print "D"

 

8.实现switch语句的功能
Python并没有提供switch语句,Python可以通过字典实现switch语句的功能。实现方法分两步。首先,定义一个字典。字典是由键值对组成的集合。其次,调用字典的get()获取相应的表达式。

from __future__ import division

x = 1

y = 2

operator = "/"

result = {

    "+" : x + y,

    "-" : x - y,

    "*" : x * y,

    "/" : x / y

}

print result.get(operator)  

 


9.另一种使用switch分支语句的方案是创建一个switch类,处理程序的流程。

a)         创建一个switch类,该类继承自Python的祖先类object。调用构造函数init( )初始化需要匹配的字符串,并需要定义两个成员变量value和fall。Value用于存放需要匹配的字符串,fall用于记录是否匹配成功,初始值为false

,标识匹配不成功。如果匹配成功,程序往后执行。

b)        定义一个match( )方法,该方法用于用于匹配case子句。这里需要考虑三种情况:首先是匹配成功的情况,其次是匹配失败的默认case子句,最后是case子句中没有使用break中断的情况。

c)         重写__iter__( )方法,定义该方法后才能使switch类用于循环语句中。__iter__( )调用match( )方法进行匹配。通过yield保留字,使函数可以在循环中迭代。此外,调用StopIteration异常中断循环。

d)        编写调用代码,在for…in…循环中使用switch类。

例子:

class switch(object):

    def __init__(self, value):      # 初始化需要匹配的值value

        self.value = value

        self.fall = False           # 如果匹配到的case语句中没有break,则fall为true。

 

    def __iter__(self):

        yield self.match            # 调用match方法 返回一个生成器

        raise StopIteration         # StopIteration 异常来判断for循环是否结束

 

    def match(self, *args):         # 模拟case子句的方法

        if self.fall or not args:   # 如果fall为true,则继续执行下面的case子句

                                    # 或case子句没有匹配项,则流转到默认分支。

            return True

        elif self.value in args:    # 匹配成功

            self.fall = True

            return True

        else:                       # 匹配失败

            return False

 

operator = "+"

x = 1

y = 2

for case in switch(operator):        # switch只能用于for in循环中

    if case('+'):

        print x + y

        break

    if case('-'):

        print x - y

        break

    if case('*'):

        print x * y

        break

    if case('/'):

        print x / y

        break

    if case():                      # 默认分支

        print ""

 


10 字符串的连接
>>> nfc = ['11111111','22222222222']
>>> afc = ['33333333','44444444444']
>>> print nfc + afc
['11111111', '22222222222', '33333333', '44444444444']
>>> print str(1) + "dushuai"
1dushuai
>>> print '1' + "dushuai"
1dushuai
>>> print 1,'dushuai'
1 dushuai
>>>

 

11数值比较
>>> x = 2
>>> if 3 > x > 1:
 print x

 
2
>>> if 1 < x > 0:
 print x

 
2

 

12 同时遍历两个列表
>>> nfc  = ['111','222']
>>> afc  = ['333','444']
>>> for t1,t2 in zip(nfc,afc):
 print t1 + "vs."+ t2

 
111vs.333
222vs.444
>>>


13 遍历列表同时得出序号和内容

>>> tong = ["zhao","tong","tong","du","shuai","love","you"]
>>> for index ,team in enumerate(tong):
 print index,team

 
0 zhao
1 tong
2 tong
3 du
4 shuai
5 love
6 you
>>>

 

14. IDLE集成开发环境 内置函数成为BIF(built-in function) 在>>>的提示符下面输入pr或者其他,按下TAB就会出一组建议


15.python中的变量标识符没有类型,python在创建一个列表的就好像一个类似数组的数据结构来存储数据,数据项自上而下,有编号0,1,2,3。 。 。,列表中德数据可以像数组那样访问
   movie=["wo","hen","ni"]
   print movie[1]
用简单的一句话说,列表是一个打了激素的数组,里面可以混合数据类型


16 len(movie)测量长度,用for可以处理任意长度的列表,列表不支持越界检查
   for each_item in movie:   for循环会负责从列表起始位置开始
         print each_item

    coun=0;
    while count < len(movie):
   print(movie[count])
         count=count+1

 

17.列表里面可以嵌套
movie = ["The Holy Grail","The Life of Brain",["11111","22222",[44,55,66],"3333"],"The  meaning of Lif"]

for each_item in movie:
 print each_item    for循环只打印外列表的各个数据项

The Holy Grail
The Life of Brain
['11111', '22222', [44, 55, 66], '3333']
The  meaning of Lif


两次for循环
  for i in movie:
 if isinstance(i,list):
  for j in i:
   print j
 else:
      print i

     
The Holy Grail
The Life of Brain
11111
22222
[44, 55, 66]
3333
The  meaning of Lif

 


18 python模块放在哪里可以用一下代码 
  import sys;sys.path


19 range()BIF可以提供你需要的控制来迭代指定的次数

   for num in range(4)
 print num

 

20  模块是一个包含Python代码的文本文件,Python中都有自己的命名空间 end=‘’自动换行

 

21 Python中的BIF就是用来与文件交互,Python的基本输入机制是基于行的;

 

你可能感兴趣的:(python)