函数
目录
- 函数的用途
- 函数的本质
- 函数的语法结构
- 函数的定义与调用
- 函数的分类
- 函数的返回值
- 函数的参数
函数的用途
在学习函数前,编写程序代码的时候,总会出现一些重复性代码,为了减少重复性代码的使用,会将这些代码封装成一段函数,等到需要使用的时候,直接调用相应的函数就可完成操作。避免了重复写代码的情况。
函数的本质
函数的本质就是 先把程序段提前定义好封装成函数,然后才能调用
-
函数的定义
def my_func():
pass -
函数的使用
my_func() # 使用函数 我们更加习惯说成 调用函数 函数调用
函数的语法结构
def 函数名(参数1,参数2,...):
"""文档描述"""
函数体
return 值
- def : 定义函数的关键字;
- 函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;
- 括号:括号内定义参数,参数是可有可无的,且无需指定参数的类型;
- 冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
- """文档描述""": 描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;
- 函数体:由语句和表达式组成;
- return 值:定义函数的返回值,return是可有可无的。
函数的定义与调用
- 函数必须先定义后使用
定义函数的代码必须要在调用函数的代码之前先运行即可 - 定义函数使用def 关键字 ,调用函数使用函数名加括号(可能参加额外的参数)
- 函数在定义阶段只检测函数体代码语法,不执行函数体代码
只有在调用阶段才会真正的执行函数体代码 - 函数名的含义
函数名绑定的是一块内存地址 里面存放了函数体代码
要想运行该代码 就需要调用函数>>>:函数名加括号
函数的分类
- 内置函数
解释器提前定义好的函数,用户可以直接调用 len()
内置函数可以直接调用
但是数据类型的内置方法(函数)必须使用数据类型点的方式才可以调用
相当于是数据类型独有的一些内置方法
- 自定义函数
-
空函数
函数体代码使用pass顶替 暂时没有任何功能
主要用于前期的项目搭建 提示主要功能
def run():
pass -
无参函数
函数定义阶段括号内没有填写参数
def func():
print('from func')
无参函数直接函数名加括号即可调用
3.有参函数
函数定义阶段括号内填写参数
def func(a, b):
print('from func')
有参函数调用需要函数名加括号并且给数据值
函数的返回值
返回值就是调用函数之后产生的结果 可有可无
获取函数返回值的方式是固定的
变量名 = 函数()
上述方式有则获取 没有则默认接收None
返回值有五种返回方式
- 函数体代码没有return关键字:默认返回None
def func():
print('from func')
res = func()
print(res) # None
- 函数体代码有return关键字:后面不写 也返回None
def func():
print('from func')
return
res = func()
print(res) # None
- 函数体代码有return关键字:return后面写什么就返回什么(如果是数据值则直接返回 如果是变量则需要找到对应的数据值返回)
def func():
print('from func')
return 666
res = func()
print(res)
def func():
print('from func')
name = 'jack'
return name
res = func()
print(res) # jack
- 函数体代码有return关键字并且后面写了多个数据值(名字) 逗号隔开:默认情况下回自动组织成元组返回
def func():
return [1, 2, 3, 4],{'name':'jack'},123
res = func()
print(res) # [1, 2, 3, 4]
- 函数体代码遇到return关键字会立刻结束函数体代码的运行
def func():
print('我在上面')
return 123
print('我在下面')
func()
函数的参数
- 参数的简介
函数的参数分为形式参数和实际参数两大类,简称形参和实参。
形参:在定义函数时,所需定义的值。本质就是变量名,用来接收外部传来的值。
实参:在调用函数时,所需输入的值。本质就是数据值(可以是常量,变量,表达式或三者的结合)
在函数调用阶段形参会临时与实参进行绑定 函数运行结束立刻解除
- 位置参数
位置参数就是按照顺序定义参数的,在定义函数时,按从左到右的依此定义形参的为位置形参
按照这样的形式定义实参则为位置实参。位置形参与位置实参一一对应。
- 实参可以是数据值也可以是绑定了数据值的变量名
- 给位置形参传值得时候必须个数一致 多一个不行 少一个也不行
- 关键字参数
在调用函数时,实参可以是kv键值对,又称为关键词参数。这样的实参可以不按照顺序来定义实参,仍能定义形参。
实参也可以是按位置或按关键字的混合使用,但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值
def func(a, b):
print(a, b)
func(1, 2)
func(b=1,a=2)
func(b=1,2)
func(2,b=1)
func(666,a=1)
- 默认值参数
默认值参数就是在函数定义阶段,( ) 中以 ... = ... 的形式填写的形参
def register(name, age, gender='male'):
print(f"""
-------------info-----------
name:{name}
age:{age}
gender:{gender}
----------------------------
""")
register('jason',18)
register('oscar',28)
register('jerry',38)
register('lili',18,'female')
1.在函数定义阶段就给形参绑定值 后续调用阶段就可以不传
2.调用阶段不传值就使用默认的 传了就用传了的
3.需要遵循前面总结的规律(简单的在左边 复杂的在右边)
- 可变长参数
- 可变长形参与实参可以随意传值
def func(*x):
print(x)
在形参中 * 的作用: 接受多余的位置参数组合成元组的形式赋值给* 后面的变量名
def func(**y):
print(y)
func() # {}
func(name='jack') # {'name': 'jack'}
func(name='jack',age=18) # {'name': 'jack', 'age': 18}
func(name='jack',age=18,hobby='read') # {'name': 'jack', 'age': 18, 'hobby': 'read'}
在形参中 ** 的作用
接收多余的关键字参数并组织成字典的形式赋值给 ** 后面的变量名

浙公网安备 33010602011771号