目录
前言:
函数的出现是为了解决:
1. 代码重复性较高2. 可维护性差1、函数介绍2、函数的参数3、函数的返回值4、函数的作用域
1、函数介绍
1)函数介绍
函数是
可重复
使用的,用来实现单一功能的代码段。 使用函数描述程序中功能相似的代码段,
从而可以消除代码的重复性。
函数的作用:
1. 提高代码的复用性
2. 应用的模块性
2)自定义函数
语法:
2、函数的参数
1)函数参数的分类
02-函数的参数
- 形参与实参
- 可变类型参数与不可变类型参数
- 位置参数
- 关键字参数
- 默认值参数
- 可变长度参数
2)形参与实参
- 形参:就是函数 定义 时传入的参数,没有实际的值,通过别人赋值后才有意义,相当于变量。
- 实参:就是函数 调用 时传入的参数,是一个实际存在的参数
3)可变类型参数与不可变类型参数
- 不可变类型参数在函数体内 对变量重新赋值 ,相当于重新开辟了一块内存来保存值
- 可变类型参数在函数体内可以 改变原有的值
1.可变类型参数
def my_test_2(a):
print(f"这是转入的a:{a}")
a += 1
print(f"这是变化后的a:{a}")
a = 1
print(f"这是调用函数前的b:{a}")
my_test_2(a)
print(f"这是调函数后的b:{a}")
2.不可变类型参数
def my_test_2(a):
print(f"这是转入的a:{a}")
a.append(5)
print(f"这是变化后的a:{a}")
li = [1, 2, 3]
print(f"这是调用函数前的b:{li}")
my_test_2(li)
print(f"这是调函数后的b:{li}")
运行结果:
4)位置参数
- 位置参数就是实参与形参 个数一致(不一样时会报错),位置对应
5)关键字参数
- 以 形参 = 实参 形式指定,不论参数位置
get_sum(sum1 = 10, sum2 =30)
6)默认值参数
- 形参处进行赋值,所以当调用时不传该参数就默认使用形参处的值。当调用时传了该参数,则覆盖掉默认参数。
def cfb(x=1):
for i in range(1, x+1):
for j in range(1, i+1):
print(f"{i}*{j}={i*j}", end='\t')
print()
cfb()
#输出:1*1=1
def cfb(x=1):
for i in range(1, x+1):
for j in range(1, i+1):
print(f"{i}*{j}={i*j}", end='\t')
print()
cfb(3)
# 输出:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
7)可变长度参数
- *args 接收时会转为 元组 数据类型
- **kwargs 接收时会转为 字典 数据类型
注意:名称可任意,但前面要加*
def get_sums(*args):
print(args, type(args))
get_sums(1, 2)
get_sums(1, 2, 3, 4, 5)
#输出:
(1, 2) <class 'tuple'>
(1, 2, 3, 4, 5) <class 'tuple'>
如果*args后面还有其他参数,则在实参部分需要通过关键字参数指定
def test(*args, a):
print(args, a)
test(1, 2, 3, a=4)
# 输出:
(1, 2, 3) 4
3、函数的返回值
1)return语句
Python 提供了
return
语句用于从函数中返回,当程序执行到 return 语句时,程序从函数中返回
到
函数调用
的地方。
作用:
- 提前退出函数
- 返回值到函数调用处
def test():
print("这是return之前")
return
print("这是return之后")
print("调用函数之前")
test()
print("调用函数之后")
#输出:
调用函数之前
这是return之前
调用函数之后
def test2():
a = 1
b = 2
c = 3
return a
return b
return c
print(test2())
#输出:
1
注意:
1. 函数体中
没有 return
语句时,函数运行结束, 则默认返回
None
,也被称为隐含返回值
2. 函数有多个返回值时,值与值直接用
逗号
隔开,且默认为
元组
。如:return 值1,值2
def test2():
a = 1
b = 2
c = 3
return a, b, c
print(test2(),type(test2()))
#输出:(1, 2, 3) <class 'tuple'>
4、函数作用域
1)函数作用域介绍
在 Python 中,程序的变量并不是在哪个位置都可以访问的,
访问权限
决定于这个变量是在哪里赋
值的。
2)常用的作用域
Python 的作用域主要分为以下4种:
- L(local):局部作用域,即函数中定义的变量;
- E(enclosing):嵌套的父级函数的局部作用域;
- G(global):全局变量,就是模块级别定义的变量;
- B(build-in):内建作用域,系统固定模块里面的变量;
3)global 关键字
当我们需要在函数内部将
局部变量
修改为
全局变量
时,我们可以将函数内部的局部变量通过
global 关键字声明为全局变量。
语法:
global 局部变量
4)作用域的优先级
eg:打印乘法表
def chengfabiao(n):
print(f"------------{n}*{n}乘法表---------------")
for i in range(1, n+1):
for j in range(1, i+1):
print(f"{j}*{i}={j*i}", end='\t')
print()
n = int(input("请输入您想打印几乘几的乘法表:"))
chengfabiao(n)
运行结果: