Python的一些学习笔记

来源:互联网 发布:windows office 密钥 编辑:程序博客网 时间:2024/04/30 12:44

1、安装Python

Linux/BSD:很爽,不用考虑安装,因为大多Linux/BSD系统都已安装好了Python,判断是否安装$Python-V

Windows:到Python上下载就是了,最新版3.1,不过建议下载3.01。安装跟普通程序安装没区别。

在系统变量中Path中添加Python的安装路径(如:C:\Python30)

2、Python的3.x系列不再向下对2.x系列的兼容

今天下载了Python3.01,发现最简单的一个helloworld程序都无法通过,原来在3.X中print语句被相应print函数替代了,类似的还有exec语句,改为exec()函数。

按照Python的创始人Rossum说法:一直以来,除非要打破向后兼容性,否则很多缺陷和错误都无法修复。因此,Python3000将会作为第一个放弃向后兼容性的Python版本,目的就是要让Python向着最好的语言前进。

具体可以看http://www.infoq.com/cn/news/2009/03/Python-3.0

3、Python 3.0的新特性

Guido说Python3.0最出色的特性便是,“对Unicode的更好的支持,对各种'垃圾'进行清理”。而其中对unicode的全面支持则是变革的一个主要方面。Guido写到:

所有的文本都是Unicode;然而,编码过的Unicode的会以二进制的数据来表示……基于这个哲学来修改的结果是,只使用Unicode的代码清爽了许多,编码和二进制数据都需要为此做出修改。这个修改是正面的,因为在2.x的世界里,大量的bug都是因为以编码的文本和未编码的文本混杂在一起而产生的。

尽管Python2.x也支持Unicode,但是它是通过一个(旧有的)str类型和一个(新的)unicode类型来实现的。在Python3.0之中,所有的字符串都是unicode的(str就是unicode字符串),并引入了一个叫做bytes的新类型来处理字节序列。

Python 3.0的其他修改包括:

  • Print是一个函数 ─ print语句已经被一个print()函数所替代。通过关键字参数来替代旧有print语句绝大多数的特殊语法(可以在Python2.6中通过from __future__ import print_function来进行试验)。更多请参阅PEP 3105 ─让print变为函数。
  • 用迭代器来替代列表 ─一些知名的API将不再返回列表。而字典的dict.iterkeys()、dict.itervalues()和dict.iteritems()方法将会移除,而你可以使用.keys()、.values()和.items(),它们会返回更轻量级的、类似于集合的容器对象,而不是返回一个列表来复制键值。这样做的优点是,可以直接在键和条目上进行集合操作,而不需要再复制一次。
  • 整型数 ─移除了含糊的除法符号('/'),而只返回浮点数。在以前的版本中,如果参数是int或者是long的话,就会返回相除后结果的向下取整(floor),而如果参数是float或者是complex的话,那么就会返回相除后结果的一个恰当的近似。在2.6版本中可以通过from__future__ import division来启用这项特性。更多请参阅PEP 238 ─修改除法操作符。
  • 大量的语法修改

   更多资料可以看

   Python 3 的新特性

   Python 3.0 抢“鲜”体验

4、字符串

自然字串 r"Helloworld \n"。如果要让某些特殊字符不被特殊处理,而是按它本来的面目显示,如常用的'\n'就是显示'\n',而不是被处理为换行符。

5、Python shell 技巧

tab键 可以实现命令补全

在windows环境下 按 alt + p、alt + n 可以实现命令历史的向前向后浏览。

6、Python中一切都是对象

Python万物皆对象。字符串是对象。列表是对象。函数是对象。甚至模块也是对象。

7、Python的代码块

Python语法中有个比较特别的地方就是python的代码块,Python代码块(“代码块”是指:函数、if语句、for 循环、while循环,等等)是通过缩进来定义的。开始缩进表示块的开始,取消缩进表示块的结束。不像其他语言有明显的括号,大括号或关键字(如begin...end)来指示,这意味着空白是重要的,并且要一致。

  如果我们平常对写代码时,对代码的缩进没有养成习惯的话。刚才开始我们可能不大习惯python这样子界定代码块的方式,但是你今后会发现它的好处的。一个主要的好处就是所有的Python 程序看上去都差不多,因为缩进是一种语言的要求而不是一种风格。这样就使得阅读和理解他人的Python 代码容易得多。

8、字符串的格式化

Python的字符串的格式化跟 C 类似,它甚至不仅仅是格式化。它也是强制类型转换。Python中的字符串格式化是一把瑞士军刀。它有丰富的选项,不同的格式化格式符和可选的修正符可用于不同的数据类型。

