函数的定义和调用
- 什么是函数
函 数 具 有 独 立 功 能 的 代 码 块 组 织 为 一 个 小 模 块 , 这 就 是 函 数 。 就 相 当 于 是 一 个 工 具 \color{red}{函数具有独立功能的代码块组织为一个小模块,这就是函数。就相当于是一个工具} 函数具有独立功能的代码块组织为一个小模块,这就是函数。就相当于是一个工具
- 函数定义的格式
def 函数名 ():
函数体代码
- Python 使用def 开始函数定义,紧接着是函数名,括号内部为函数的参数,内部为函数的 具体功能实现代码
- 调用函数
- 定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它
- 调用函数很简单的,通过 函数名() 即可完成调用
- 函数一定要遵循先定义后调用的原则
- 函数在定义阶段只检测语法不执行代码,函数体代码只有在调用函数的时候才会执行
# 定义函数
def func():
print('hello world')
# 调用函数
func()
- 每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了。当然了如果函数中执行到了return也会结束函数
函数的分类
- 内置函数:python解释器提前定义好可以直接调用的函数
如:print(),open(),input(),len()等。 - 自定义函数 :就是程序员自己编写的函数
- 有参函数
- 无参函数
- 空函数
- 无参函数:就是小括号内没有参数
def index():
print ('hello,world')
调用无参函数
index() # 括号内不需有参数
- 有参函数: 就是在括号中加有参数,类似于变量名,括号中可以有多个参数
def index(a):
print('hahaha',a)
2.1 调用有参函数:在函数调用阶段括号内也必须传参数。类似于变量值
index(12)
- 空函数:在定义阶段函数体代码是用pass或者…占位
def fight():
pass
def run():
pass
def study():
pass
def communication():
pass
注意:前期能够通过空函数快速的罗列出程序中大致的功能
让程序整体框架清晰 空函数大量的使用在项目前期的功能框架搭
函数的返回值
返回值:函数的返回值其实就是在调用函数之后返回的结果
如何获取函数的返回值
变量名 = 函数调用
如何操作返回值
1. 当函数体代码没有return关键字的时候 返回值是None
def index():
print('春困秋乏夏打盹儿')
res = index()
print(res) # None
- 当函数体代码写了return但是没有跟任何值得时候 返回值也是None
def index():
print('春困秋乏夏打盹儿')
return
res = index()
print(res) # None
- 当函数体代码写了return并且跟了数据 那么写什么就返回什么
如果写的是值那么直接返回值(任意数据类型)
如果写的是变量名那么返回变量名指向的值
def index():
print('春困秋乏夏打盹儿')
name = 'jason'
return name
res = index()
print(res) # jason
- return后面还可以跟多个值 逗号隔开 会自动组织成元组返回出去后
def index():
print('春困秋乏夏打盹儿')
return 111,'jason',222
res = index()
print(res) # (111,'jason',222)
- 函数体代码遇到return会立刻结束函数运行
函数体代码里面写return相当于循环体代码里面写break
遇到了就立刻结束函数和循环的执行
函数的参数
- 形参:定义时小括号中的参数,用来接收参数用的 (变量名)
- 实参:调用时小括号中的参数,用来传递给函数用的(变量值)
def add2num(a, b):
c = a+b
print c
add2num(110, 22) # 调用带有参数的函数时,需要在小括号中,传递数据
形参和实参的使用
位置参数
- 位置形参:按照从左到右的顺序依次定义形参
def index(name,pwd): # name和pwd就是位置形参
pass
- 位置实参:按照从左到右的顺序依次传入位置实参,传入的个数必须与定义的位置形参一一对应
在函数调用阶段括号内从左往右依次传入的真实数据
index('jason',123) # jason和123就是位置实参
位置参数的特征
1.位置形参与位置实参在绑定关系的时候就是按照从左往右的顺序依次绑定
2.位置形参与位置实参的个数要一致 多一个不行少一个也不行
默认参数
在定义函数时,就已经为形参赋值,这类形参称之为默认参数,当函数有多个参数时,需要将值经常改变的参数定义成位置参数,而将值改变较少的参数定义成默认参数
def register(name, age, gender='男的'):
"""
函数的形参在命名的时候也应该见名知意
"""
print("""
学员姓名:%s
学员年龄:%s
学员性别:%s
""" % (name, age, gender))
register('jason', 18) # 不传就使用默认的
register('kevin', 28)
register('jerry',22,'美女') # 传了就使用自己的
可变长参数
需求:定义一个函数 无论传多少位置实参都可以正常执行
def func(*a):
print(a)
func() # ()
func(1,2) # (1, 2)
func(1,2,3,4,5,6) # (1, 2, 3, 4, 5, 6)
* 号在形参中使用
可以接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
def index(a, b, *ag):
print(a, b, ag)
**在形参中
用于接收多余的关键字参数 并且组织成字典的形式赋值给后面的变量名
def index(a, b, **k):
print(a, b, k)
index(a=1, b=2) # 1 2 {}
index(a=1, b=2, c=3, name='jason') # 1 2 {'c': 3, 'name': 'jason'}
index(1,2,name='jason',age=18,pwd=123) # 1 2 {'name': 'jason', 'age': 18, 'pwd': 123}
'''需求:定义一个函数 无论传入多少关键字参数都可以正常执行'''
def func(**k):
print(k)
func() # {}
func(a=1,b=2) # {'a': 1, 'b': 2}
func(a=1,b=2,c=3,d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
*在实参的使用
可以将列表或者元组打散成位置参数一一传入
def index(*[11,22,33]) # 等价于 index(11,22,33)
def index(*(11,22,33)) # 等价于 index(11,22,33)
**在实参的使用
可以将字典打散成关键字参数一一传入
def index(**{'name':'jason'}):
index(**{'name':'jason','age':18,'pwd':123}) # () {'name': 'jason', 'age': 18, 'pwd': 123}
index({'name':'jason','age':18,'pwd':123}) # ({'name': 'jason', 'age': 18, 'pwd': 123},) {}