数据类型和变量
python语言是动态语言
字符串和编码
- UTF-8是可变长编码,用来转化Unicode编码,UTF-8一个Unicode字符根据不同的数字大小编码成1-6个字节。
- 在python中,Unicode表示的字符串用u’…’表示.
- 将Unicode字符转化为UTF-8字符用
encode('utf-8')
:
1 | u'ABC'.encode('utf-8') |
- 将UTF-8字符转化为Unicode字符用
decode('utf')
:
1 | 'abc'.decode('utf-8') |
- 让python解释器按照UTF-8编码读取文件,需要在文件开头写上如下:
#-*- coding:utf-8 -*-
- python的格式化方法与C 语言一致,用%实现,如:
1 | 'hello, %s' %'world' |
- 有几个%占位符,后面就跟多少个变量,顺序要对应好,如果只有一个%,可省略括号.
- 常见的占位符有,%d整数, %f浮点数,%s字符串,%x十六进制数.
- 格式化整数和浮点数还可以指定是否补0和整数与小数的位数.
- 在格式化字符串中,需要转义%时,可用%%表示.
- 在python 3.x中,’xxxx’和u’xxxx’ 统一成Unicode编码.
使用list和tuple
list的使用
list里面的元素类型可以不同,也可以添加另外一个list
1 | classmates = ['Box', 'Ads'] #创建list变量 |
tuple
tuple类似与list,只是tuple一旦初始化就不可以修改。tuple没有append和insert方法, 获得元素的方法与list一样。
1 | #创建一个tuple |
tuple可以包含list元素,tuple所包含的list元素中的元素内容可以更改。
dict
dict类似与其他编程语言中的map
1 | #创建一个dict |
set
set类似与dict,但是只有key,没有对应的value,在set没有重复的key,创建set需要提供一个list
1 | s= set([1,23,4,5]) |
for循环格式
1 | for x in range(4): #range()可以生成整数序列 |
while 循环格式
1 | while <条件判断> : |
函数
python的函数相当与一个对象的引用。因此,可以将函数赋予一个变量,相当于给函数起了一个 别名。
1 | #函数定义 |
没有写return的函数会返回None。定义一个空函数可以用pass语句
1 | def nothing(): |
pass语句什么都不作,可以用来当占位符使用。 函数不会检查参数类型,我们可以自己加上类型检查,使用isinstance
函数实现
1 | def my_abs(x): |
python函数可以返回多个返回值:
1 | x,y = move(x,y) |
实际上,返回的只是一个tuple,只是写法上简化了。
默认参数
1 | def call_city(x,y, city='beijing',age=12): |
默认参数原则:默认值写在最后面,也可以不按顺序提供部分默认参数,当需要指名参数名:
1 | call_city(x,y, age=12) |
默认参数,最好指向不变对象。
可变参数
可变参数与定义list参数的区别就是在参数前面加个*,例如:
1 | def calc_sum(*numbers): |
对于函数体内部来说,numbers
接受的是一个tuple
。 如果有一个list或者tuple变量,要调用可变参数的话,可以在变量前加*,把list和tuple转化为可变参数
关键字参数
关键字参数会在函数内部自动组装成一个dict。示例
1 |
|
在调用函数时,可以只传入必选参数,也可以传入任意数量的关键字参数。
高级特性
切片
切片操作可以轻松的切成一段数列,例如L
是一个list
1 | # 取前3个元素 |
迭代
dict可以同时迭代key和value:
1 | for k, v in d.iteritems() |
判断一个对象是否可以迭代,可以用collections模块里的iterable类型:
1 | isinstance('abd', Iterable) |
同时迭代索引和元素
1 | for i, value in enumerate(list): |
生成器
生成器只存储算法,需要时才会将后续的元素计算出来,从而节省大量的空间.将上述列表生成式的[]改成()就创建了一个generator
.
1 | g = (x*x for x in range(1,11)) |
创建一个generator
后,可以通过next()
来打印里面的元素,或者使用for
循环迭代.还可以使用yield
关键字,将函数定义成generator
,例如:
1 | def odd(): |
每当调用next()
的时候,遇到yield
语句返回,再次执行时,会从上次返回的yield
语句处继续执行.
函数式编程
所谓高阶函数可以理解为,可以接受另外一个函数作为参数的函数,还可将函数作为返回值.
匿名函数
1 | lambda x: x*x |
lambda表示匿名函数,冒号前面的x表示参数,匿名函数只能有一个表达式.返回值就是该表达式的结果.
装饰器
函数也是个对象,赋给变量,函数还有个name属性,可以获得函数名称.