函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。我们已经知道Python提供了许多内建函数,我们还可以自定义函数。
语法 def 函数名 ([参数列表]) :
注意:
- 1. def行后必须有:,
- 2. 圆括号内是形式参数列表,有多个参数则使用逗号隔开,
- 3. 无参数,也必须保留空的圆括号,
- 4. 实参列表必须与形参列表一一对应,
- 5. 函数体中包含 return 语句,才有返回值。
下面是两个简单的例子。
In [1]: def func(x):
...: if x > 10:
...: print('more than 10')
...: else:
...: print('less than 10')
In [2]: func(7)
less than 10
In [3]: func(12)
more than 10
In [1]: def add(x,y):
...: print(x+y)
In [2]: add(2,4)
6
In [3]: a=add(2,6)
8
In [4]: a
In [5]: def add(x,y):
...: return(x+y)
In [6]: add(3,4)
Out[6]: 7
In [7]: a=add(3,4)
In [8]: a
Out[8]: 7
含其他参数
In [1]: def ar(x,y,method):
...: if method=="+":
...: return(x+y)
...: if method=="-":
...: return(x-y)
...: if method=="*":
...: return(x*y)
...: if method=="/":
...: return(x/y)
...: else:
...: print("error")
In [2]: ar(3,8,'/')
Out[2]: 0.375
如果def ar(x,y,method)换成def ar(x,y,method='+'),则为默认,参数省略时,表示加法。
In [1]: def ar(x,y,method='+'):
...: if method=="+":
...: return(x+y)
...: if method=="-":
...: return(x-y)
...: if method=="*":
...: return(x*y)
...: if method=="/":
...: return(x/y)
...: else:
...: print("error")
In [2]: ar(3,8)
Out[2]: 11
常见函数
1.排序:L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* Type: method_descriptor 。
In [1]: def de(list):
...: size=len(list)
...: avg=sum(list)/size
...: # 计算中位数
...: list.sort()
...: if size%2==0:
...: mid=(list[size//2-1]+list[size//2+1])/2
...: else:
...: mid=list[size//2]
...: print("max is",max(list))
...: print("nin is",min(list))
...: print("ave is",avg)
...: print("mid is",mid)
In [2]: list=[1,3,5,7,9,5]
In [3]: de(list)
max is 9
nin is 1
ave is 5.0
mid is 6.0
In [4]: de([i for i in range (1,100,5)])
max is 96
nin is 1
ave is 48.5
mid is 51.0
2. map(func, *iterables) --> map object
In [1]: def fun(x):
...: return x*x
In [2]: list(map(fun,[1,2,3,4,5]))
Out[2]: [1, 4, 9, 16, 25]
In [3]: list(map(str,[1,2,3,4,5]))
Out[3]: ['1', '2', '3', '4', '5']
In [4]: [fun(i) for i in range (1,6)]
Out[4]: [1, 4, 9, 16, 25]
In [5]: a=[1,2,3,4,5]
In [6]: list(map(fun,a))
Out[6]: [1, 4, 9, 16, 25]
In [7]: list(map(str,list(map(fun,a))))
Out[7]: ['1', '4', '9', '16', '25']
3. 匿名函数(不用再定义):lambda
In [1]: list(map(lambda x:x+10,[1,2,3,4,5]))
Out[1]: [11, 12, 13, 14, 15]
4. dict() -> new empty dictionary
按照列表元素出现次数,将其转化为字典
#方法一
In [1]: a=[1,2,3,4,2,3,5]
In [2]: d={}
In [3]: for i in a:
...: if i in d.keys():
...: d[i]=d[i]+1
...: else:
...: d[i]=1
In [4]: d
Out[4]: {1: 1, 2: 2, 3: 2, 4: 1, 5: 1}
#方法二
In [1]: import collections
In [2]: a=[1,2,3,4,2,3,5]
In [3]: collections.Counter(a)
Out[3]: Counter({1: 1, 2: 2, 3: 2, 4: 1, 5: 1})