本文为博主原创文章,请遵守文章最后的版权申明。
有很多程序员在学习一门技术之前,都会有一番思想斗争。究竟要不要花时间去学?学了有什么意义?我大Java包办一切,何必要去学那些“旁门左道”!呵呵!在我深入接触这门语言之前,我也曾这样想过。但现在不会了!人生苦短,何必非要争个武功高低呢?解决问题才是王道!在特定的场景下,用Java并不见得有其他语言管用。所以,虽然我已经有了Java,但是Python,我依然需要你!本文是我的《Python语法笔记》系列文章的第一篇。
这篇文章我在学习Python语言的过程中整理的读书笔记,在此分享给务实的同学们。目前Python2在市场上所占比重依然高于Python3,所以下述Python如果没有特殊指明均指Python2(我机器上是Python2.7)。这个系列的文章内容组织形式主要参考《Python基础教程》一书,大多知识也是源于此书。入门的同学可以自己找一本看看。
基础知识
__future__
通过import这个神奇的包可以把未来会成为标准的新特性导入进来。
比如,默认情况下,Python2除法是地板除,会把余数丢弃。
a = 3 / 2
print a # --> 1
from __future__ import division
a = 3 / 2
print a # --> 1.5
在Python3中默认除法就是精确的除法,会保留小数。如果需要地板除则需要用//。
长整型
Python中普通整数范围为-2147483647 ~ 2147483647。正常情况下不用关心整数范围问题,Python将会自动转换。所以整型与长整型是可以混用的。
如果有必要的话,可以通过在数字后面加上l(小写的字母L)或者L来指定数字为长整型。
十六进制、八进制
print 0xAF # --> 175
print 010 # --> 8
注意这里是0打头,不是字母o。
算术表达式
加减乘除、地板除、求余、乘方。
a = 1
b = 2
c = (a + b * (a + b)) / 2
print c # --> 3
c = (a + b * (a + b)) / 2.0
print c # --> 3.5
print c % 3 # --> 0.5
print 2 ** 10 # --> 1024
字符串
Python中双引号、单引号等效。
拼接字符串用+号。
Python中还有一种特殊的拼接字符串的方式,只需要把两个字符串连续的写出,Python就会自动拼接两个字符串为一个。
print('hello, zenghui!'); # --> hello, zenghui!
print("hello, zenghui!"); # --> hello, zenghui!
print("hello, " + "zenghui!"); # --> hello, zenghui!
print("hello, " "zenghui!"); # --> hello, zenghui!
print("hello, ""zenghui!"); # --> hello, zenghui!
print("hello, " "zenghui" "!"); # --> hello, zenghui!
str与repr
str()将值转换为人看的字符串,repr将对象转换为Python字符串的表现形式。
print(str("hello elvin!")); # --> hello elvin!
print(repr("hello elvin!")); # --> 'hello elvin!'
另外repr()也可以用一对反引号来实现。
print(`"hello elvin!"`); # --> 'hello elvin!'
不过反引号的形式在Python3中已经被废弃,属于一个历史遗留的东西。能看懂就行,在自己写的代码中建议不要使用。
长字符串
Python可以用三个引号替代普通引号来书写长字符串,而且这个长字符串允许跨越多行。
print """hi,
my name is "zenghui",
and my English name is 'Elvin Zeng'."""
output
hi,
my name is "zenghui",
and my English name is 'Elvin Zeng'.
另外,在这里用三个单引号也是相同的效果。
原始字符串
在字符串前加个r表示这个字符串内的所有内容不转义,直接原样输出。类似于C#中的@。比如print r"elvin\nzeng",这里\n就会直接输出,而不是变成换行。
注意最后一个引号之前不要加反斜杠,比如print r"C:\Users\elvin\",这样会出错。这种情况需要一些小技巧,比如print r"C:\Users\elvin" "\\",这样就不会出问题。
Unicode字符串
Python2中Unicode字符串是Unicode对象,与字符串其实并不是同一个类型。
Python中普通字符串内部是以8位的ASCII码来存储的,而Unicode则存储为16位Unicode字符。
print u"hello, elvin!" # --> hello, elvin!
Unicode字符串用u作为前缀。
在Python3中所有字符串都是Unicode字符串。
注释
单行注释
就是一个#号
多行注释
其实没有什么多行注释,只是可以利用Python的多行的字符串。
#!/bin/env python
# -*- coding:utf-8 -*-
print "hello"
'''
这里是多行注释
zenghui到此一游...
'''
print "world!"
编码注释
在Python中如果用到了中文字符,通常都需要在文件头第二行加上编码注释。
#!/bin/env python
# -*- coding:utf-8 -*-
print "hello"
更加详细的说明可以参考这篇文章
读取用户输入
在Python2中可以用raw_input函数读取用户输入的数据,读取到的数据为字符串。input函数也可以读取用户输入,不过这个函数会把用户输入当作Python表达式。
>>> raw_input("please input:")
please input:hello, elvin!
'hello, elvin!'
>>> input("please input:")
please input:"hello, elvin!"
'hello, elvin!'
>>> input("please input:")
please input:hello, elvin!
Traceback (most recent call last):
File "", line 1, in
File "", line 1
hello, elvin!
^
SyntaxError: unexpected EOF while parsing
在Python3中,原来的raw_input已经被重命名为了input。
Python -m
模块形式执行文件与直接执行文件是有区别的,主要影响sys.path这个变量。直接启动python文件是把py文件所在目录放到了sys.path中。模块形式启动是把当前工作目录放到了sys.path中。
详细情况可以参考这篇文章