python一天速成都是骗纸~怎么可能一天~只是快速了解一些基本的
首先我是个python新手,只在网上搜例子然后用python写过一些分析文件的脚本,现在工作需要,要短时间进一步了解python。这篇文章也不是给完全新手看的,还是给对python有一点接触且需要大致掌握或者对其他语言有一定研究的人看的。
首先python是先编译后解释的语言,与php和java类似,php是先编译成opcode再解释执行,java是编译成.class文件然后由虚拟机执行,只是编译时机不同,php和python一般是运行时先编译再执行,java是先编译,再拿编译好的.class去执行。
Python在执行时,首先会将.py文件中的源代码编译成Python的bytecode(字节码),然后再由PythonVirtual Machine来执行这些编译好的bytecode。Python的标准实现是由可移植的ANSIC编写的,可以在目前所有的主流平台上编译和运行。
如下:
test.py定义一个函数
#!/usr/bin/python2.6 # -*- coding: utf-8 -*- def hello(s): print s;
然后另一个python文件使用test.py中的函数
#!/usr/bin/python2.6 # -*- coding: utf-8 -*- from test import hello hello("杨令云")
输出结果没什么特别的,就是输出个字符串。其中coding部分是为了指定编码,这样使用中文不会出现问题。
会看到test.py的旁边生成了test.pyc这个文件,因为是二进制文件,vim -b一下,再:%!xxd一下,可以看到一堆16进制的东西,其实就是python编译后生成的字节码。而使用test.py的文件并不会生成这个文件。
了解了一下,主要原因是python文件在编译后生成的字节码会load到内存中执行,当前执行的文件字节码由于在内存中,一般没有必要保存成文件到硬盘上,而所调用的其他python文件,为了重用和执行效率,将字节码保留成文件,在下次执行的时候,对比.py和.pyc文件的最后修改时间,若一致则执行pyc文件,若不一致重新编译一遍即可,说白了为了重用和cache。
python是动态类型强类型语言,如果谁把字符串和整数相加那就要报错啊~
>>> print "df"+5 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects
python里万物皆对象,有以下基本数据类型
1、None,表示对象为空值,None与0或者False比较都是False
2、Boolean类型,True、False,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了__nonzero__()或__len__()方法且方法返回0或False,则其实例也被当作False。我测试使用的python2.7.3,实测下来,如果与False做比较,0==False是Ture,其他的与False做比较还是False,但是如果把0、()等这些放在if条件中,条件判断结果还是False。
另外python里不使用&&、||这些做运算,是使用and、or、not这种英文单词。
3、整型、长整型、浮点型,整型4字节,长整型远大于c里的long,可以认为最大支持无限大了。
4、恩python比较牛的是支持复数,啥是复数,学过数学的肯定接触过~
5、字符串,单引号双引号没啥区别,3个引号括起来用来表示多行内容,并且保留格式
>>> print '''haha ... one ... two ... three''' haha one two three
字符串支持切片str[start:end:step],意思是从start开始到end结束,取step为步长进行切片,支持使用负数从后往前切片。
6、列表[],list,顺序数组的概念,list有append、extend、insert、index、remove、del、pop等操作
>>> array=[1,2,3,4,5,6] >>> print array[2:5:2] [3, 5] >>> print len(array) 6 >>> print array.index(3) 2
>>> seta={1,2,3,4,5} >>> setb={3,4,5,6,7} >>> print seta - setb set([1, 2]) >>> print seta & setb set([3, 4, 5]) >>> print seta | setb set([1, 2, 3, 4, 5, 6, 7])
>>> obj={5:4, 'a':'b'} >>> print obj['a'] b其他、
python注释使用#
每行结束可以用;分号也可以不使用,使用;可以在一行写多个语句但是不推荐
代码块和缩进很重要,一般人都懂的
python和lua有的地方有点像,有很多语法糖,写代码时有时会很简洁,当然也就会不易懂。
def foo(param1, param2): lalalala
使用import或者from xxx import xxx
>>> print 'a',1 a 1 >>> print '%d%d'%(2,3) 23
>>> (a,b,c,d,e,f,g)=range(7) >>> print a,b,c,d,e,f,g 0 1 2 3 4 5 6
>>> list = [1,2,3,4,5] >>> list = [ele *2 for ele in list] >>> print list [2, 4, 6, 8, 10]
字典遍历的时候使用dic.keys();dic.values();dic.items();
>>> a=True >>> b=1 >>> c=2 >>> print a and b or c 1
>>> print (lambda x:x*2)(3) 6 >>> print (lambda x:x*x*3.14)(3) 28.26 >>> print (lambda x:x*x*x)(3) 27 >>> f=lambda x:x*x*x >>> f(2) 8
while True: pass else: pass
for i in range(0, 5): print i else: pass
pass代表空语句,range函数相信也有所了解了,else是循环结束时执行的语句,如果循环里有break,不会执行else语句。
python里有个好玩的东西是
>>> def foo(a=1, b=2, c=3): ... print a,b,c ... >>> foo(b=5, c=6) 1 5 6平时如果我们搞了很多默认参数,一旦只需要对最后一个参数传值时,就要悲剧的写一大堆参数默认值,这样方便了许多。
__name__的值通常为文件名称,如果值为__main__,代表是用户执行的文件,也就是类似main入口一样的。
关于list、tuple、set等常用的方法就不在这里介绍了,python的文章和文档一搜一大把,用的时候查查,这里只介绍基本的~
写个简单面向对象的例子
第一个文件imtest.py
print __name__ class Knight: '''I am strong Knight''' Count = 0 def __init__(self, name, hp): Knight.Count += 1 self.name = name self.__hp = hp print 'knight comes' def die(self): self.__hp = 0 def getHp(self): return self.__hp
import imtest print __name__ class HolyKnight(imtest.Knight): '''I am great HolyKnight''' def __init__(self, name, hp, mp): imtest.Knight.__init__(self, name, hp) self.__mp = mp print 'holyknight comes' kn = HolyKnight('cloudy', 10, 5) print HolyKnight.__doc__ print imtest.Knight.Count print kn.name print kn.getHp() print kn.__hp
最后输出为
imtest __main__ knight comes holyknight comes I am great HolyKnight 1 cloudy 10 Traceback (most recent call last): File "test.py", line 17, in <module> print kn.__hp AttributeError: HolyKnight instance has no attribute '__hp'
instance.method(arguments)
。它等价于调用Class.method(instance, arguments)
,这一点与lua是一样的~
这些就不在python速成中介绍了~但是我认为是python语法中还很重要的几个东西,后续要慢慢吃透。
找资料、看、写代码试,花了3-5个小时,对python语言层面有个大致了解,后面要开始了解下web.py框架了,有时间再细细研究python的其他语法
【恶补】之python一天速成,布布扣,bubuko.com
原文地址:http://blog.csdn.net/madcloudsong/article/details/38691719