**** Python基础知识****
首先先了什么是Python的用途,打算做哪方面在开发。
一.python语言的发展
python语言诞生于1990年,由Guide van Rossum设计并领导开发。
python语言是开源项目的优秀代表,其解释器的全部代码都是开源的。
编写Hello程序
学习编程语言有一个惯例,即运行最简单的Hello程序,该程序功能是在屏幕上打印输出“Hello World”。程序虽小,但却是初学者接触编程语言的第一步。使用python语言编写Hello程序只有一行代码,如下;
print (“Hello World”)
python语言的特点
python语言是一种被广泛应用的高级通用脚本编程语言。
1、语法简洁:实现相同功能,python语言的代码行数仅相当于其他语言的1/10-1/5.
2、与平台无关:作为脚本语言,python程序可以在任何安装解释器的计算机环境中执行,因此,用该语言编程的程序可以不经修改的实现跨平台运行。
3、粘性扩展:python语言具有优异的扩展性,体现在它可以集成C、C++、Java等语言编写的代码,通过接口和函数库等方式将他们“粘起来”。此外,python语言本身提供了良好的语法和执行扩展接口,能够整合各类程序代码。
4、开源理念:对于高级程序员,python语言开源的解释器和函数库具有强大的吸引力,更重要的,python语言倡导的开源软件理念为该语言发展奠定了坚实的群众基础。
5、通用灵活:python语言是一个通用编程语言,可用于编写各领域的应用程序,这为该语法提供了广阔的应用空间。几乎各类应用,从科学计算、数据处理到人工智能、机器人,python语言都能够发挥重要作用。
6、强制可读:python语言通过强制缩进(类似文章段落的首行空格)来体现语句间的逻辑关系,显著提高了程序的可读性,进而增加了python程序的可维护性。
7、支持中文:python3.0解释器采用UTF-8编码表达所有字符信息,UTF-8编码可以表达英文、中文、韩文、法文等各类语言,因此,python程序在处理中文时更加灵活且高效。
8、模式多样:尽管python3.0解释器内部采用面向对象方式实现,但python语法层面却同时支持过程和面向对象两种编程方式,这位使用者提供了灵活的编程模式。
9、类库丰富:python解释器提供了几百个内置类和函数库,此外,世界各地程序员通过开源社区贡献了十几万个第三方函数库,几乎覆盖了计算机技术的各个领域编写python程序可以大量利用已有的内置或第三方代码,具备良好的编程生态。
二.在Python中导入模块中的对象有以下 几种方式分别是:
1.import 模块名【as 别名】
2.form 模块名 import 对象名【as 别名】
3.from math impor*.
三.Python程序设计入门(1)基本语法简介
Python是当今日趋流行的一种脚本语言,它比Java更简单,比php更强大,并且还适用于做桌面应用的开发,在ubuntu中,更加是必须的一种脚本引擎,所以有必要去学习一下,这里的文章只针对有一定编程基础,最好是比较熟悉php或javascript的用户,如果没任何基础的新手建议找更详细的教程去学习。
Python的变量是不需要定义的,这方面和php一样,它比javascript还是宽松,不过它是用缩进作为段落标识的,作为习惯了C语言风格语法的人,可能一开始会很不习惯使用,但细一想,其实也是很正常,很合理的。虽然Python在面向过程/面向对象方面也是很宽松,但实际上一般的程序都是一个主入口,然后不断调用其它类库或函数,所以用缩进的方式并无不妥,那样一方面要求用户写代码时要规范,另一方面反向省去了多余的{}。
与C语言风格相比,Python主要语法特点而下:
1、变量、字符串
在python中,所有变量都是对象,数组其实是一个链表,并且可以进行相应的链表操作。
1.1 对于普通数据类型,定义/赋值方法都是一样的,这里不作介绍,python的字符串方面有些特别,这里介绍一下。
python对字符串用 [’]["] 括起含义是一样的,同样对特殊字符使用 [] 进行转义
不过它有一个很特别的语法就是:[’’’]三引号,它用于括起分多行的字符串,实际是这也可以作为它的多行注解,如:
复制代码 代码如下:
-- coding: gb18030 --
‘’’
单独使用三引号,字符串因为没有使用,就相当于注解了
下面是给一个变量赋值
‘’’
str = ‘’’ 我是一个三引号,'oh!‘我可以换行,
换行了,照样OK ‘’’
print str
这样的语法很有趣吧。
需要特别注意的是,如果源码里有中文的,一定要在源码的第一行定义:
-- coding: gb18030 --
当然,你也可以使用utf-8编码,这看你是在linux还是在windows下调试了。
1.2 此外关于变量方面,有几个内置类型是有必要了解的,它们是:None、True、False (注意:python的变量是严格区分大小写的)
None 是表示没定义的变量,至于True/False这个谁都知道了吧,呵呵。
注解:除了用 ‘’’ 作多行注解之外,也可以用 # 作为单行注解,这是linux下的脚本语言的常规做法了。
续行:python 中对于太长的行,可以用 \ 表示未结束,这和linux的shell的通用做法是一致的。
1.3 数组定义:
arr = [‘a’, ‘b’, ‘c’]
等同于
arr = []
arr += [‘a’]
arr += [‘b’]
arr += [‘c’]
#遍历方法:
for i in range(0, len(arr)):
print arr[i], “\n”
python的数组实际不是数组,而是一个list对象,如果要参考它的用法,可以参考这个对象的方法。
需要注意的是,python的数组实际是一个链表,因此定义后不能像php之类语言一样,直接在后面追加元素,而是需要用操作链表的方法操作。在上述例子中:如果用 arr[2] = ‘ccccc’ 可以改变第三个元素的值,但如果用 arr[3] = ‘dddd’ 增加一个元素是会指错的,应该用:arr.append(‘ddddd’) 或 arr.insert(任意位置, ‘dddd’) 增加元素
对于多维数组,定义方式为: arr = [[]] * 3 它定义的是:[[], [], []],也可以用 arr = [[] for i in range(3)]
对于数组和字符串等常用操作,后面会有一章专门介绍,这里就不在列举更多的使用方法。
2、区块的定义(如语句、函数等)
Python的区块的格式都是
区块代码:
区块内部的代码
它怎么判断区块结束呢?它不同VB、Dephi之类,区块都是有结束标志的,它没有,它是纯粹根据缩进来识别的,这样虽然有点怪异,不过习惯了会觉得也是挺好的。
区块基本定义语法:
2.1. if / elif / else
复制代码 代码如下:
x=int(raw_input(“Please enter an integer:”)) #获取行输入
if x>0:
print ‘正数’
elif x==0:
print ‘零’
else:
print ‘负数’
Python中没用三问运算符,不过可以用 (满足条件的值 if 满足条件 else 未满足条件的值) 替代
如: str = (‘ok’ if 1>2 else ‘not ok’)
最终结果是: str == ‘not ok’
这里需要说明的一个地方是,python中没有 !、&& 和 || 运算符,而是用 not、and、or
2.2. in
in判断 一个数 是否在 一个集合(如:元组,列表等) 中
if ‘yes’ in (‘y’,‘ye’,‘yes’):
print ‘ok’
与之相对应的还有 not in
2.3. for … in
python中没有类似C 中的for循环,而是使用for…in来对集合中的每一个元素进行操作
复制代码 代码如下:
a=[‘cat’,‘door’,‘example’]
for x in a:
print x
等同于:
复制代码 代码如下:
for i in range( 0, len(a) ):
print a[i]
如果要修改a的内容,请用a的副本循环 (否则不安全),如:
复制代码 代码如下:
a=[“cat”,“tttyyyuuu”]
for x in a[:]:
if len(x)>6: a.insert(0,x)
print a
结果为:
[‘tttyyyuuu’, ‘cat’, ‘tttyyyuuu’]
2.4. break / continue
这两个的用法和其它C语法类的语言相同
复制代码 代码如下:
for i in range(10):
if 2i: continue #结束当前循环,进入下一步循环
if 6i: break #跳出循环
print i
结果为:
0
1
3
4
5
2.5. while / pass
while True:
pass #什么也不做
2.6. is
用来比较两个变量是否指向同一内存地址(也就是两个变量是否等价) 而 == 是用来比较两个变量是否逻辑相等
复制代码 代码如下:
a = [1,2]
b = [1,2]
a is b
Falsea == b
True
2.7. del
用于删除元素
复制代码 代码如下:
a=[1,2,3,4,5,6]
del a[0]
a
[2,3,4,5,6]
del a[2:4]
a
[2,3,6]
del a[:]
a[]
del a
a
#抛出异常
NameError: name ‘a’ is not defined
2.8. try … except … finally / raise
用于异常处理
复制代码 代码如下:
try:
x=int(raw_input(“请输入数字:”))
except ValueError: #可以同时捕获多个异常,写法如except(RuntimeError,ValueError):
print “您输入不是数字” #当输入非数字时
except: #省略异常名,可以匹配所有异常,慎用
pass
else: #当没有异常时
print ‘result=’, x
finally: #和Java中类似。一般用于释放资源,如文件,网络连接。
print ‘finish’
raise用于抛出异常,可以为自定义的异常类
这里需要特别注意的是 try 语句内部不应该有完成某个操作的语法,而是需要写在
else: 后面,这和其它语言是很不同的,例如在 try 后面写个 print 它是不会显示任何东西的。
惯例是以Error结尾的类,同类的异常一般派生自同一个基类(如Exception)
复制代码 代码如下:
class MyError(Exception):
def init(self,value):
self.value=value
def str(self):
return reper(self.value)
基类异常可以匹配派生类异常
复制代码 代码如下:
try:
raise Exception(“spam”,“egg”)
except Exception,inst: #inst为该异常类的实例,为可选项
print type(inst) #异常的类型
print inst
2.9 函数的定义
def 函数名(参数列表):
函数代码
return 返回值(可选)
复制代码 代码如下:
def get_arr(arr):
arr.insert(0, ‘aaa’)
return arr
arr = [‘1’,‘2’,‘3’]
new_arr = get_arr(arr)
print new_arr
结果为:[‘aaa’, ‘1’,‘2’,‘3’]
默认参数:
其中在后面的参数,允许初始化一个默认值,如:def myfunc(a, b=0, c=‘aaa’) :
参数关键字:
python的函数还有一个变态的使用方法,就是调用时可以不按参数顺序,而是直接用 key=value这样的键值对表示参数,如:
myfunc(c=‘ggggg’, a=0)
可变参数:
用 *key 表示,也是必须在参数表未尾
如:
复制代码 代码如下:
def fprintf(file, format, *args):
file.write(format % args)
关于类和包的定义,在第三章会专门介绍,这里先不作说明。
3、附注——Python的运算符
运算符
名称
说明
例子
- 加 两个对象相加 3 + 5得到8。‘a’ + ‘b’得到’ab’。
- 减 得到负数或是一个数减去另一个数 -5.2得到一个负数。50 - 24得到26。
- 乘 两个数相乘或是返回一个被重复若干次 的字符串 2 * 3得到6。‘la’ * 3得到’lalala’。
** 幂
返回x的y次幂
3 ** 4得到81(即3 * 3 * 3 * 3)
/ 除 x除以y 4/3得到1(整数的除法得到整数结 果)。4.0/3或4/3.0得到1.3333333333333333
// 取整除 返回商的整数部分 4 // 3.0得到1.0
% 取模 返回除法的余数 8%3得到2。-25.5%2.25 得到1.5
<< 左移 把一个数的比特向左移一定数目(每个 数在内存中都表示为比特或二进制数字,即0和1) 2 << 2得到8。——2按比特表示为10
右移 把一个数的比特向右移一定数目 11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。
& 按位与 数的按位与 5 & 3得到1。
| 按位或 数的按位或 5 | 3得到7。
^ 按位异或 数的按位异或 5 ^ 3得到6
~ 按位翻转 x的按位翻转是-(x+1) ~5得到6。
< 小于 返回x是否小于y。所有比较运算符返 回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。
大于 返回x是否大于y 5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。
<= 小于等于 返回x是否小于等于y x = 3; y = 6; x <= y返回True。
= 大于等于 返回x是否大于等于y x = 4; y = 3; x >= y返回True。
== 等于 比较对象是否相等 x = 2; y = 2; x == y返回True。x = ‘str’; y = ‘stR’; x == y返回False。x = ‘str’; y = ‘str’; x == y返回True。
!= 不等于 比较两个对象是否不相等 x = 2; y = 3; x != y返回True。
not 布尔“非” 如果x为True,返回False。 如果x为False,它返回True。 x = True; not y返回False。
and 布尔“与” 如果x为False,x and y返回False,否则它返回y的计算值。 x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象 称为短路计算。
or 布尔“或” 如果x是True,它返回True, 否则它返回y的计算值。 x = True; y = False; x or y返回True。短路计算在这里也适用。