目录
一、认识函数
什么是模块化编程?
什么是函数?
函数的作用?
函数的定义与使用?
函数的特征与注意要点:
二、关于函数的参数?
带有参数的函数,定义例子?
三、函数中的参数类型
四、函数的返回值?
五、函数的变量作用域
六、nonlocal 关键字?
???????
一、认识函数
什么是模块化编程?
模块化编程指把程序进行封装(函数封装,面向对象,文件等等)
什么是函数?
函数是一个具有特定功能的代码块
函数的作用?
函数就是把代码进行封装,以提高代码的重用性,提高开发效率,降低后期的维护成本
函数的定义与使用?
#定义函数【基本结构】
def 函数名([参数列表]):
当前函数的具体功能的代码
当前函数的具体功能的代码
。。。。。。。。。。。。
#函数的封装完并不会进行执行,只是对函数进行定义了
#如果想要使用定义的函数,那么只需要用语法来进行函数的调用
#具体功能的代码编写一定要缩进
#函数的调用
函数名()
#例子
def love(): #定义函数love
print('I') #具体功能
print('love') #具体功能
print('you') #具体功能
love() #函数的调用
函数的特征与注意要点:
?1、函数定义后,不调用不执行
2、Python 不能再函数定义前进行调用
3、函数的调用不受次数的影响
4、函数的命名要遵守命名规范:? ?
?????????字母数字下划线,不能用数字开头
? ? ? ? ? 严格区分大小写,不能使用关键字
? ? ? ? ? ?命名最好有意义,且不要使用中文
? ? ? ? ?函数的命名不能重复
二、关于函数的参数?
函数在定义时,可以在参数的位置进行定义(形参)
如果函数有形参,那么在调用的时候必须传递参数(实参)
实参将传递给行参的过程,本质上就是变量的赋值操作
带有参数的函数,定义例子?
#在定义函数时,在小括号内可以定义形参(形式上的参数)
def love(who):
print(f'我爱你{who}')
love('小白')
运行结果:
我爱你小白
如果没有传入‘小白’
运行结果:
TypeError: love() missing 1 required positional argument: 'who'
也就是有形参的函数时,要在调用的时候传入相对应的实际参数值
三、函数中的参数类型
普通参数、默认参数、收集参数、命名关键字参数、关键字参数收集
1、普通参数
普通参数,也就是位置参数,也叫顺序参数,也是必须传递的参数
#普通参数例子:
def love(x,y):
print(x,y)
love(1,2)
2、默认参数
在定义形参时候,指定一个默认的值
#指定默认值的参数例子:
def love(x,y=100):
print(x,y)
love(1)
#运行结果
#1 100
#如果在调用的时候,往参数里面增加参数,那么会覆盖掉默认值,例如:
def love(x,y=100):
print(x,y)
love(1,99)
#运行结果
# 1 99
注意要点:指定默认参数必须放到普通参数的后
3、收集参数
定义:收集参数为专门用来收集多余的参数,或者理解为不确定需要传递多少个实参,直接用一个形参来接收
在定义函数的时候,如果需要收集参数,那么这个形参前面需要加一个‘*’号 ?例如*args 也可以换成是*name 等
# 收集参数的例子
def func(a,b,c,d,*args):
print(a,b,c,*args)
func(1,2,3,4,4,4,3,5,6)
4、命名关键字参数
关键字参数定义在收集参数后面
关键字参数必须通过形参的名字来进行传递
#name 必须指定参数值
def func(a,b,c,*args,name):
print(a,b,c,args,name)
func(1,2,3,4,4,4,3,5,name=6)
#运行结果:
#1 2 3 (4, 4, 4, 3, 5) 6
5、关键字参数收集
定义: ?关键字参数通过**kwargs进行定义,传参的是字典。
def func(a,b,c,*args,**kwargs):
print(a,b,c,args,kwargs)
func(1,2,3,4,4,4,3,5,name='aaaa',age = '18',sex = 'ccc')
#运行结果:
#def func(a,b,c,*args,**kwargs):
print(a,b,c,args,kwargs)
func(1,2,3,4,4,4,3,5,name='aaaa',age = '18',sex = 'ccc')
四、函数的返回值?
return 调用带有返回值的函数时,函数中的返回值会返回到函数调用处
函数中使用return进行返回时候,return 后的数据将不在运行,意味着函数到这里结束。
#没有返回值的函数,或者可以理解为,没有指定返回内容
#m例子:
def love(a,b):
print(f'{a} 我喜欢你{b}')
love('林佳赟','啊')
#返回结果:(没有指定返回值)
#林佳赟 我喜欢你啊
#指定返回值的例子
def love(a,b):
res = (f'{a} 我喜欢你{b}')
#可以在函数体内使用return 返回任意内容
return res
print(love('林佳赟','啊'))
#返回结果
#林佳赟 我喜欢你啊
五、函数的变量作用域
作用域:当前起作用的,可以用的范围区域
变量的作用域分为两种,全局变量及局部变量
?全局变量:
函数内部使用global 定义的变量,就是全局变量
在函数外部,使用golbal定义的变量,也是全局变量
OLD_URL = 'http://oldboyedu.com'
def bb():
global OLD_URL
OLD_URL = OLD_URL + '#m'
if __name__ == '__main__':
bb()
print(OLD_URL)
#运行结果
#http://oldboyedu.com
?局部变量:
函数内定义的变量,局部变量,在函数外部不能用
在函数外定义的不可变数据类型,函数可以访问,但不能更改
在函数外定义的可变数据类型,函数可以访问并更改(字典、列表)
#函数内定义的变量,局部变量,在函数外部不能用
def flist():
vlist = 'baby'
print(vlist)
#返回结果
# print(vlist) NameError: name 'vlist' is not defined
#在函数外定义的不可变数据类型,函数可以访问,但不能更改
num = 10
def func():
print(num)
func()
#返回结果
# 10
#在函数外定义的可变数据类型,函数可以访问并更改(字典、列表)
vlist = [1,2,3,4,5]
def fuc_list():
vlist[2] = 'baby'
print(vlist)
fuc_list()
#运行结果
# [1, 2, 'baby', 4, 5]
六、nonlocal 关键字?
在内函数中如果想要使用外层函数的变量,那么需要使用nonlocal关键字进行引用
#变量和函数都有作用域
#在内函数中如何使用上一层函数中的局部变量?
def outer():
num = 10
def inner():
print(num)
inner()
outer()
#运行结果
# 10
def outer():
num = 10
def inner():
num += 1
print(num)
inner()
outer()
#运行结果
#UnboundLocalError: local variable 'num' referenced before assignment
def outer():
num = 10
def inner():
nonlocal num
num += 1
print(num)
inner()
outer()
#运行结果
# 11
|