Python小记04
来源:互联网 发布:新页软件 编辑:程序博客网 时间:2024/06/05 15:27
----定义函数,用def语句
def my_abs(x): if x >= 0: return x else: return -x
----函数返回多个值 实际上是反悔了tpple
import mathdef 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, y151.961524227 70.0
但其实这只是一种假象,Python函数返回的仍然是单一值:
>>> r = move(100, 100, 60, math.pi / 6)>>> print r(151.96152422706632, 70.0)
用print打印返回结果,原来返回值是一个tuple!
----定义默认参数
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:
# OK:def fn1(a, b=1, c=2): pass# Error:def fn2(a=1, b): pass
----定义可变参数
如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:
def fn(*args): print args
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数:
>>> fn()()>>> fn('a')('a',)>>> fn('a', 'b')('a', 'b')>>> fn('a', 'b', 'c')('a', 'b', 'c')
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args看成一个 tuple 就好了。
----切片
Python提供了切片(Slice)操作符,能大大简化这种操作。
对应上面的问题,取前3个元素,用一行代码就可以完成切片:
>>> L[0:3]['Adam', 'Lisa', 'Bart']
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
如果第一个索引是0,还可以省略:
>>> L[:3]['Adam', 'Lisa', 'Bart']
也可以从索引1开始,取出2个元素出来:
>>> L[1:3]['Lisa', 'Bart']
只用一个 : ,表示从头到尾:
>>> L[:]['Adam', 'Lisa', 'Bart', 'Paul']
因此,L[:]实际上复制出了一个新list。
切片操作还可以指定第三个参数:
>>> L[::2]['Adam', 'Bart']
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
----range()函数可以创建一个数列
>>> range(1, 101)[1, 2, 3, ..., 100]
----
zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])[(10, 'A'), (20, 'B'), (30, 'C')]
----迭代dict的key和value
dict 对象的 items() 方法返回的值:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }>>> print d.items()[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
>>> for key, value in d.items():... print key, ':', value... Lisa : 85Adam : 95Bart : 59
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
----生成列表
>>> [x * x for x in range(1, 11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。
列表生成式的 for 循环后面还可以加上 if 判断>>> [x * x for x in range(1, 11) if x % 2 == 0][4, 16, 36, 64, 100]
for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。
对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:
>>> [m + n for m in 'ABC' for n in '123']['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
翻译成循环代码就像下面这样:
L = []for m in 'ABC': for n in '123': L.append(m + n)
- Python小记04
- python 小记
- python小记
- python小记
- python 小记
- python 小记
- Python 小记
- Python小记
- python 读http小记
- Python模块subprocess小记
- Python模块subprocess小记
- python基本知识小记1
- PYTHON编码转换小记
- Python模块subprocess小记
- 学习小记--Python--5.31
- 学习小记--Python--6.2
- Python学习小记
- Python模块subprocess小记
- ssi整合开发层次总结
- JAVA多线程实现的三种方式
- Git 远程仓库/ssh
- CSV文件
- 数据结构-AVL树
- Python小记04
- 关于使用新版本的BufferKnife出现NullPointerException的问题
- Android Button 总是在最上层的问题
- PermGen Space的解决办法
- Nmap速查手册
- set
- Http 知识(一)
- 获取spring中的ApplicationContext最简单的方式
- 本周作业