初识Python
2016-02-26 14:27
846 查看
Python是一种解释型动态强类型语言,支持过程式,面向对象程序设计范式和部分函数式语言特性。
Python具有具有较高的开发效率,但执行效率较低。
Python支持在交互式和脚本两种编程模式,Python脚本文件通常保存为.py格式.
“#”是Python中行注释的引导符:
Python使用分号
Python标识符区分大小写,以字母或
Python允许以单一下划线(
以单个下划线(
很多Python内置对象采用下划线开头的命名方式,除非重写这些内容否则不要使用这种风格的命名。
Python采用引用访问对象,Python中一切(包括内置类型及其字面值)都是对象。对象在使用前无需声明,直接使用一个新的标识符表明新建对象。
Python使用”=”作为赋值运算符,可以连续赋值,但不能理解为”=”有返回值。
Python使用与C相同的关系运算符,包括
Python提供了3个逻辑运算符
所有双目算术运算符均具有对应的复合赋值运算符(+=,**=,//=,^=...),但是Python删除了自增自减运算符。
引导符中的字母是大小写不敏感的。Python中提供了一系列函数用于进制和与int有关的类型转换。
上述函数可以将int值转换对应的带有进制引导符的字符串。
Python提供了round(x,n)函数对浮点数进行保留n位小数的四舍五入近似。
Python支持采用e或E表示的浮点字面值。
int//int采用截断的方式取整,而float//float仍采用截断取整但保留一位小数。
一个complex字面值可以写作1+2j的形式,注意1+1j和1-1j不能写作1+j和1-j,实部为0时可以省略.
实部与虚部作为对象的属性出现,以real和imag表示.
complex类型不能使用//、%运算以及涉及这些运算的库函数.
math模块中不支持复数运算,若需复数支持则使用cmath模块.
每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块
使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块
在Python中没有switch – case语句
在condition为真时执行循环,最后一次循环后执行else之后的内容。
range(begin,end,step)函数可以生成一段左闭右开的数字序列[begin,end):
continue语句用于强制结束本次循环体执行。
Python 使用 raise 语句抛出一个指定的异常:
首先执行try块,若发生异常则由响应的except块接收,若无异常发生则执行else块,无论是否有异常抛出finally块都将被执行。
except块按照定义顺序进行匹配,except_class指定匹配的异常类,variable为保存异常信息的类对象。
若无except_class则可以匹配任意异常,通常作为最后一个except块捕获其它类型的异常。
示例:
用户自定义异常需要直接或间接地继承Exception类:
在try语句使用finally块释放资源非常不便, python2中引入了上下文管理.
上述语句可以自动打开文件, 当控制流离开with...as代码块后自动关闭文件.
控制流进入代码块时会执行
print
filename参数为要打开的文件名.
mode指定打开方式:
'r' 只读, mode的默认值
'w' 只写, 原有内容将清空
'a' 用于追加文件内容,初始插入位置为末尾
'r+' 同时用于读写
示例:
使用
size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。
f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。
迭代一个文件对象然后读取每行:
如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。
from 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾:
from的默认值为0,即文件开头。
模块可以被别的程序引入,以使用该模块中的对象。
这也是使用Python库的方法:
在解释器的当前目录或者sys.path中的一个目录里面来创建一个.py的文件,其它文件可以将该文件作为模块导入
模块除了方法和类定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入或reload时才会被执行。
如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用
目录只有包含一个叫做
Python提供了两种导入语法:
如:
它必须使用全名去访问:
或者:
它不必使用全名去访问:
它也可以只导入一个函数,类或各种对象,例如:
它可以选择导入一个包下的所有模块:
Python中一切都是对象, 模块和包都是module对象.
因为有些文件系统的原因,它工作的并不好(如win系fs不区分大小写),所以Python规定:
如果包定义文件
弱类型与动态类型是从不同角度定义的概念: 弱类型倾向于容忍隐式类型转换, 即类型之间的界限不明显. 动态类型可以理解为引用没有类型而值有类型, 即同一个引用可以动态的指向不同类型的值. 我们熟悉的C属于静态弱类型语言.Python倾向于不容忍隐式类型转换, 大多数情景下可以将Python归为动态强类型语言.
Python具有具有较高的开发效率,但执行效率较低。
Python支持在交互式和脚本两种编程模式,Python脚本文件通常保存为.py格式.
>>>为Python解释器的命令提示符:
>>> print(“Hello World!”) Hello World!
“#”是Python中行注释的引导符:
# This is a piece of Python comment
Python使用分号
;或换行标志语句结束, 允许使用
\进行折行.
Python标识符区分大小写,以字母或
_开头, 后续字符可以为数字,字母或
_.
Python允许以单一下划线(
_)作为标识符,但它一般在解释器环境下代表上一条指令计算的结果.
以单个下划线(
_)或以双下划线(
__)开头的标识符在Python中一般有特殊含义。
很多Python内置对象采用下划线开头的命名方式,除非重写这些内容否则不要使用这种风格的命名。
Python采用引用访问对象,Python中一切(包括内置类型及其字面值)都是对象。对象在使用前无需声明,直接使用一个新的标识符表明新建对象。
global obj语句声明obj为同名的全局变量,在使用obj时将引用全局对象而不会建立局部对象。
del obj指令可以删除特定的对象。
None是Python中代表空值的关键字。
Python使用”=”作为赋值运算符,可以连续赋值,但不能理解为”=”有返回值。
>>> x=a=2 >>>x < a = 2 File "<stdin>", line 1 SyntaxError: can't assign to comparison >>> x < (a = 2) File "<stdin>", line 1 x < (a = 2) ^ SyntaxError: invalid syntax
Python使用与C相同的关系运算符,包括
==与
!=。
数据类型
bool
Python中的bool类型包含”True”和“False”两个取值(注意大小写)。Python提供了3个逻辑运算符
and,
or和
not,它们都具有短路特性。
int
Python中int的容量只取决于机器运行内存的大小与字长无关。算术运算
Python中的int支持C中所有的算术运算(+,
-,
*,
/,
%和位运算
~,
^位异或,
&,
|),并定义了表示乘方运算的新运算符
**
//整数上的除法运算,Python的int/int运算不再具有截断的特性,int//int则具有截断的特性(不是四舍五入)
所有双目算术运算符均具有对应的复合赋值运算符(+=,**=,//=,^=...),但是Python删除了自增自减运算符。
进制与转换
int默认采用十进制计数,可以通过显式引导符指定通过二进制,八进制或十六进制表示。>>>789 #decimal 789 >>>0b1100010101 #binary 789 >>>0B1100010101 789 >>>0o1425 #octonary 789 >>>0x315 #hexadecimal 789
引导符中的字母是大小写不敏感的。Python中提供了一系列函数用于进制和与int有关的类型转换。
>>>bin(789) ‘0b1100010101’ >>>oct(789) ‘0o1425’ >>>hex(789) ‘0x315’
上述函数可以将int值转换对应的带有进制引导符的字符串。
>>>int(x)将对象x转换int值,若失败则抛出ValueError异常;若未定义转换规则则抛出TypeError异常。对于浮点数则采取截断的方式进行转换.
Python提供了round(x,n)函数对浮点数进行保留n位小数的四舍五入近似。
>>>int(str,base)将使用字符串表示的int(不带进制引导符)转换为0~32进制数,以无引导的int对象表示。
>>>int(“315”,32) 3109
float
float是Python中内置的浮点数类型,采用双精度浮点表示。它的语法与int类型类似.Python支持采用e或E表示的浮点字面值。
int//int采用截断的方式取整,而float//float仍采用截断取整但保留一位小数。
>>>16//9 1 >>>16.0//9.0 1.0
complex
complex类型是Python内置的复数类型, 虚数单位用字母j表示.一个complex字面值可以写作1+2j的形式,注意1+1j和1-1j不能写作1+j和1-j,实部为0时可以省略.
实部与虚部作为对象的属性出现,以real和imag表示.
>>>1+2j.real 1.0 >>>(1+2j).imag 2.0 >>>(1+2j).real 1.0
complex类型不能使用//、%运算以及涉及这些运算的库函数.
math模块中不支持复数运算,若需复数支持则使用cmath模块.
流程控制
if
if time > 20: print('good evening') elif time > 12: print('good afternoon') else: print('good morning')
每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块
使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块
在Python中没有switch – case语句
while
示例:a = 233 while a: a -= 1 else: print(a)
在condition为真时执行循环,最后一次循环后执行else之后的内容。
for
for循环可以遍历包括线性容器和集合容器在内的所有容器:>>> for i in ("C","C++","Qt","Java","Matlab","Python"): ... print(i) ... C C++ Qt Java Matlab Python
range(begin,end,step)函数可以生成一段左闭右开的数字序列[begin,end):
>>> for i in range(1,101): ... s += i ... else: ... s ... 5050
break,continue
break语句用于强行跳出循环,break语句跳出循环后不执行else后的语句。continue语句用于强制结束本次循环体执行。
pass
pass语句用于占位:def func(): pass
异常
try: statements except except_class as variable: statements else: statements finally: statements
Python 使用 raise 语句抛出一个指定的异常:
raise NameError('HiThere')
首先执行try块,若发生异常则由响应的except块接收,若无异常发生则执行else块,无论是否有异常抛出finally块都将被执行。
except块按照定义顺序进行匹配,except_class指定匹配的异常类,variable为保存异常信息的类对象。
若无except_class则可以匹配任意异常,通常作为最后一个except块捕获其它类型的异常。
示例:
>>> def this_fails(): x = 1/0 >>> try: this_fails() except ZeroDivisionError as err: print('Handling run-time error:', err) except: print('Unkown error') Handling run-time error: int division or modulo by zero
用户自定义异常需要直接或间接地继承Exception类:
>>> class MyError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) >>> try: raise MyError(2*2) except MyError as e: print('My exception occurred, value:', e.value) My exception occurred, value: 4 >>> raise MyError('oops!') Traceback (most recent call last): File "<stdin>", line 1, in ? __main__.MyError: 'oops!'
在try语句使用finally块释放资源非常不便, python2中引入了上下文管理.
with open(file, 'r') as f: for line in f: print(line)
上述语句可以自动打开文件, 当控制流离开with...as代码块后自动关闭文件.
with EXPR as VAR语句会先计算EXPR并将返回值保存在变量VAR中.
控制流进入代码块时会执行
VAR.__enter__()方法, 退出代码块时执行
VAR.__exit__()方法.
class FileContext: def __init__(self, filename): self.filename = filename self.session = None def __enter__(self): self.session = open(filename, 'r') return self.session def __close__(self): self.session.close() with FileContext('1.txt') as f: for line in f: print(line)
IO
Console IO
>>> print('a', 1) ('a', 1) >>> print([1,2,3,4]) [1, 2, 3, 4] >>> print('%s is lagger than %d' % ('5', 1)) 5 is lagger than 1
input
>>> a = input('please input a:\n') please input a: 1 >>> a 1
File IO
open()
open() 将会返回一个 file 对象:open(filename, mode)
filename参数为要打开的文件名.
mode指定打开方式:
'r' 只读, mode的默认值
'w' 只写, 原有内容将清空
'a' 用于追加文件内容,初始插入位置为末尾
'r+' 同时用于读写
示例:
>>> f = open('/tmp/workfile', 'w')
使用
os.path.getsize(f.name)可以得到文件的字节数, 文件还是一个可迭代对象:
for line in f: print(line)
f.read()
文件对象方法f.read(size), 可以读取一定数目的数据, 然后作为字符串或字节对象返回。size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。
>>> f.read() 'This is the entire file.\n'
f.readline()
f.readline() 会从文件中读取单独的一行。换行符为 '\n'.f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。
>>> f.readline() 'This is the first line of the file.\n' >>> f.readline() 'Second line of the file\n'
迭代一个文件对象然后读取每行:
>>> for line in f: ... print(line, end='') ...
f.readlines()
f.readlines() 将返回该文件中包含的所有行.如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。
>>> f.readlines() ['This is the first line of the file.\n', 'Second line of the file\n']
f.write()
f.write(string) 将 string 写入到文件中, 然后返回写入的字符数。>>> f.write('This is a test\n') 15
f.tell()
返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。f.seek()
如果要改变文件当前的位置, 可以使用 f.seek(offset, from) 函数.from 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾:
seek(x,0) #从起始位置即文件首行首字符开始移动 x 个字符 seek(x,1) #表示从当前位置往后移动x个字符 seek(-x,2) #表示从文件的结尾往前移动x个字符
from的默认值为0,即文件开头。
f.close()
关闭文件。模块与包
模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py模块可以被别的程序引入,以使用该模块中的对象。
这也是使用Python库的方法:
import sys print('命令行参数如下:') for i in sys.argv: print(i) print('/n/nThe PYTHONPATH is', sys.path, '/n')
在解释器的当前目录或者sys.path中的一个目录里面来创建一个.py的文件,其它文件可以将该文件作为模块导入
模块除了方法和类定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入或reload时才会被执行。
如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用
__name__属性来使该程序块仅在该模块自身运行时执行。
if __name__ == '__main__': print('myself') else: print('another model')
包
包是采用目录结构提供命名空间管理模块的方式,在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做
__init__.py的文件才会被认作是一个包,主要是为了避免一些频繁使用的名字影响搜索路径中的有效模块。
Python提供了两种导入语法:
import packages.module
from packages import module
如:
import PyQt4
它必须使用全名去访问:
app = PyQt4.QtGui.QApplication(sys.argv)
或者:
from PyQt4.QtGui import QApplication
它不必使用全名去访问:
app = QApplication(sys.argv)
它也可以只导入一个函数,类或各种对象,例如:
from PyQt4.QtCore import QObject, SIGNAL
它可以选择导入一个包下的所有模块:
from sys import *
Python中一切都是对象, 模块和包都是module对象.
因为有些文件系统的原因,它工作的并不好(如win系fs不区分大小写),所以Python规定:
如果包定义文件
__init__.py存在一个叫做
__all__的列表变量,那么在使用
from package import *的时候就把这个列表中的所有名字作为包内容导入。
相关文章推荐
- python中 __name__的使用
- python pdb调试
- NumPy基础:数组和矢量计算
- python3配置文件ini读取方法
- python 字典知识累积
- 64位Python大数据挖掘--环境搭建
- Python学习资料汇总
- python监听windows上w3wp进程,如果cpu>=95%则自动kill掉
- Python_list
- raw_input() 与 input() __ Python
- Python time、datetime、os、random、sys、hashlib、json、shutil、logging、paramiko、subprocess、ConfigParser、xml、shelve模块的使用
- WIN环境使用python命令提示“不是内部或外部命令”解决方法
- python中pip的使用和安装
- numpy简单入门
- 多服务器管理工具fablinker
- Python2.4.3升级到Python2.7.8
- Python两个内置函数——locals 和globals
- python装饰器详解,from stackoverflow
- python网页爬虫练习
- 微信公众号-人脸识别(python)