Python函数
一、定义函数
自定义函数的语法格式如下:
def 函数名(形式参数列表):
函数体
return 返回值
自定义函数说明:
1、def关键字表示定义函数
2、在形参右边的括号后添加英文的冒号
3、在函数体前要进行缩进(Python中推荐使用4个半角空格)
4、如果没有返回值,return语句可以省略
# coding=utf-8
def rect_area(width,height):
area = width * height
return area
def print_area(width,height):
area = width * height
print("{0:0.2f} * {1:0.2f}长方形面积为:{2:0.2f}".format(width,height,area))
二、调用函数
当定义好函数后,则可以调用函数了。
使用位置参数调用函数
在调用函数时传递的实参与定义函数时的形参顺序一致,这种方式是调用函数的基本形式,也是基本的使用方式
![](https://i-blog.csdnimg.cn/blog_migrate/2833a03329d323c79b121ec8367c5511.png)
使用关键字参数调用函数
当调用函数时可以使用"关键字=实参"的形式进行,其中关键字的名称就是定义函数时的形参名称
![](https://i-blog.csdnimg.cn/blog_migrate/832e52fc11dbd4cc0e830a3134974226.png)
三、参数的默认值
在一些编程语言中有函数重载的概念,也就是可以定义多个同名的函数,但是它们的参数列表是不同的,这样就可以实现传入不同的实参,然而在Python中是不支持的,Python中的参数默认值有点类似这种概念。
![](https://i-blog.csdnimg.cn/blog_migrate/09de0cd25f3a21dacc9534bba6425981.png)
四、可变参数
基于元组的可变参数,形式参数表示形式(*可变参数)
![](https://i-blog.csdnimg.cn/blog_migrate/67183a12ee1e3802f2528ce1a2a39578.png)
基于字典的可变参数,形式参数表示形式(**可变参数)
![](https://i-blog.csdnimg.cn/blog_migrate/0d6cc8b44573b58c02659074b419a605.png)
五、函数中变量的作用域
变量在模块中创建,作用域是整个模块,称为全局变量。变量也可以在函数中创建,在默认情况下作用域是整个函数,称为局部变量。
# coding=utf-8
x = 20 # 全局变量x
def show_value():
x = 10 # 局部变量,它会屏蔽全局变量x
print("函数中x={0}".format(x))
show_value() # 调用函数
print("全局变量X={0}".format(x))
注意:尽量不要在模块和函数中定义两个同名的变量,以免产生代码阅读上的混淆
在函数中定义的变量如果加上global修饰则会把它提升为一个全局变量,把上面的代码做如下修改
# coding=utf-8
x = 20 # 全局变量x
def show_value():
global x # 把函数中定义的变量提升为全局变量
x = 10 # 注意这里不可以定为global x = 10
print("函数中x={0}".format(x))
show_value() # 调用函数
print("全局变量X={0}".format(x))
注意:global 修饰变量的时候不可以赋值,赋值要单独再写;这个时候程序两次输出x的值都是10
六、函数类型
Python中的任何一个函数都有数据类型,这种数据类型为function,被称之为函数类型
函数类型的数据与其他类型的数据是一样的,任意类型的数据可以作为函数返回值使用,还可以作为函数参数使用,因而一个函数可以作为另一个函数返回值使用,也可以作为另一个函数参数使用。
![](https://i-blog.csdnimg.cn/blog_migrate/2e51c72f8b231664a731a358956185ff.png)
过滤函数filter()
这个函数用来对容器中的元素进行过滤处理。它的语法:filter(function,iterable),其中function是一个提供过滤条件的函数,返回布尔值。iterable是一个容器类型数据。
# coding=utf-8
def f(x):
return x>=50
d = [78,98,39,20,50,64]
filtered = filter(f,d) # 这里得到的是一个filter object
print(filtered)
d1 = list(filtered) #转换为列表
print(d1)
映射函数map()
这个函数用来对容器中的元素进行映射(或者变换),比如我们想把容器中的所有元素都乘以5
map()函数的语法:map(function,iterable)
function是一个提供变换规则的函数,返回的是变换后的元素
# coding=utf-8
# 变换函数
def f(x):
if x>10 and x<100:
return x / 2
else:
return x
d = [20,30,1,5,10]
mapped = map(f,d)
d1 = list(mapped)
print(d1)
七、lambda()函数
lambda关键字用来定义匿名函数。这种函数又称为lambda()函数,定义的语法如下
lambda 参数列表:lambda体
注意:lambda体部分不能是一个代码块,它只能有一条语句,语句会计算一个结果并返回lambda()函数,注意这里的返回是不用写return的
# coding=utf-8
def calc(opr):
if opr == '+':
return lambda a,b:(a + b)
else:
return lambda a,b:(a - b)
f1 = calc('+')
f2 = calc('-')
print("20 + 10 = {0}".format(f1(20,10)))
print("20 - 10 = {0}".format(f2(20,10)))
# coding=utf-8
d = [78,98,39,20,50,64]
filtered = filter(lambda x:(x>50),d)
d1 = list(filtered)
print(d1)
mapped = map(lambda x:(x*2),d)
d2 = list(mapped)
print(d2)