本文共 2201 字,大约阅读时间需要 7 分钟。
Python内置了很多有用的函数,可以直接调用
要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数
也可以在交互式命令行通过help(abs)查看abs函数的帮助信息
help(abs)
Help on built-in function abs in module builtins:abs(x, /) Return the absolute value of the argument.
abs(-10)
10
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号;然后,在缩进块中编写函数体,函数的返回值用return语句返回
# 定义一个球两数之和的函数:def add_two(a,b): return a+badd_two(10,22)
32
请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并 将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None
return None可以简写为return
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。
# 求x的平方def power(x): return x*xpower(5)
25
# 求x的n次幂,设置n的默认值为2def power(x,n=2): return x**npower(5,3)
125
设置默认参数时,有几点要注意:
1.必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面) 2.如何设置默认参数当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数
使用默认参数有什么好处?最大的好处是能降低调用函数的难度
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
这里以数学题为例,给定一组数字a,b,c…,计算a+b+c…
要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c,…作为一个list或tuple传进来,这样。函数可以定义如下:
def calc(numbers): amount = 0 for num in numbers: amount += num return amountnumbers = [100,200,3,4]calc(numbers)
307
如果利用可变参数,我们把函数的参数改为可变参数:
def calc(*numbers): amount = 0 for num in numbers: amount += num return amountcalc(1,2,3,4,5,7)
22
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def get_kwatgs(**kwargs): print(kwargs)get_kwatgs(a=10,b="hello",c=["a",1,"bcd"])
{'a': 10, 'b': 'hello', 'c': ['a', 1, 'bcd']}
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
def func(a,b,c=0,*args,**kw): print("a=",a,"b=","c=",c,"args=",args,"kw=",kw)func(10,20,30,"d","e","f",x=99,y="hello")
a= 10 b= c= 30 args= ('d', 'e', 'f') kw= {'x': 99, 'y': 'hello'}
python使用 lambda来创建匿名函数
lambda只是一个表达式,函数体比def简单很多
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
# 定义lambda函数f = lambda x: x*x[f(i) for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
转载地址:http://bdzdf.baihongyu.com/