Python语法结构
语句块缩进
1.python代码块通过缩进对齐表达代码逻辑而不是使用大括号
2.缩进表达一个语句属于哪个代码块
3.缩进风格 : 建议使用四个空格
如果是Linux系统的话,可以这样做,实现自动缩进 :
vim ~/.vimrc set ai set tabstop=4
注释
1、和大部分脚本及Unix-shell语言一样,python也使用#符号标示注释
2、从#开始,直到一行结束的内容都是注释
3、良好的注释习惯可以做到:方便其他人了解程序功能 ;方便自己在日后读懂代码
文档字符串
1、可以当作一种特殊的注释
2、在模块、类或者函数的起始添加一个字符串,起到在线文档的功能
3、简单的说明可以使用单引号或双引号
4、较长的文字说明可以使用三引号
#!/usr/bin/env python """star module just a sample module. only include one function.""" def pstar():"do not accept args. Used to print 50 stars"print '*' * 50
导入模块后,就可以查看到在线文档:
[root@localhost bin]# python >>> import star >>> help(star) NAME star - star module FILE /root/bin/star.py DESCRIPTION just a sample module. only include one function. FUNCTIONS pstar() do not accept args. Used to print 50 stars
Python入门
第一句Python代码
1.在linux下创建一个文件叫hello.py,输入一下内容:
print "hello,world"
然后执行命令:python hello.py ,输出
Hello World!
python内部执行过程如下
1.指定解释器
上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py
,那么就需要在 hello.py 文件的头部指定解释器,如下:
#!/usr/bin/env pythonprint "hello,world"
如此一来,执行: ./hello.py
即可。
ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py
字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascii) ,ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
1、关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
#!/usr/bin/env pythonprint "你好,世界"
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1#!/usr/bin/env python# -*- coding: utf-8 -*-print "你好,世界"
2、补充知识:
Python文件编码声明:
# -*- coding: utf-8 -*-是用来指定文件编码的 1、如果没有此文件编码类型声明,则Python默认以ASCII编码去处理 2、文件编码类型声明必须放在Python文件的第一行或第二行,即如果把文件编码类型声明放在其他行,则无法被识别 3、编码声明所支持的格式有3种:3.1 带等号的 #coding=<encoding name> 3.2 带冒号的 #!/usr/bin/env python #-*- coding:<encoding name> -*-3.3 vim的配置 #!/usr/bin/env python # vim : set fileencoding=<encoding name>4.声明的格式的语法只要是符合正则表达式就可以
模块初识
Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:
- Python内部提供的模块
- 业内开源的模块
- 程序员自己开发的模块
Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import sys 5 6 print sys.argv
Linux默认没有补全功能,要想实现此功能::
方法1:新建一个tab.py文件,输入以下内容:
#!/usr/bin/env pythonimport sys import readline import rlcompleter import atexit import osreadline.parse_and_bind('tab: complete')histfile = os.path.join(os.environ['HOME'], '.pythonhistory')try:readline.read_history_file(histfile) except IOError:passatexit.register(readline.write_history_file,histfile)del os, histfile, readline, rlcompleter
保存完后,默认只能在当前目录下导入;要想实现在任何地方都可以导入,则要把该文件放到/usr/lib/python2.7/site-packages目录下。
这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表
方法2:安装ipython
pyc 文件
执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。
ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码
变量
1、变量定义的规则:
1.变量名只能是 字母、数字或下划线的任意组合
2、变量名的第一个字符不能是数字
3.大小写敏感
4.以下关键字不能声明为变量名
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
5.关键字列表和iskeyword()函数都放入了keyword模块以便查阅
通过导入import keyword可以查看关键字:
判断是否为关键字,是的话返回True,否则返回False
在Python中,从变量到对象的连接称作引用。也就是说,引用是一种关系,以内存中的指针的形式实现
一旦变量被使用(也就是说被引用),Python会自动跟随这个变量到对象的连接
1、变量是一个系统表的元素,拥有指向对象的连接的空间
2、对象是分配的一块内存,有足够的空间去表示它们所代表的值
3、引用是自动形成的从变量到对象的指针
2、声明变量
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 name = "hello"
上述代码声明了一个变量,变量名为: name,变量name的值为:"hello world"
变量的作用:其代指内存里某个地址中保存的内容
3、变量赋值
1.变量的类型和值在赋值那一刻被初始化
2. 变量赋值通过等号来执行
3 python也支持增量赋值
#!/usr/bin/env python# -*- coding: utf-8 -*-name1 = "hello"name2 = "world"
4、赋值运算符
1.python语言中,等号=是主要的赋值运算符
2.赋值并不是直接将一个值赋给一个变量
3.在python中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,
都是将该对象的引用(并不是值)赋值给变量
4.python也支持链式多重赋值
下面是几种赋值方式的例子:
链式赋值
1 |
|
增量赋值
从python 2.0开始,等号可以和一个算术运算符组合在一起,
将计算结果重新赋值给左边的变量,这被称为增量赋值
>>> x += 1
多元赋值
1、另一种将多个变量同时赋值的方法称为多元赋值,采用这种方式赋值时,等号两边的对象都是元组
>>> x, y, z = 1, 2, 'a string' >>> print 'x=%d, y=%d' % (x, y) x=1, y=2 >>> x, y = y, x >>> print 'x=%d, y=%d' % (x, y) x=2, y=1
5、使用raw_input()函数读取用户输入数据
#!/usr/bin/env python # -*- coding: utf-8 -*-# 将用户输入的内容赋值给 name 变量 name = raw_input("请输入用户名:") # 打印输入的内容 print name
输出结果:
请输入用户名:bob bob
注意:在2.7版本中,需要注意raw_input和input的区别
1.因为 raw_input()把任何输入的都转成字符串存储。
2.而 input()接受输入的是一个表达式,否则就报错
3.raw_input()的小括号中放入的是,提示信息,用来在获取数据之前给用户的一个简单提示
4.input()函数与raw_input()类似,但其接受的输入必须是表达式
5.input()接受表达式输入,并把表达式的结果赋值给等号左边的变量
python3版本中
没有raw_input()函数,只有input()
并且 python3中的input与python2中的raw_input()功能一样
>>> name = input("My name is : ") My name is : xiaomingTraceback (most recent call last):File "<pyshell#0>", line 1, in <module>name = input("My name is : ")File "<string>", line 1, in <module> NameError: name 'xiaoming' is not defined >>> >>> name = input("My name is : ") My name is : "xiaoming" >>> print name xiaoming >>>