函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
具体格式如下:
def 函数名(位置参数,*args,默认参数,**kwargs):
'''注释:函数的功能和参数说明'''
函数体
return 返回值
*args是接收按位置传参,组织成一个元组
**kwargs是接收按关键字传参,组织成一个字典
⑴ 函数的参数
① 按照位置传值
def the_max(x,y):
#此时x=10,y=20
mmax = x if x > y else y
return mmax
m = the_max(10,20)
print(m)
② 按照关键字传值
def the_max(x,y):
#此时x = 20,y = 10
print(x,y)
mmax = x if x > y else y
return mmax
m = the_max(y = 10,x = 20)
print(m)
⑵ 函数编写指南
- 给函数指定描述性名称,且只使用小写字母和下划线;
- 每个函数都应包含简要阐述其功能的注释,紧跟在函数定义后面,采用文档字符串格式;
- 给形参指定默认值时,等号两边不要有空格;
- 调用关键字实参是,等号两边也不要有空格。
⑶ 命名空间
① 内置命名空间 ——python解释器
python解释器一启动就可以使用的名字,储存在内置命名空间中,内置的名字在启动解释器的时候加载进内存中。
② 全局命名空间
在程序从上到下被执行的过程中依次加载进内存的,放置了人为设置的所有变量名和函数名。
③ 局部命名空间 ——函数
函数内部定义的名字。当调用函数时,才会产生这个命名空间,随着函数执行的结束,这个命名空间也会消失。
在内置:不能使用局部和全局命名空间中的名字
在全局:可以使用内置命名空间的名字,但不能使用局部命名空间的名字。
在局部:可以使用全局、内置命名空间中的名字
⑷ 作用域
① 全局作用域
作用在全局,内置和全局命名空间中的名字都属于全局作用域。
② 局部作用域
作用在局部,函数(局部命名空间中的名字属于局部作用域)
globals() #查看全局、内置作用域中的名字
locals() #查看局部作用域的名字
注:
- 对于不可变数据类型,在局部可查看全局作用域中的变量,但不能直接修改。
- 如果要修改,需要在程序开始添加global声明。
- 如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作对全局的变量有效。
nonlocal 声明上一层局部变量
只能用于局部变量上,找上一层中离当前函数最近一层的局部变量。声明了nonlocal的内部函数的变量修改会影响到里当前函数最近一层的局部变量。
⑸ 函数的返回值
① 没有返回值
不写return的情况下,会默认返回一个None。
#函数定义
def mylen():
"""计算s1的长度"""
s1 = "hello world"
length = 0
for i in s1:
length = length+1
print(length)
#函数调用
str_len = mylen()
#因为没有返回值,此时的str_len为None
print('str_len : %s'%str_len)
只写return,后面不写其他内容,也会返回None;一旦遇到return,会结束整个函数。
② 有一个返回值
def mylen():
"""计算s1的长度"""
s1 = "hello world"
length = 0
for i in s1:
length = length+1
return length
#函数调用
str_len = mylen()
print('str_len : %s'%str_len)
③ 有多个返回值
可以返回任意多个、任意数据类型的值。
def ret_demo1():
'''返回多个任意类型的值'''
return 1,['a','b'],3,4
ret1 = ret_demo1()
print(ret1)
#返回的多个值会被组织成元组被返回,也可以用多个值来接收
a,b,c,d = ret_demo1()
print(a,b,c,d)