函数

函数

认识函数

函数将一些代码进行封装

定义函数: 封装 减少重复代码

# def 关键字  函数名():
	函数体(代码块)
def make():
    print('1')
    print('2')
    print('3')
    print('4')
    print('5')
    return 多个返回值是元组
make()  #函数名 + 小括号 == 调用
msg = make() # make == None  make() == '美女一枚'
print(msg)

函数的返回值

def func():
    print('今天是周二')
    print('明天是周三')
    return 0.125
	print('后天是周四')
     # retrun   不写返回的是None , return写了不写值返回的也是None  return 就是将内容返回了调用者   make()
    # 函数中当执行到return的时候 下面的代码就不执行了,并且终止这个函数

函数的参数

# 参数
# 参数 定义的参数 形参
# 调用的参数是 实参			形参和实参的数量  一一对应
# 从实参到形参的过程 传参
# addr 是不是一个变量  addr = '家'
def func(addr,school): # 形参
    print(f'我在{addr}睡觉{school}')
    
func(addr = '家',age = 18)
# 实参的角度:
    #func('清华','东莞')         位置
    #func(addr = '清华',school = '东莞')   关键字
    #func('清华',school = '东莞')         混合
# 实参的角度:
    #func(addr,school)             位置
    #func(school = '东莞')         默认参数
    #func(addr,school = '东莞')    混合   
    
#函数形参规则       位置参数 > 默认参数
#函数实参规则		  位置参数 > 关键字参数

函数参数

def eat(a,b*args):	    # 聚合 打包
    print(a,b,args)     # 元组
    # 形参位置    :    位置参数   >   动态位置参数
 eat('1','2','3','4','5')
def eat(**kwargs):
    print(kwargs)		#字典
 eat('q' = '1','w' = '2','e' = '3')   
def func(a,b,*args):	#聚合  
    print(a,b,*args)	#打散
# args 返回的是元组  *args 将元组打回原来的数组
func(1,2,3,4,5,6,7)

def func(a = 1,b = 2,**kwargs):    # 默认参数  ** 聚合
    print(a,b,kwargs)
func(a = 56, c = 22, b = 333, d = 66)

 def func(a,b,c = 1,*arg,**kwargs):  # 位置 > 动态位置 > 默认参数 > 动态默认参数
        print(a,b,c,args,kwargs)
 func(1,2,3,4,5,6,7,8,c = 33,d = 123,f = 345)
def func(*args,**kwargs):  #万能   无敌
    print(args,kwargs)
func(1,2,3,4,a = 1,b = 2)   # 位置  关键字  混合

函数的注释

def func(*args,**kwargs):
    '''
    
    :param args: 万能的位置参数
    :param kwargs: 万能的默认参数
    :return: 返回值
    '''
    print(args)
    print(kwargs)
    return

print(func.__doc__)   # 查看函数的注释		函数名.__doc__

函数的命名空间

 #内置空间
 #全局空间
 #局部空间
    
# python关键字是存在内置空间的
# py文件中顶头写的内容就存在全局空间
# 函数内写的变量存在局部空间

#a = 1
#b = 2
y = 9
def func():
    y = 3     # 局部空间
    print(y)   #  3
def func1():
    print(y)   #  9  局部空间不能共享

# 找值顺序:局部空间 > 全局空间 > 内置空间
# 加载顺序:内置空间 > 全局空间 > 内置空间

#命名空间: 
   # 内置空间 + 全局空间
   # 局部空间

函数的嵌套

def func():
    func1()
    print(1)
def func1():
    print(11111)
func()    
#11111
#1

global nonlocal

 #内置空间 +  全局空间 = 全局   globals()
 #局部空间 				      loacals()
a = 10
def func():
	a = 20
    print(a)
    print(globals())    # 查看全局作用域的内容
    print(locals())     # 查看局部作用域的内容
func()
a = 10
def func():
    global a	# 声明我要修改全局的变量a的值
    a = 20
    print(a)
func()
print(a)
n = 1
def func():
    n = 10
    def fun2():
        def func1():
            nolocal n  # 修改离得最近上一次里的变量值 上一层没有就继续往上找,找到全局最外层局部
            n = 100
            print(n)   # 10
        func1()
    func2()
func()
print(n)
posted @ 2019-07-07 20:51  626  阅读(212)  评论(0编辑  收藏  举报