常用函数
Python 函数的一些用法可以直接通过 help(函数名) 查看,例如
>>> help(abs)
abs(...)
abs(number) -> number
Return the absolute value of the argument.
通过 q 键退出查看
更多 API 可以直接上官网查看。
数学相关
abs()
绝对值
max()
、min()
最大值和最小值 参数可以传集合,如果是 dict
就按 key
的值排序,输出的也仅是 key
。
pow()
乘方
类型转换
int()
long()
float()
str()
list()
…
字符串相关
split()
切割
capitalize()
首字母大写
··· 其实和别的语言都差不多
序列处理
这个是否常用不是很清楚,但是比较有意思,许多方法和 JavaScript 中的方法大同小异,不过感觉这个写起来更加的简洁。
filter() 过滤序列
filter(function, iterable)
例如:
1 | lambda x:x%2==0, [1,2,3,4,5,6]) filter( |
直接过滤出偶数。
zip() 并行遍历
1 | 'z','l','f'] name = [ |
当集合长度不一样的时候,取最短的。如果是 dict
就只用 key
。
map() 并行遍历
有点像是上面两个函数的结合。
接收至少两个参数,第一个是函数,后面是集合。该函数是针对集合的单个元素。第一个函数可以直接是 None ,其效果就和 zip()
相同。
reduce() 归并
和上一个方法类似,但是它的函数是按顺序叠加生效的:
1 | 101) listtt = range( |
方法中必须是两个参数,否则会报错:
1 | lambda x,y,z:x+y+z,listtt) reduce( |
(上面的 stind 是 standard input 的缩写)
定义函数
Python 定义函数用 def
语句:
1 | #!/usr/bin/env python |
注意冒号和缩进就行。
空函数
一个什么也不想做的空函数,可以用 pass
函数。
返回值
一个或者多个都行,其实多个也是一个(元组)。
函数参数
很酷!
默认参数
Python 是不支持函数的重载的。
一开始没有想明白,然后我搜了这个问题之后豁然开朗。
首先对于函数重载的重要性不用多说,支持不同类型和不同个数的参数。
但是 Python 函数本身就对参数类型没有限制,而对于不同个数,Pyhton 的处理很妙。
看段代码应该就能够理解了
1 | def funcc(x,y=6): |
结果是 30 。
1 | def funcc(x,y=6): |
结果是 20 。
给函数的参数设置了缺省值,不同的参数个数同一个函数执行,从而也达到了类似于重载的效果
可变参数
传入的参数个数不确定,(其实 Java 也是有的),其实就是将传入的参数封装成一个 tuple。
具体写法:
1 | def addd(numbers): |
这个括号一定要加,否则会报错 TypeError: addd() takes exactly 1 argument (5 given)
。
如果不想加这个括号也可以这么写:
1 | def addd(*numbers): |
在定义函数参数的时候加上一个星号,如果加了星号还加括号也会报错的 TypeError: can't multiply sequence by non-int of type 'list'
。
如果是已经存在了一个集合,想直接传入集合:
1 | def addd(*numbers): |
这里定义中的参数前的星号和,传入的参数的星号缺一不可。
关键字参数
说是关键字参数好像也不是很准确。
像是另一种可变参数的体现。
它是将传入的参数封装成 dict 。
举个例子,当我们注册一个网站的会员时,要填写一些基本信息,通常是带星号为必须要填写的,其他的就是可选的:
1 | def infoo(name,sex,**other): |
运行结果:name: zlf sex: male other: {'city': 'hangz'}
另外,一般 Python 的习惯写法是:
可变参数用 *agrs 表示
关键字参数用 **kw 表示
递归函数
没什么特别的。
高阶函数
sorted() 又是和 JS 差不多。
除了可以正常的使用,例如:
1 | 32,42,32,23,21,13] listtt = [ |
还可以加个条件再排序:
1 | -2,3,-1,32,-23,-54] listtt = [ |
来个稍微复杂点的,给一个字典,根据 key 或者 value 来排序:
1 | L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] |
运行结果是:
1 | [('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)] |
函数作为返回值
关于这种用法,在 JavaScript 中也是经常用到。
这个时候就需要,也必须先理解“闭包”这个概念。
这个概念我找了很多文章,但是都觉得非常的抽象以及概念化。因为之前接触最多的是 Java ,而 Java 中函数和变量完全是两个不同的东西,所以理解起来不是很顺利。
直到看到阮一峰老师的这篇介绍,举了很多例子,觉得易于理解。
我简单总结了一下。
就是通过 return 的方式将内部函数当成是变量返回给外部函数,外部函数通过这个桥梁可以读取函数内部的变量。
匿名函数
举个例子:
lambda x: x*x
就相当于
1 | def f(x): |
偏函数
functools
模块中的一个功能,Partial function。
例如函数 int()
可以将字符串变成整数,也可以做进制的转化:
1 | '123',base=8) int( |
是将当前的数字转成 10 进制。
当我们需要重复使用转化成 2 进制这个方法的时候,就需要不停的多写一个重复的参数:
int(x,base=2)
当然首先想到的就是定义一个带默认参数的函数:
1 | def int2(x,base =2): |
这样封装之后就变得好用了。
我们说到的偏函数就是用来更加方便的创建这种类型的函数:
1 | import functools |
结果当然是输出 5 。