函数
1. 定义函数
def func1():
print('hello world')
func1() ##调用
hello world
2.函数的参数
def func2(name): ##name就是函数func2的参数
print(name + 'world')
func2('helo') ##调用时加参数
heloworld
##
def add(num1,num2): ##python的函数可以支持n个,只要你愿意
result = num1 + num2
print(result)
add(1,4)
5
## 参数可以通过关键字参数定义
def add(num1,num2):
result = num1 + num2
print(result)
add(num1=1,num2=4)
5
函数的参数包括形参和实参
def func2(name): ##name形参
print(name + 'world')
func2('helo') ##hello就是实参
heloworld
3.函数的返回值
def add(num1,num2):
return (num1 + num2) ##return执行返回值
print(add(1,4))
5
4.函数文档
def add(num1,num2):
'这就是函数文档' ##引号内部的为函数文档
## 而这时注释,两者在函数调用中都不打印 ## 井号后面的为注释
return (num1 + num2)
print(add(1,4))
## 可以利用add.__doc__打印函数文档
print(add.__doc__)
'这就是函数文档'
5.默认参数
def add(num1=1,num2=4): ## 1和4就是函数的默认参数
return (num1 + num2)
print(add()) ##不带参数调用函数也不会报错
print(add(2,5)) ##带参数调用函数会替换掉默认参数
5
7
6.收集参数
也叫可变参数, 即在参数面前价格星号*
def test(*params):
print('参数的长度是:', len(params));
print('第二个参数是:', params[1]);
test(1,2,3,4,5,6)
参数的长度是: 6
第二个参数是: 2
7.局部变量和全局变量
count = 5 ##全局变量
def test():
count = 10 ##局部变量
print(count)
test()
## 局部变量可以通过globle关键字改为全局变量
count = 5
def test():
global count ##改为全局变量
count = 10
print(count)
test()
8.内嵌函数
内部函数作用域都在外部函数之内
def fun1():
print('fun1()正在被调用...')
def fun2(): ##fun2()函数就是fun1()的内嵌函数
print('fun2()正在被调用...')
fun2()
fun1()
fun1()正在被调用...
fun2()正在被调用...
9.闭包
def funX(x):
def funY(y): ##内部函数funY()就是一个闭包
return x * y
return funY
funX(4)
<function funX.<locals>.funY at 0x00A78FA8> ##直接调用funX返回的是一个函数,其实就是返回的funY这个函数对象。
## 给定两个参数
def funX(x):
def funY(y):
return x * y
return funY
funX(4)(5)
20
## 直接调用fun1()会报错,因为x会作为局部变量使用
def fun1():
x = 5 ##这里的x=5是在fun2()的外部作用域里,是一个非全局变量的外部变量
def fun2():
nonlocal x ##利用nonlocal关键字让x不是局部变量
x *= x
return x
return fun2() ##不加nonlocal的话,在执行renturn fun2()时,即会出现局部变量x在没有被赋值之前被调用。
print(fun1())
10.lambda表达式
python支持lambda关键字创建匿名函数
def fun(x):
return x * 2
fun(2)
##lambda则可以精简函数定义
lambda x : x * 2
<function <lambda> at 0x00CD8F60> ##可以看出返回的是一个函数对象。使用的时候只需要赋值即可。
g = lambda x : x * 2
g(2)
4
## 也可以是多个参数
g = lambda x, y: x * 2 + y
g(2,4)
8
11.两个BIF
- filter
filter(function or none, interable), 两个函数,一个是函数,另一个为可迭代的序列
##筛选奇数
def odd(x):
return x % 2
temp = range(0,10)
print(list(filter(odd,temp))) ##odd为筛选条件,temp为可迭代的集合
[1,3,5,7,9]
##lambda
print(list(filter(lambda x : x % 2, range(10))))
[1,3,5,7,9]
- map
类似于filter,也是两个参数
print(list(map(lambda x : x * 2, range(10))))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
网友评论