Python程序设计入门(1)基本语法简介


Posted in Python onJune 13, 2014

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 2==i: continue #结束当前循环,进入下一步循环
    if 6==i: 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
False
>>> a == 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 arrarr = ['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
>> 右移 把一个数的比特向右移一定数目 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
> 大于 返回x是否大于y 5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。
小于等于 返回x是否小于等于y x = 3; y = 6; x
>= 大于等于 返回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。短路计算在这里也适用。

 

Python 相关文章推荐
一篇不错的Python入门教程
Feb 08 Python
在Python中使用模块的教程
Apr 27 Python
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
python实现按行切分文本文件的方法
Apr 18 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python进程间通信之共享内存详解
Oct 30 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
Python对两个有序列表进行合并和排序的例子
Jun 13 #Python
用Python输出一个杨辉三角的例子
Jun 13 #Python
Python 的 with 语句详解
Jun 13 #Python
python学习笔记:字典的使用示例详解
Jun 13 #Python
Python urlopen()函数 示例分享
Jun 12 #Python
python教程之用py2exe将PY文件转成EXE文件
Jun 12 #Python
Python struct模块解析
Jun 12 #Python
You might like
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
$("").click与onclick的区别示例介绍
2014/09/25 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
详解vue axios二次封装
2018/07/22 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
Python解析xml中dom元素的方法
2015/03/12 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
论文评语大全
2014/04/29 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle