对某一类操作进行封装既可以获得函数,在java中成为方法。函数是抽象的基本语法。
1. 系统函数
python提供了许多已经定义好的函数,只需要调用方便人们使用。如获取绝对值(abs)、长度(len)、最大(max)/最小(min)值等。
>>> abs(-11.2)
11.2
>>> abs(1)
1
>>> max(3,1,2,4,7,3,5)
7
>>> min(3,1,2,4,7,3,5)
1
>>> len('abcd')
4
>>> divmod(7,3)
(2, 1)
>>> round(11)
11
>>> int('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a'
>>> int('1')
1
2. 自定义函数
函数定义
Python中函数使用“def”关键字定义,然后为函数名、括号、括号里的参数、“:”,换行后缩进中定义函数的具体代码块,如果有返回值使用“return”关键字(无返回值时会返回None)。
1)、参数可以为无参数、一个或者多个参数。
如下,定义一个无参数的printHello函数、和一个做加法的add函数。>>> def printHello(): ... print('hello python') ... >>> printHello() hello python >>> >>> def add(a,b): ... return a+b ... >>> add(1,3) 4
2)、参数默认值。参数可以设置默认值,设置后该参数可以不传,在函数中使用默认值,也可以使用参数名=值传递默认值(调用函数有多个默认值不全部传时)。
>>> def printMy(name,age=12): ... print('Hello, My name is ',name,', age is ',age) ... >>> printMy('zhangsan') Hello, My name is zhangsan , age is 12 >>> printMy('zhangsan',20) Hello, My name is zhangsan , age is 20 >>> printMy('zhangsan',age=13) Hello, My name is zhangsan , age is 13
3)、可变参数。可变长度参数可以传入一个list或tuple,也可以使用 “*参数名”传入参数。循环参数列表的方法相同。如下:
>>> def testList(list): ... sum=0 ... for num in list: ... sum = sum+num ... return sum ... >>> list=[1,2,3,4] >>> testList(list) 10 >>> list=[1,2,3,4,5,6] >>> testList(list) 21 >>> >>> def test(*nums): ... sum=0 ... for num in nums: ... sum=sum+num ... return sum ... >>> test(1,2) 3 >>> test(1,2,3,4,5) 15
4)、关键字参数使用 “**参数名”传入参数。传入参数在函数中自动转换为dict。
>>> def test3(name,**ss): ... print('name:',name) ... print('ss:',ss) ... >>> test3('zhangsan') name: zhangsan ss: {} >>> test3('zhangsan',s1='zhangsan') name: zhangsan ss: {'s1': 'zhangsan'} >>> test3('zhangsan',s1='zhangsan',s2='lisi') name: zhangsan ss: {'s1': 'zhangsan', 's2': 'lisi'} >>>
函数使用
1)、使用函数名、参数值调用。
2)、将变量指向函数,并且使用变量执行。ss = abs(-11)
ss
11
ss = abs
ss(-10)
11
3)、匿名函数lambda x:x*x,匿名函数参数为x,函数内容为x*x。
4)、装饰器 @函数名(参数)