`
tmrihuwz
  • 浏览: 533 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java程序员眼中的Python特征

阅读更多

算是Python简明教程的读书笔记

1. 三引号用于多行字符串
2. 无论单引号/双引号都不支持插值展开
3. 变量无需(也无法)声明。第一次赋值即声明
字符串是不可变的。
4. 分号用法类似Javascript(可有可无)。但强烈不建议使用。
5. 使用缩进(空白或tab皆可,但必须一致,建议使用4个空格)来区分逻辑块。
6. //表示取整除法
7. *用于字符串表示将字符串重复若干次
8. print自动在两个输出项之间插入一个空格(这个是好事吗?如果我不想要空格呢。。。)
9. else if的关键字为elif
10. if/else/elif/while/for/def 都必须以冒号结尾 (以引出新的逻辑块)
11. python中没有switch语句 - 你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷。)
12. 你可以在while/for循环中使用一个else从句。else块事实上是多余的,因为你可以把其中的语句放在同一块(与while相同)中,跟在while语句之后,这样可以取得相同的效果。
例外的情况是当你用break从循环中跳出时,else子句讲不被执行。
13. 布尔类型的字面常量为True和False。你可以分别把它们等效地理解为值1和0。在检验重要条件的时候,布尔类型十分重要,它们并不是真实的值1。
14. Python的for循环从根本上不同于C/C++的for循环。C#程序员会注意到Python的for循环与C#中的foreach循环十分类似。Java程序员会注意到它与Java 1.5中的for (int i : IntArray)相似。
在C/C++中,如果你想要写for (int i = 0; i < 5; i++),那么用Python,你写成for i in range(0,5)。你会注意到,Python的for循环更加简单、明白、不易出错。
15. for语句也可以带有else子句(同while)
16. 函数定义方式
无参 def myfun():
带参 def myfun(arg1,arg2):
带默认参数 def myfun(arg1, arg2 = 2)
函数调用必须使用括号(即使是无参的)
17. 如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的 (但我想global

应该是避免使用的特性)
18. 如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。
这样做有两个 优势 ——一,由于我们不必担心参数的顺序,使用函数变得更加简单了。二、假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。
当然,你必须给没有默认值的参数赋值。
19. 注意,没有返回值的return语句等价于return None。None是Python中表示没有任何东西的特殊类型。例如,如果一个变量的值为None,可以表示它没有值。
除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句。通过运行print someFunction(),你可以明白这一点,函数someFunction没有使用return语句,如同:
20 pass语句在Python中表示一个空的语句块。类似于Java/C中的';',汇编中的'nop'
21. 在函数的第一个逻辑行的字符串是这个函数的 文档字符串 。注意,DocStrings也适用于模块和类,我们会在后面相应的章节学习它们。
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 强烈建议 你在你的函数中使用文档字符串时遵循这个惯例。
你可以使用__doc__(注意双下划线)调用printMax函数的文档字符串属性(属于函数的名称)。
22. 模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。模块的名字即模块的文件名。
23. 使用import导入模块。当Python执行import 语句的时候,它在sys.path变量中所列目录中寻找该模块。如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你 使用 。注意,初始化过程仅在

我们 第一次 输入模块的时候进行。另外,“sys”是“system”的缩写。

24.输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些。一种方法是创建 字节编译的文件 ,这些文件以.pyc作为扩展名。字节编译的文件与Python变换程序的中间状态有关

(是否还记得Python如何工作的介绍?)。当你在下次从别的程序输入这个模块的时候,.pyc文件是十分有用的——它会快得多,因为一部分输入模块所需的处理已经完成了。另外,这些字节编译的文件也是与平台无关的。

所以,现在你知道了那些.pyc文件事实上是什么了。
25. 每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行(而不是被其他文件/模块导入),我们可以进行相应的恰当操作。
26. from <module> import <member [,member...]>用于导入模块中的成员。类似于java的static import
27. 你可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。
当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。
28. del <something>用于删除对象(变量/导入的模块,等等)。就好像它从来没有存在过一样。
29. list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目。列表中的项目应该包括在方括号中
30.list是可变的。list的方法将作用在该list对象本身。
31. 元组是不可变的。元组用圆括号括起(所以叫“元(圆)”组:)
32. 含有0个或1个项目的元组。一个空的元组由一对空的圆括号组成,如myempty = ()。然而,含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一

个带圆括号的对象。即如果你想要的是一个包含项目2的元组的时候,你应该指明singleton = (2 , )。
33. 元组最通常的用法是用在打印语句中,下面是一个例子:
print '%s is %d years old' % (name, age)
33. 字典类似于map。注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键。字典是dict的实例
键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
34. 列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切

片,即一部分序列。序列用法切片用法sqe[start:end],start和end都是可以省略的,如果省略,start表示第0个元素,end表示最后一个元素的后面一个位置。切片取的元素从start开始,到end为止。但不包括end。
35. 当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 参考 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。
一般说来,你不需要担心这个,只是在参考上有些细微的效果需要你注意。这会通过下面这个例子加以说明。
35. 你需要记住的只是如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。如果你只是想要使用另一个变量名,两个名称都 参考 同一个

对象,那么如果你不小心的话,可能会引来各种麻烦。
36. 类使用class关键字创建。类的域和方法被列在一个缩进块中。Java中的this在python用self表示(惯例,非强制)
37. 如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。 (really?)
38.我们使用类名后跟一对圆括号来创建一个对象/实例 objectA = ClassA()
39.__init__方法类似于C++、C#和Java中的 constructor 。同样,注意__del__方法与 destructor 的概念类似。
40. Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
41. 只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。
42.使用实例成员必须使用self.。否则被认为是类成员。
43. 类Son继承类Father以class Son(Father): 表示
44. print会自动追加换行符。可以在末尾添加逗号以抑制此特性
45. 模块pickle可以实现python对象的持久化(类似于java的serialization)
46. import moudleA as A可以为导入的模块赋一个(较短的)别名
47. 我们把所有可能引发错误的语句放在try块中,然后在except从句/块中处理所有的错误和异常。except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会

处理 所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。
如果某个错误或异常没有被处理,默认的Python处理器就会被调用。它会终止程序的运行,并且打印一个消息,我们已经看到了这样的处理。
你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。
我们还可以得到异常对象,从而获取更多有个这个异常的信息。这会在下一个例子中说明。
48. 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。
49. python支持finally块,用法同java

50. 在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了。

一般说来,特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用x[key]这样的索引操作(就像列表和元组一样),那么你只需要实现__getitem__()方法就可以了。想一下,Python就是对list类这样做的!

51. 通过列表综合,可以从一个已有的列表导出一个新的列表。例如,你有一个数的列表,而你想要得到一个对应的列表,使其中所有大于2的数都是原来的2倍。对于这种应用,列表综合是最理想的方法。古怪的语法
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]

52. 当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。
由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是**前缀,多余的参数则会被认为是一个字典的键/值对。

53. lambda语句被用来创建新的函数对象,并且在运行时返回它们。lambda语句用来创建函数对象。本质上,lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。注意,即便是print

语句也不能用在lambda形式中,只能使用表达式。
54. exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句。下面是一个简单的例子。

>>> exec 'print "Hello World"'
Hello World
eval语句用来计算存储在字符串中的有效Python表达式。下面是一个简单的例子。

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

55. repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有eval(repr(object)) == object。

 

分享到:
评论

相关推荐

    Java 程序员眼中的 Linux - v1.0.pdf

    Java 程序员眼中的 Linux - v1.0.pdf

    Java程序员面试资料及简历模版

    Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历...

    JAVA程序员简历模板(最新版)

    JAVA程序员简历模板 JAVA程序员简历模板

    java程序员简历模版

    java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版...

    Java 程序员眼中的 Linux.zip

    Java 程序员眼中的 Linux.zip,《Java 程序员眼中的 Linux》

    java程序员笔试题java程序员笔试题

    java程序员笔试题java程序员笔试题

    Java程序员面试宝典

    《Java程序员面试宝典》主要内容简介:目前许多开发者对Java语言及其底层原理掌握不牢固,在面试过程中经常漏洞百出,无法取得好成绩。而招聘单位为了得到高素质的员工往往使出浑身解数,采用各种形式的面试考察求职...

    java程序员面试交流项目经验

    java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...

    Java程序员面试笔试宝典-何昊pdf版

    Java程序员面试笔试宝典-何昊pdf版,高清,带有书签。

    java程序员转正ppt

    java程序员转正pptjava程序员转正pptjava程序员转正ppt

    Java程序员简历模板-求职应聘必备

    内容概要:该资源是一份优秀的Java程序员简历模板,包含了详细的简历内容和排版样式,适用于Java程序员求职应聘时使用。 适用人群:Java程序员、计算机科学和技术相关专业的学生和毕业生、招聘人员和HR等对Java...

    java For python 程序员

    为python开发者准备的java教程;帮助熟练掌握python的开发者快速迁移到java上;帮助想掌握大数据基本能力的算法工程师快速学习java;帮助已熟悉python的学生学习java

    java程序员面试题大全

    java程序员面试题java程序员面试题java程序员面试题java程序员面试题java程序员面试题java程序员面试题

    java程序员面试宝典

    JAVA程序员面试 JAVA程序员面试 JAVA程序员面试 JAVA程序员面试

    Java程序员职场全攻略

    Java程序员职场全攻略 Java程序员职场全攻略 Java程序员职场全攻略 Java程序员职场全攻略

    2018年新版Java程序员面试宝典

    2018年最新版Java程序员面试宝典,面试的神器,可以有效的通过面试环节,得到满意的工作

    Java 程序员宝典 pdf 电子书

    Java 程序员宝典 pdf 电子书Java 程序员宝典 pdf 电子书Java 程序员宝典 pdf 电子书

    Java程序员面试宝典2011最新出炉

    Java程序员面试宝典2011最新出炉Java程序员面试宝典2011最新出炉Java程序员面试宝典2011最新出炉Java程序员面试宝典2011最新出炉Java程序员面试宝典2011最新出炉Java程序员面试宝典2011最新出炉Java程序员面试宝典...

    Java程序员上班那点事

    Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事

    java程序员面试简历 WORD 模版

    java程序员两个简历Word简历模版样试

Global site tag (gtag.js) - Google Analytics