定义:函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
作用:使用函数可以加强代码的复用性,提高程序编写的效率
函数结构:
def 函数名(参数1,参数2):
函数体
return 值
注意:函数名要复合标识名的命名规范,只能包含字母、下划线和数字且不能以数字开头,pass是空语句,是为了保持程序结构的完整性 defind 定义的意思。
理解了函数的意思,就来定义一个函数试试。
定义一个函数:
def funa():
print('你好')
#调用定义的这个函数
funa()
定义函数发生的事情:
1.申请内存空间
2..将上述内存地址绑定函数 名
3.定义函数不会执行函数体代码,但是会检测函体语法
函数的特点:
函数必须先创建才能使用,创建的过程叫做函数的定义
函数可以重复调用,调用几次就执行几次函数里面的代码
函数里面的代码是自上而下执行的
函数中的return:
返回值return:给函数的执行者返回值,函数值中如果遇到了return这个函数会立马结束,不再执行(一个函数里只有第一个return才会执行)
如果ruturn的后面什么都不写,或函数里面没有return,返回值是None
如果return的后面写了一个值,返回这个值给调用者
如果return的后面写了多个值,就会以元祖的形式返回多个值
def funcb():
b=10
return b
b=funcb()
print(b) #10
def func():
a=20
b=[1,2]
c={1,23,4}
return a,b
c=func()
print(c) #(20, [1, 2])
print(func()) #(20, [1, 2]) #return后面有多个值的时候会以元祖的形式返回
#空的return打印为none
def fund():
return
print(fund()) #None
有参函数:
形参:写在函数定义位置的变量叫形参
实参:写在函数调用位置给函数传递的值
def num(a,b): #a,b就是形参
return a+b
print(num(23, 24)) #调用函数位置写的23 24 就是实参
关键字传参:传递参数的时候按照key=value的形式传入值,指名道姓的给某个形参传值,可以完全不按照顺序传递 默认参数:在定义阶段就已经被赋值了,意味着在调用阶段可以不用为其赋值 # 默认参数必须写在形参的后面,否则会有语法错误
def a(x,y):
print(x)
print(y)
a(x=1,y=1) #1 1
def a(x,y,z=3):
print(x)
print(y)
print(z)
a(x=1,y=1) #1 1 3
无参函数的使用:
#空函数
def dunc():
pass
dunc()
可变长参数(*和**的用法) 可变长度指的是在调用函数时,传入的值(实参)的个数不固定 实参是用来为形参赋值的,针对溢出的实参必须有对应的形参来接受
*形参名:用来接收溢出的位置实参,溢出的位置实参会被*保持为元组,一般命名为*args
def ccs(x,y,*args):
print(x,y,args)
ccs(1,2,4,5,2) #1 2 (4, 5, 2) 溢出的值会包装成元组赋值给args
# **形参名:用来接收溢出的关键字实参,**会将溢出的关键字实参保存为字典格式,一般命名为**kwargs形式
def aa(x,y,**kwargs):
print(x,y,kwargs)
aa(x=1,y=2,c=2,z=23,a=4,b=23) #1 2 {'c': 2, 'z': 23, 'a': 4, 'b': 23}
作用域
全局变量:定义在函数外的变量
c=3
def a():
def b():
global c
c = 200
b()
a()
print('全局变量', c) #全局变量 200
局部变量:外面不能访问里面的变量,里面可以访问外面的变量
def o():
num = 13
def s():
nonlocal num # nonlocal关键字声明
num = 200
s()
print(num)
o()