1、基于过程的区别
1、dict类型: 可以直接用 item[“name”]来进行访问
2、语法主要靠:号来控制
3、boolean变量
赋值主要是: True和False,而不是true和false
赋值取反: not 变量名
4、没有i++的操作符
5、字符串操作:
比较: str1 is str2
连接字符串+不变
截取字符串:str[::-1]
print str[::-1] #创造一个与原字符串顺序相反的字符串 print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符 print str[-3:] #截取倒数第三位到结尾 print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
查找最后一个字符串位置str.rfind(
"/"
)
6、字符串转化:数字转字符串 str(数字)方法,字符串转数字,直接: int[x],其他类型类同
7、全局变量,声明要使用 global,过程中使用的时候要声明global
8、判断对象是否为空 x is not None
9、定义模块,文件中增加如下四句话即可:
#!/usr/bin/env python
#encoding=utf-8
#Create by xxxxxx 2015-11-15 Version V1.0
#!/usr/bin/python
在调用 模块中的函数时,必须这样引用:模块名.函数名
10、Python中的包:包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
考虑一个在 package_runoob 目录下的 runoob1.py、runoob2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下:
导入语法:
11、注解,单行注解#,多行注解成对""",比如:
def convert(self, s, numRows):
""" :type s: str :type numRows: int :rtype: str """
2、基于面向对象的区别
1、对象的引用this变为self,而且每个对象的属性必须使用self
2、实例化处理,java中 A a = new A(),在pytho中只需要 : a = A()
3、对象定义中每个方法都必须有self的参数
4、继承处理: java中: class Child extends Parent, python中需要使用:class Child(Parent):
5、私有属性和方法:__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。比如;__secretCount = 0 # 私有变量
6、单下划线、双下划线、头尾双下划线说明:
-
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
-
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
-
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
7、对象通用方法:
__init__ ( self [,args...] ) 构造函数 简单的调用方法: obj = className(args)
__del__( self ) 析构方法, 删除一个对象 简单的调用方法 : del obj
__repr__( self ) 转化为供解释器读取的形式 简单的调用方法 : repr(obj)
__str__( self ) 用于将值转化为适于人阅读的形式 简单的调用方法 : str(obj)
__cmp__ ( self, x ) 对象比较 简单的调用方法 : cmp(obj, x)
3、常见问题
1、安装的软件包的目录
https://stackoverflow.com/questions/31384639/what-is-pythons-site-packages-directory
2、Tornado-JSON的一个例子
参考文档: http://tornado-json.readthedocs.io/en/latest/using_tornado_json.html#helloworld-py
3、python生成thrift支持
http://thrift.apache.org/tutorial/py
4、pypy
PyPy是一个虚拟机项目,主要分为两部分:一个python的实现和 一个编译器PyPy的
第一部分: 用Python实现的Python其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言。
PyPy的第二部分:编译器这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,不过它的后端却是不少,也就是说这个编译器支持许多的目标语言,比较重要的有:C,CIL,Javascript...
最常用的方式: python xxx.py 可以用pypy xxx.py来替换,使用pypy的解释器来处理,使用pypy性能上有很大的提升
PyPy在支持C语言编写的第三方库这方面一直存在问题,需要手动配置。而现在已受最受欢迎的数学和统计学库Numpy支持,也有很多库内置在PyPy中。 PyPy想要通过使用他们自己的C语言接口cffi来解决这个问题。相较于Python默认的C语言接口,Cffi是一个更快,更加Pythonic的实现,甚至很多非PyPy用户也很喜欢。但是,移植老的项目也并非微不足道的工作。
5、python调用c c++
主要使用ctypes,调用方式比较简单,参考文档:
https://blog.csdn.net/linda1000/article/details/12623527
https://www.cnblogs.com/yanzi-meng/p/8066944.html
6、关于python的慢
引用知乎的一个回答:
如果是计算密集型的应用,纯Python的性能比C,Java什么的要差。
一般的Web应用有大量的网络IO,磁盘IO,只有少量的逻辑判断和计算,这种时候Python的性能劣势不明显。
Python需要提高计算性能的时候,可以通过C扩展,Cython,或者Pypy的途径。
开发效率还是很重要的,这么『慢』的一门语言,在科学计算和数据分析领域能成为主要工具语言,是有道理的。
7、virtualenv管理多python环境
参考:
https://blog.csdn.net/zhang89xiao/article/details/76652245
https://blog.csdn.net/five3/article/details/46340401
8、numpy矩阵和列表简单转化
a=([3.234,34,3.777,6.33]) b=np.array(a) c=b.tolist()
4、pytho思维导图
5、参考文档:
很好的入门参考文档: http://www.runoob.com/python/python-object.html
python 2.7教程: https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
python 3 教程: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
python 2和python 3的主要区别: https://blog.csdn.net/t46414704152abc/article/details/79089451
csdn博客python系列文章: https://blog.csdn.net/linda1000/article/category/1250257
python整理的思维导图: http://www.jb51.net/article/117105.htm
python思维导图总结: https://zhuanlan.zhihu.com/p/26273120
python知识整理1: https://github.com/Windrivder/pybook
python知识和工具大全 https://github.com/jobbole/awesome-python-cn
leetcode刷题(锻炼新语言能力)
157道题 https://github.com/csujedihy/lc-all-solutions
600题: https://github.com/princewen/leetcode_python
简书说明: https://www.jianshu.com/p/2580a523afe3
重点说明:函数编程相对于一般java程序员来说用的比较少,不影响开发功能,后续补充