Python基本语法

以下总结源于慕课网的Python入门教程

基本数据类型

  1. 支持类型包括:整型,浮点数,布尔值(TrueFalse,支持运算and,ornot),字符串,空值(None
  2. Python是解析型语言,因此变量无需声明变量类型,一个变量也可以声明为多种类型的变量
  3. 字符串可以用' '," ",''' '''来定义。前两者无明显区别,可在嵌套时交替使用,如:"I'm Tom",'We call him "Tom"'。最后一个用于声明多行字符串,比如:
'''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in imooc!'''
  1. 字符串还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。
    如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
    类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
    Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
    因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串'ABC'在Python内部都是ASCII编码的。
    如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释
 -*- coding: utf-8 -*-

目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为... 并选择UTF-8格式保存。

  1. Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数,但是整数和浮点数混合运算的结果就变成浮点数了。因此在做除法时尤其需要注意精度的丢失问题。

List和Tuple类型

  1. list是一种可变的,有序的集合,可以随时添加和删除其中的元素。通过[]将元素括起来即可构造list对象。
  2. list支持通过索引访问,索引大于等于0时顺序访问,索引小于0时逆序访问。其中-1表示集合中最后一个元素。
  3. 追加用append(item),插入insert(index,item)。删除用pop(index)。替换直接用新元素通过索引替换旧元素L[1] = 'Bob'
  4. tuple,翻译为元组,和list非常相似,但是创建之后就不可变,和创建list唯一不同之处是用( )替代了[ ]。因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号",",这样就避免了歧义。
  5. tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
  6. listtuple和字符串都支持切片操作:
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L[0:3]
['Adam', 'Lisa', 'Bart']
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3;
如果第一个索引是0,还可以省略;
只用一个 : ,表示从头到尾, 因此,L[:]实际上复制出了一个新list。

切片操作还可以指定第三个参数,第三个参数表示每N个取一个,下面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
>>> L[::2]
['Adam', 'Bart']
倒序切片也同理。
>>> 'ABCDEFG'[0:-1:2]
'ACE'

条件判断和循环

  1. if 语句用关键字if表示,后接表达式,然后用:表示代码块开始。缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。具有相同缩进的代码被视为代码块。
age = 20
if age >= 18:
    print 'your age is', age
    print 'adult'
print 'END'
  1. else语句使用关键字else表示,后面跟:。else if使用elif
  2. for 循环使用for x in list语句,后跟:
for x in [ 1,2,3,4,5,6,7,8,9 ]:
    for y in [ 0,1,2,3,4,5,6,7,8,9 ]:
        if x

支持嵌套循环。

  1. while 语句用whilebreakcontinue跟Java用法类似。

Dict和Set类型

  1. dict表示一个map,用花括号 {} 表示,然后按照 key: value,写出来即可。dict是无序的。dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。不过dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。由于dict是按 key 查找,所以,在一个dict中,key不能重复。
d = {
    'Adam': 95,
    'Lisa': 85,
    'Bart': 59,
    'Paul': 75
}
  1. len()用于计算任意集合的大小。
  2. set用set表示,无序集合,且不能重复。创建 set 的方式是调用 set() 并传入一个 listlist的元素将作为set的元素。可以使用in操作符判断元素是否在set中,注意set的元素是大小写敏感的.
s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
>>> 'bart' in s
False
  1. set的更新:插入'add(item)',删除'remove(item)'

函数

  1. 定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。return None可以简写为return
def square_of_sum(L):
    sum = 0
    for num in L:
        sum += num * num
    return sum

print square_of_sum([1, 2, 3, 4, 5])
  1. 允许有多个返回值。其原理其实是返回了一个tuple元组:
import math
def move(x, y, step, angle):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
  1. 支持定义默认参数,但由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面。
# OK:
def fn1(a, b=1, c=2):
    pass
# Error:
def fn2(a=1, b):
    pass
  1. 支持定义可变参数,可变参数的名字前面有个*号,我们可以传入0个、1个或多个参数给可变参数。Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量args 看成一个 tuple 就好了。
def fn(*args):
    print args

迭代

  1. enumerate(list)函数可以将list转成tuple,因此可以在迭代中同时获取到索引和值。
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
... 
0 - Adam
1 - Lisa
2 - Bart
3 - Paul

上面其实是把L变成了类似如下的tuple:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
  1. zip()函数可以把两个list 变成一个list
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
  1. dict 有两个方法:values()itervalues()都可以获取dict的左右value,在遍历时尤其有用。区别在于:
  • values() 方法实际上把一个 dict 转换成了包含 valuelist
  • itervalues() 方法不会转换,它会在迭代过程中依次从 dict中取出 value,所以itervalues()方法比values() 方法节省了生成 list 所需的内存。
  1. dictitems() 方法把dict对象转换成了包含tuplelist,我们对这个list进行迭代,可以同时获得keyvalue。同样的,iteritems()'可实现同样的效果,但是不像前者,后者不把dict转换成list,而是在迭代过程中不断给出tuple,所以,iteritems()` 不占用额外的内存。

列表生成式

  1. range(n,m,step)可以生成一个从n到m的list,每隔step递增。
  2. 列表生成式语法可抽象成如下格式:
[ 列表单个变量x的生成方式 for x in list/dict (+可选:嵌套循环 + 可选:if条件) ]

举例如下:

  • 生成普通的平方列表:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • 生成复杂的表单。注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
    if score<60:
        return '%s%s' % (name, score)
    else:
        return '%s%s' % (name, score)

tds = [generate_tr(name, score) for name, score in d.iteritems()]
print ''
print ''
print '\n'.join(tds)
print '
NameScore
'
  • 按条件过滤:
def toUppers(L):
    return [s.upper() for s in L if isinstance(s, str)]

print toUppers(['Hello', 'world', 101])
  • 复杂的嵌套循环。
print [x*100+y*10+x for x in range(1,10) for y in range(0,10) for z in range(1,10) if x==z]

你可能感兴趣的:(Python基本语法)