>>> print "A:%-.3f" % 1.5
A: -1.500
9、连接 list 与分割字符串

join 只能用于元素是字符串的list;它不进行任何的强制类型转换。连接一个存在一个或多个非字符串元素的 list 将引发一个异常。

anystring.split(delimiter,num)

10、几个有用的特别的函数

type函数返回任意对象的数据类型。整型、字符串、列表、字典、元组、函数、类、模块,甚至类型对象都可以作为参数被type 函数接受。

str将数据强制转换为字符串。每种数据类型都可以强制转换为字符串。

dir函数返回任意对象的属性和方法列表,包括模块对象、函数对象、字符串对象、列表对象、字典对象

callable函数,它接收任何对象作为参数,如果参数对象是可调用的,返回True;否则返回False。可调用对象包括函数、类方法,甚至类自身。

等等。

11、Python自省

自省是指代码可以查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行操作。用这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先并不知道名称的函数。 

12、 过滤列表List

 过滤列表语法[mapping-expression_r forelement insource-listiffilter-expression_r]

 例:>>>li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
    >>> [elem for elem inli if len(elem) == 1]

输出:['a', 'b', 'c', 'b', 'd','d']

13、andor执行布尔逻辑演算,但是它们并不返回布尔值,而是返回它们实际进行比较的值之一。

例:>>> 'a' and'b'
'b'
14、有趣的lambda 函数

lambda函数是一种风格问题。不一定非要使用它们;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。在一种情况lambda函数是很有用的,即在需要特殊封装的、非重用的代码上,这样避免了代码充斥着大量单行函数。

例:>>> ge = lambdax,y=3: x+y

   >>> ge(3,6)

 输出:9

15、ljust 用空格填充字符串以符合指定的长度

例:

>>> s = 'abc'
>>> s.ljust(10)
'abc      '

16、在Python中没有switch语句。你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷。)

17、关于for循环

在C/C++中,如果你想要写for (int i = 0; i < 5;i++),那么用Python,你写成for i inrange(0,5)。似乎Python的for循环更加简单、明白、不易出错。  

18、global语句可以定义全局变量

19、获取帮助:help(print)

20、if __name__ =='__main__':
    print'模块自身运行'
else:
    print'模块被其他模块调用'  

21、引用模块方法

方法一:import 模块名

方法二:from 模块名 import 模块中的成员

最好采用 方法二 的方式,因为这样是你的程序跟易读,不会引起命名的冲突。

22、del 变量名:删除一个变量 

23、当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 参考那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定

记住列表的赋值语句不创建拷贝。你得使用切片操作符来建立序列的拷贝。

24、__setitem__与__getitem__是python的专用方法,就是一般有python自身隐含调用的,一般不会去直接在代码中调用
__setitem__ :获得一个字典的值
__getitem__:设置一个字典的值
>>d = {"username":"abc", "password":"123"}
>>d["username"] //python自动转换为d.__getitem__("username")
__getitem__类似

25、

for i in range(1,5):
    print i
else:
    print 'The for loop is over'

输出

1
2
3
4
The for loop is over

 没有输出5,range 向上 延伸到第二个数,但它不包含第二个数

 

26、函数内使用外部的变量,可使用gloal关键字声明变量

def func():
    global x //声明使用外部的x变量
    print 'x is', x
    x = 2
    print 'Changed local x to', x

x = 50
func()
print 'Value of x is', x

27、pass语句在Python中表示一个空的语句块。

28、定义含有单个元素的元组singleton=(2,) 即需要在第一个项后加一个逗号,这是为了表达式中一个带圆括号的对象区分。

29、列表的赋值语句不创建拷贝。你得使用切片操作符来建立序列的拷贝。

30、dictionary理解

a、dictionary类型中的元素是无序的。
b、无法创建含有重复key的dictionary类型。
>>> d={'aa': '11', 'bb': '22', 'aa': '33'}
>>> d
{'aa': '33', 'bb': '22'}
>>>
c、dictionary的key是大小敏感的。
d、dictionary中的值可以存储任何数据类型,如整数、字符串、对象、dictionary等等。
e、dictionary的Key可以是整数、字符串、元祖等

31、Python正则表达式的贪婪/非贪婪模式理解

是针对正则表达中的数量词来说,而python默认是贪婪模式的,总是尝试匹配尽可能多的字符;而非贪婪模式则相反,总是尝试匹配尽可能少的字符(甚至不匹配到)。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。

Phper/Pythoner技术联盟群:13734312. 

转载请注明出处,并告知。


来自东子哥的Blog

原创粉丝点击