1、函数的概念
函数是软件最基本的组成单位。
程序设计中,一些代码的功能是相同的,操作是一样的,只不过针对的数据不一样。此种情况下,可以将这种功能写成一个函数模块,要使用此功能时只需调用这个函数模块就可以了。
2、定义函数和调用
定义函数:其实就是把具有独立功能的代码段组织成一个代码块,以便在需要时使用,定义函数就是封装独立的功能。
2.1、内置函数
Python语言中自带的函数叫做内建函数,这些内建函数对大部分常用操作进行有效封装,可以直接调用,
2.2、自定义函数
当内建函数不能满足要求时,开发者可以根据实际需要自定义函数。函数自定义完成后,开发者可以在其他代码处通过函数名调用。
2.3、定义函数的格式
- 定义函数时使用 def(空格)后面紧跟着函数名和圆括号()
- 函数名和变量名都属于标识符,命名时要符合标识符规范并且不能是关键字
- 函数的内容也就是函数体有缩进。
2.4、函数的调用
函数调用其实就是享受这个封装的成果。
调用函数非常简单,只需要写上函数名()即可。
def hello(): #函数定义
print("hello world!")
hello() #函数调用
3、函数的参数
参数本质上就是变量。
3.1、形参和实参
形参:形式参数,指的就是定义函数时的参数。
实参:实际参数,调用函数时的赋值,本质就是实际值。
实参和形参个数与形式要一致。
def sum(a, b):
print(a+b)
sum(2, 3)
3.2、默认参数
编写函数时,可给每个形参指定默认值。在调用函数时,如果给形参提供了实参,Python语言将使用指定的实参值;否则,将使用形参的默认值
要注意的是,设置默认参数时,必选参数在前,默认参数在后,否则Python语言的解释器会报错
def area1(width, height = 5):
return width * height
width1 = 3
height1 = 6
print(area1(width1)) # 计算结果为width1与默认值5的乘积
print(area1(width1, height1)) # 计算结果为width1与height1的乘积
3.3、不定长参数
在Python语言中,函数还可以定义不定长参数,也叫可变参数。
def test(a, b, *args, **kwargs):
print(args)
print(kwargs)
s = a + b + args[0] + args[1]
return s
print(test(1, 2, 3, 4, 5, name = 'test', name1 = 'test1'))
#传参过程中,a会赋值为1,b会赋值为2,其余参数会打包成元组,赋值给args,键值对参数赋值给kwargs
3.4、关键字参数
关键字实参是传递参数时使用“名称–值”对的方式,在实参中将名称和值关联起来。
关键字实参让开发者无需考虑函数调用中的实参顺序,清楚地指出了函数调用中各个值的用途。
关键字参数有扩展函数的功能。
def test1(name1 = None, name2 = 'test'):
print(name1, name2)
test1(name1='test1', name2='test2')
4、函数的返回值
返回值:程序中函数在完成计算后最终返回给调用方的结果。
在python中返回值是通过 return 带回的。
return表达式
Return表示函数的结束,后续代码不再执行。不带return 表达式的函数相当于返回了None
def func():
return 2 + 3
print(func())
5、定义函数
5.1、不带参数不带返回值
def 函数名():
函数体
def hello():
print("hello world!")
hello()
5.2、带参数不带返回值
def 函数名(参数1,参数2):
函数体
def sum(a, b):
print(a+b)
sum(2, 3)
5.3、不带参数带返回值
def 函数():
函数体
return 表达式
def func():
return 2 + 3
print(func())
5.4、带参数带返回值
def 函数(参数1,参数2):
函数体
return 表达式
def area(width, height):
return width * height
width = 2
height = 3
print(area(width, height))
6、变量的作用域
局部变量:指的是定义在函数内的变量,只能在函数体内使用
全局变量:定义在函数外的变量,整个程序都能使用。
局部变量和全局变量名字一样的时候,则局部变量会屏蔽全局变量。也就是就近原则。
全局变量名称一样,后面的会覆盖前面的。局部变量名称之间可以重复互不影响。
y = 2
def fn():
x = 1
global z
z = 3
print('函数内调用全局变量', y)
print('函数内调用局部变量', x)
fn()
print('函数外调用全局变量', y)
print('函数外调用局部变量', x) # 调用会报错:NameError: name 'x' is not defined
print('函数内定义的全局变量', z)
7、函数的嵌套
函数的嵌套指的就是一个函数中又包含另外一个函数。
def func1():
print("函数1的内容")
def func2():
print("函数2的内容")
func1()
func2()