简介
具有实现某种特定功能的代码块,当程序需要这个功能时,就可以直接调用这个函数,避免重复编写。
Python中函数可分为内建函数和自定义函数。内建函数是Python已经定义好的函数,可以直接使用。我们主要学习的是自定义函数。
函数定义
语法格式:
def 函数名(参数):
函数体(功能代码)
- def (define,定义) 为一个关键字,表示定义一个函数函数名是一个标识符,要符合基本的定义规则,注意不能和关键字重名
- 小括号内用于定义参数,参数个数可自由选择个数,注意小括号不能省略
- 函数体以冒号作为起始点,并且缩进函数体的第一行语句用来选择性地使用文档存放函数的说明(作者 ,函数描述,完成日期 ...)
- return [表达式] 用来结束函数,将表达式的值返回给调用者,也可省略。
def sub(a,b):
"""
求两数之和
:param a: 相加的第一个数
:param b: 相加的第二个数
:return: 相加之和
"""
c = a+b
return c
d =sub(2,6)
print(f"函数sub返回结果:{d}")
函数参数
参数列表是由一系列的参数组成,使用逗号分开,在调用函数时,需要向函数传递参数,被传入的参数称为实参,函数定义时的参数称为形参。
位置参数
def sub(a,b):
"""
求两数之和
:param a: 相加的第一个数
:param b: 相加的第二个数
:return: 相加之和
"""
c = a+b
return c
d =sub(2,6)
print(f"函数sub返回结果:{d}")参数
调用函数时,根据函数定义的参数位置来传递函数
关键参数
关键参数指通过对形参赋值的方式传递参数,避免了传递实参过程中,与定义函数的形参顺序不一致的情况。
def sub(a,b):
"""
求两数之和
:param a: 相加的第一个数
:param b: 相加的第二个数
:return: 相加之和
"""
c = a+b
return c
d =sub(a=2,b=89)
print(f"函数sub返回结果:{d}")
默认参数
在函数定义时参数列表中的某个形参有值,则这个参数为默认参数。默认参数必须放在非默认参数的右侧。否则函数将出错。
def sub(a,b,a1=56):
"""
求两数之和
:param a: 相加的第一个数
:param b: 相加的第二个数
:param c: 固定参数
:return: 相加之和
"""
c = a+b+a1
return c
# d =sub(2,6)
d =sub(a1=3,a=2,b=89)
print(f"函数sub返回结果:{d}")
不定长参数
提供不定长参数的方式有两种:*args和**kwargs
args 元组传值:多给的值,都会给到 *args 参数里,以元组形式:
def sub(a,b,*args):
"""
:param a:
:param b:
:param args: 不定参数
:return:
"""
print(a,b,args)
sub(1,7)
sub(1,7,6)
不定长参数,除了将数据类型存在元组中,还可以将其存放在字典中,需要使用 **来实现
def sub(a,b,*args,**kwargs):
"""
:param a:
:param b:
:param args: 不定参数
:param kwargs: 不定参数
:return:
"""
print(a,b,args,kwargs)
sub(1,7)
sub(1,7,6,c=58)
#结果:
1 7 () {}
1 7 (6,) {'c': 58}
将列表、元组和字典中的元素传递给 形参 a,b,c * 和 ** 一起使用
def sum(a, b, c):
return a + b + c
print(sum(*(1,),**{'b': 2,'c': 3}))
函数返回值
调用函数的目的是为了实现某些特定的功能,有时候需要对结果数据进行返回。
return 语句实现了从函数内部向函数外部的输出数据
如果函数定义时省略return ,或者只有return,没有返回值,则Python默认该函数为 ”return None“ 。None代表没有值。
def print_out():
print("小C学安全")
print(print_out())
#结果:
小C学安全
None
return可以放在函数中的任何位置,当执行到return 语句时,程序返回到调用程序处,执行后面的代码。而不会执行该函数中return 语句后面的代码。
如果函数的返回值有多个,使用一个变量来接收时,多个值实际上构成了一个元组
变量作用域
局部变量
在函数内部定义的普通变量,只在函数内部起作用,当函数执行结束后,局部变量自动删除,不能再使用。称为局部变量
def func1():
a = 2
print("func1函数中的a值为%d " % a)
def func2():
a = 8
print("func1函数中的a值为%d " % a)
func1()
func2()
#print(a) #程序执行报错
全局变量
变量可以同时被函数内外使用,称为全局变量。有些函数内部的变量想被函数外部使用,需要使用关键字 global 来修饰局部变量,使其变为全局变量。
a =80 #全局变量
def func():
a=89 #局部变量
global b
b=45
print(a)
func()
print(a)
print(b) #通过global将局部变量b转为全局变量
内置函数 globals() 和 locals()
这两个内置的可以查看局部变量和全局变量,分别返回一个字典,打印字典中的元素,可以查看全局变量与局部变量。
a =80 #全局变量
def func():
a=89 #局部变量
global b
b=45
print(a)
print(locals())
func()
print(a)
print(b) #通过global将局部变量b转为全局变量
print(globals()) #打印全局变量
嵌套函数
Python中允许函数定义中出现函数的调用。形成函数的嵌套调用。
def func():
print("第一个函数")
def func1():
func()
print("第二个函数")
func1()
递归函数
函数调自己
递归函数必须要有一个结束条件,否则会无限地递归。
def sum_recu(n):
if n>0:
return n +sum_recu(n-2)
else:
return 0
result =sum_recu(100)
print(result)