以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号“:”结尾时,缩进的语句视为代码块。
缩进有利有弊。
好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab。按照约定俗成的管理,应该始终坚持使用4个空格的缩进。
缩进的另一个好处是强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。
缩进的坏处就是“复制-粘贴”功能失效了,这是最坑爹的地方。当你重构代码时,粘贴过去的代码必须重新检查缩进是否正确。此外,IDE很难像格式化Java代码那样格式化Python代码。
最后,请务必注意,Python程序是大小写敏感的,如果写错了大小写,程序会报错。
缩进:有冒号的下一行往往要缩进,该缩进就缩进

数据类型和变量

  • 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
  • 转义字符\
  • 如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r’’表示’’内部的字符串默认不转义
  • 如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用’’’…’’’的格式表示多行内容
  • 空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
  • Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型

  • 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量
  • ==>>这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言(如Java)。
  • 无论整数做除法还是取余数,结果永远是整数,所以,整数运算结果永远是精确的。

    字符串和编码

  • Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

  • ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。
  • 本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码
  • 如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间

2廖雪峰Python--Python基础 - 图1

  • Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换
  • 以Unicode表示的字符串用u’…’表示

字符串’xxx’:ASCII编码,也可以看成是UTF-8编码
u’xxx’则只能是Unicode编码

  • u’xxx’Unicode转为转为UTF8编码 encode(‘utf-8’)
  • len()函数可以返回字符串的长度:
  • 把UTF-8编码表示的字符串’xxx’转换为Unicode字符串u’xxx’用decode(‘utf-8’)方法

!/usr/bin/env python# -- coding: utf-8 --
#!/usr/bin/env python
# -- coding: utf-8 --
print u’中文测试正常!’
申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保Notepad++正在使用UTF-8 without BOM编码

格式化输出

在Python中,采用的格式化方式和C语言是一致的,用%实现
%运算符就是用来格式化字符串的。
在字符串内部,%s表示用字符串替换,
%d表示用整数替换,

‘%.2f’ %3.141592653

‘3.14’

  • 有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

  • 字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:
  • 由于历史遗留问题,Python 2.x版本虽然支持Unicode,但在语法上需要’xxx’和u’xxx’两种字符串表示方式。
  • 在Python 3.x版本中,把’xxx’和u’xxx’统一成Unicode编码,即写不写前缀u都是一样的

    使用List和tuple

    List列表:Python内置的一种数据类型 []

  • list是一种有序的集合,可以随时添加和删除其中的元素

  • 如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素
  • list里面的元素的数据类型也可以不同
  • list元素也可以是另一个list

tuple元组:另一种有序列表 ()

  • tuple和list非常类似,但是tuple一旦初始化就不能修改
  • 没有append(),insert()这样的方法
  • 如果可能,能用tuple代替list就尽量用tuple
  • 只有1个元素的tuple定义时必须加一个逗号,,来消除歧义
  • tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向’a’,就不能改成指向’b’.指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们

条件判断和循环

if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
注意冒号
for…in循环 注意冒号
sum = 0
for x in range(101):
sum = sum + x
print sum
while循环
原来从raw_input()读取的内容永远以字符串的形式返回
birth = int(raw_input(‘birth: ‘))

使用dict

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度
d = {‘Michael’: 95, ‘Bob’: 75, ‘Tracy’: 85}
要避免key不存在的错误,有两种办法:
一是通过in判断key是否存在;

‘Thomas’in d False

二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value

d.get(‘Thomas’) d.get(‘Thomas’, -1) 获取ADS对应的键值,若没有,则返回-1 -1

和list比较,dict有以下几个特点:

  • 查找和插入的速度极快,不会随着key的增加而增加;
  • 需要占用大量的内存,内存浪费多。

而list相反:

  • 查找和插入的时间随着元素的增加而增加;
  • 占用空间小,浪费内存很少。

dict是用空间来换取时间的一种方法
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:

d.pop(‘Bob’) 75

dict的key必须是不可变对象
通过key计算位置的算法称为哈希算法(Hash)

  • 要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、数字、元组等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key
  • list不能作为dict的key
  • dict没有顺序,显示的顺序不是内部顺序

使用set

set类型的使用,相当于数学上的集合
使用dirt和set
s = set([1, 2, 3])
s.add(4)
s.remove(4)
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
set和dict的唯一区别仅在于没有存储对应的value.
但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
再议不可变对象
使用key-value存储结构的dict在Python中非常有用,选择不可变对象作为key很重要,最常用的key是字符串
d = {‘No1’:1,’(1,2,3)’:(1,2,3)}
d[‘(1,2,3)’]