定义
def
函数名
():
函数内部封装的代码
#
函数名的命名规则与变量名命名规则一致
调用
函数名
()
# 这里只是定义了一个函数,名叫hello # 定义函数的时候,函数内部的代码并不会执行
def hello():
print("hello world")
print("hello world")
print("hello world")
# 调用函数
# 只有调用函数的时候,函数内部的代码才回真正执行 hello()
输出20个*
def my_func1():
print("*" * 20)
my_func1()
函数的参数
函数的主要功能是封装代码
一个已经定义完成函数
,
不应该在去修改函数内部的定义代码
可以通过函数的参数
,
实现函数代码的灵活功能
语法
def
函数名
(
参数
1
,
参数
2
, .....):
函数内部封装代码
函数名
(
参数
1
对应的值
,
参数
2
对应的值
, .......)
#
调用的时候和定义函数的时候
,
参数的数量要一一对应
形参与实参
形参
定义函数的时候
,
括号里面的参数
形参必须是变量
实参
调用函数的时候
,
括号里面的参数
实参可以是常量
实参可以是变量
实参可以是表达式
定义函数的时候
,
形参有值吗
?
定义函数的时候
,
形参没有值
,
只是一个变量名
只要调用函数的时候
,
通过实参把值实时赋值给形参
函数的返回值
有时候
,
函数并不是要显示什么内容
,
而是要把一个值返回给调用者
,
比如
python
自带的
len
函数就是
这样的
函数内容通过
return
返回给调用者一个值
return
后面可以是常量
,
也可以是变量
,
还可以是表达式
# # 我们没有使用过函数 带返回值
# print("hello python")
# # 对于没有返回值的函数,调用方法,直接函数名(参数)
# # len是有返回值的函数
# a = len("hello python")
# 会把一个值返回给调用者 # print(a)
# print(len("hello python"))
def my_sum(a, b):
return a + b # 把a + b 的结果,返回给调用者
num1 = my_sum(2, 3) # 这里就是调用my_sum函数,所以num1得到了函数的返回值
print(num1)
print(my_sum(5, 6))
变量作用域
局部变量
函数内部定义的变量就是局部变量
局部变量只能在函数内部使用
不同的函数局部变量名字可以相同
全局变量
函数外部定义的变量就是全局变量
全局变量在所有函数内部也可以使用
局部变量能解决的问题
,
不要通过全局变量解决
,
尽量少定义全局变量
局部变量作用范围
局部变量从调用函数的时候开始在内存出现
,
函数调用完毕
,
局部变量从内存消失
如果一个函数内部定义了局部变量
,
但这个函数没有被调用
,
那么局部变量也不在内存中存在
def my_func1():
a = 1 # a是一个局部变量,只属于my_func1函数
print(a)
def my_func2():
a = 2 # a是一个局部变量,只属于my_func2函数
print(a)
my_func1() # 调用函数的时候,局部变量a出现了
# my_func1函数调用完毕,a消失了
# 定义函数的时候局部变量并不存在,只有调用函数的时候局部变量出现了
print("end")
全局变量的作用范围
全局变量一般定义在函数定义的上方
全局变量从定义变量开始在内存中出现
,
一直到程序运行完成
,
和程序一起从内存中消失
num1 = 2
def my_func1():
print(num1)
def my_func2():
print(num1)
my_func1()
num1 = 10
my_func2()
print("end")
局部变量与全局变量重名
如果在函数内部定义一个变量
,
名字和全局变量重名
,
那么在这个函数内部只能使用局部变量
global关键字
当需要在函数内部修改全局变量的值
,
修改前需要用
global
修饰全局变量的名字
def 函数():
global 全局变量名
全局变量名 = 值 123
形参和实参的值传递
如果形参的类型为数字或者字符串
,
在函数内部修改了形参的值
,
实参的值不会改变
![](https://i-blog.csdnimg.cn/blog_migrate/91566cdc4977037e7d2dbf52de009115.png)
形参的缺省值
形参可以有缺省值
,
当调用函数的时候
,
没有提供相应的实参
,
那么形参会采用缺省值
def
函数名
(
形参
=
缺省值
)
![](https://i-blog.csdnimg.cn/blog_migrate/391448e7862e337b6b80cd22c34358ee.png)
lambda匿名函数
lambda
是给特别小型的函数准备一个简化语法
不用写
def,
也不用写
return
一行代码就能定义一个函数
语法
def
函数名
(
形参
=
缺省值
)
def my_test1(a, b = 10): # 形参b有缺省值
print(a, b)
def my_test2(a = 1, b = 2):
print(a, b)
my_test1(1, 2)
my_test1(100)
my_test2()
my_test2(100, 12)
# def my_test3(a = 10, b):
不能把有缺省值的形参写到没缺省值形参的前面
# print(a, b)
lambda匿名函数
lambda
是给特别小型的函数准备一个简化语法
不用写
def,
也不用写
return
一行代码就能定义一个函数
语法
lambda
参数
1
,
参数
2
, ..... :
函数执行代码
# def my_sum(a, b):
# return a + b
my_sum = lambda a, b : a + b
num1 = my_sum(3, 4)
print(num1)
num1 = my_sum(23, 4)
print(num1)
# def my_max(a, b):
# if a > b:
# return a
# else:
# return b
# num1 = my_max(4, 5)
num1 = (lambda a, b : a if a > b else b)(4, 5)
print(num1)
lambda注意事项
匿名函数内部只能有一条语句
,
而且这条语句要有个具体的值返回
匿名函数不能使用
print