函数
函数的定义:
- 语法:
'''def 函数名(形参):
函数说明文档(说明书)
函数体(代码块)
===========================================================================================
def---定义函数的关键字,
函数名---变量
()---固定写法
形参---以变量‘变量一,变量二……’形式存在
形参的作用:将函数外的数据传入到函数内,定义函数不一定要定义形参
函数说明文档———— 说明书,辅助我们理解函数的使用说明文档相当于多行注释(不一定要写)
函数体———— 实现功能的代码块
===========================================================================================
使用(调用)函数的语法:
函数名(实参)
函数名—— 告诉程序使用那个函数
实参 —— 实参是向形参传递值的变量,实参和形参一一对应,实参和形参同时出现
==========================================================================================
return的使用
函数内部产生的数据默认不会向函数外部传递
return:将函数内部产生的结果传递到函数外部
return:函数内部触发了return,函数立即停止执行
'''
上课时的例子:实现阶乘函数的实现:
# 函数的定义
def func1(N):
sum = 1
for i in range(1, N+1):
sum *= 1
return f'{N}的阶乘为{sum}'
# 函数的使用:
func1(4)
func1(5)
func1(6-3)
# 结果:
# 4的阶乘为24
# 5的阶乘为120
# 3的阶乘为6
练习:
1.编写一个函数,交换指定字典的key和value,并返回到函数外部
dict1 = {‘a’:1, ‘b’:2, ‘c’:3} --> {1:‘a’,2:‘b’,3:‘c’}
# 函数的编写:
def exchange(dict1_):
#字典推导式:
dict_2 = {value, key for key, value in dict_1.items()}
return dict_2
# 函数的调用
a = exchange({'a':1, 'b':2, 'c':3} --> {1:'a',2:'b',3:'c'})
print(a)
#结果:
# {1: 'a', 2: 'b', 3: 'c'}
2.写一个自己的endswith函数,判断一个字符串是否是另一个字符串的结尾.
# 编写函数
def endswith_1(str_1, str_2):
if str_1[-len(str_2):] == str_2:
return True
else:
return False
# 函数调用:
print(my_endswith('abc123ba', 'ba'))
print(my_endswith('abc123ab', 'ba'))
# 结果:
# True
# False
函数的参数:
- 关键字参数:调用函数时让形参和实参一一对应
- 让实参通过关键字(形参名)对应
- 关键字参数和位置参数混用,关键字参数一定要在位置参数后面。
- 不定长参数:函数中在形参前加*或者**,就可以让参数变成不定长参数,不定长的形参可以同时接收多个实参。
1):带一个的不定长参数
带的参数会变成一个元组,元组中的元素就是对应的实参
2):带**的不定长参数
带** 的不定长参数会变成一个字典,调用的时候只能用关键字参数传参,每个关键字就是字典的key,数据就是value
3):带* 的参数和带** 的参数可以同时出现,但是带*必须在带**的前面
4):带*的参数必须使用位置参数传参,带**的参数必须使用关键字参数传参
def func4(*x): # 变元组
print(x)
func4(10)
def func5(**x): # 变字典
print(x)
func5(a=20, b=30, v=40)
def func6(*x, **y): # 元组,字典
print(x, y)
func6(10, 20, a=20, b=30, v=40)
# (10,)
# {'a': 20, 'b': 30, 'v': 40}
# (10, 20) {'a': 20, 'b': 30, 'v': 40}
全局变量和局部变量:
- 局部变量:
- 局部变量,就是在函数内部定义的变量。
- 局部变量的约束:
作用范围:函数内部,只能在函数中使用,不能在函数外部使用。
生命周期:函数被执行时,局部变量被创建,函数执行结束后,局部变量被销毁。
举个栗子:
def test1():
a = 120
print('我是局部变量:', a)
a = 240
print('我是修改后的局部变量:', a)
def test2():
a = 360
print('我是test2函数的局部变量:', a)
test1()
test2()
#我是局部变量: 120
#我是修改后的局部变量: 240
#我是test2函数的局部变量: 360
- 全局变量:
- 定义在函数外边 的变量是全局变量
- 当函数外部的全局变量和函数内部的局部变量名称一样时,函数会根据就近原则,局部变量的值会覆盖原来的全局变量
举个栗子:
# 全局变量
b = 100
def test3():
print(b)
test3()
# 100
# 全局变量被局部变量覆盖
global_name = 100 # 全局变量
def test5():
global_name = 200 # 局部变量
print(global_name)
test5() # 200
print(global_name) #200
# 200
- 全局变量的修改:
如果函数中出现了global,函数中即使出现了和全局变量维相同的变量名,也不会起到局部变量的结果。
也可以理解为:在函数内部对全局变量做出了修改;
x = 500
def test6():
global x # 此时将x修改为全局变量
x = 600
print(x)
test6()
print(x)
# 600
# 600
未完待续……