参考教程:Home - 廖雪峰的官方网站
Python允许用r''
表示''
内部的字符串默认不转义。
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
一个布尔值只有True
、False
两种值。
布尔值可以用and
、or
和not
运算。
空值是Python里一个特殊的值,用None
表示。
Python对bytes
类型的数据用带b
前缀的单引号或双引号表示:
x = b'ABC'
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
申明了UTF-8编码并不意味着你的.py
文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码。
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
list是一种有序的集合,可以随时添加和删除其中的元素。
另一种有序列表叫元组:tuple一旦初始化就不能修改
dict的key必须是不可变对象。字符串、整数等都是不可变的,因此,可以放心地作为key;而list是可变的,就不能作为key。
set可以看成数学意义上的无序和无重复元素的集合。
数据类型检查可以用内置函数isinstance()
实现:
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
默认情况下,dict
迭代的是key:
>>> for key in d:
... print(key)
如果要迭代value,可以用for value in d.values()
如果要同时迭代key和value,可以用for k, v in d.items()
如果要对list
实现类似Java那样的下标循环怎么办?Python内置的enumerate
函数可以把一个list
变成索引-元素对,这样就可以在for
循环中同时迭代索引和元素本身:
>>> for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
for
后面的if
是过滤条件,不能带else
;for
前面的if ... else
是表达式
>>> [x for x in range(1, 11) if x % 2 == 0]
[2, 4, 6, 8, 10]
>>> [x if x % 2 == 0 else -x for x in range(1, 11)]
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
把函数作为参数传入,这样的函数称为高阶函数。
把这个list所有数字转为字符串:
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
sorted()
函数也是一个高阶函数,它还可以接收一个key
函数来实现自定义的排序,例如按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
匿名函数lambda x: x * x
实际上就是:
def f(x):
return x * x
关键字lambda
表示匿名函数,冒号前面的x
表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不用写return
,返回值就是该表达式的结果。
在Python中,一个.py文件就称之为一个模块(Module)。
把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()
函数,这样可以正确处理不同操作系统的路径分隔符。
要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()
函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:
>>> os.path.split('/Users/michael/testdir/file.txt')
('/Users/michael/testdir', 'file.txt')