Python函数进阶

def eat(a,b,v,f,g):
print(a,b,v,f,g)

eat('方便面','包子','麻团','豆浆','咸菜')

def eat(a,b,*args): # 聚合 打包  
print(a,b,args) # 元祖
# 形参位置  : 位置参数 > 动态位置参数
eat('方便面','包子','麻团','豆浆','咸菜','油条','火鸡面','小笼包','炒饼')

def eat(b=1,**kwargs): # b=1 b ='2'
print(kwargs) # {'a': '1', 'c': '4', 'd': '5', 'f': '22'}
# print(kwargs['b']) #keyError
print(b)
eat(a='1',b='2',c='4',d='5',f='22')

动态关键字参数 默认参数 > 动态默认参数


def func(a,b,*args): # 聚合
print(a,b,*args) # 打散

func(1,2,3,4,5,6)

def func(a=1,b=2,**kwargs): # 默认参数** 聚合
print(a,b,kwargs)

func(a=56,c=22,b=444,d=66)


def func(a,b,c=1,*args,**kwargs): 错误的示范
print(a,b,c,args,kwargs)

func(1,2,3,4,5,6,7,8,d=1,f=3)

def func(a,b,*args,c=1,**kwargs): # 位置 > 动态位置 > 默认参数 > 动态默认参数
print(a,b,c,args,kwargs)

func(1,2,3,4,5,6,7,8,c=55,d=1,f=3)

def func(*args,**kwargs): #万能 无敌
print(args,kwargs)

func(1,2,3,4,a=1,b=2,c=3) # 位置 关键字 混合

lst =[1,2,3,5,4]
def func(*args): # 聚合

print(*args) #打散
func(*lst) # 打散 去壳
dic= {'1':22,'2':55}

def func(**kwargs): #聚合
print(kwargs)
func(**dic) #打散 1 = '22' ,'2' = 55

函数的注释

def func(a,**kwargs):
'''
:param a: 年龄
:param kwargs: 万能的默认参数
:return: 返回值
'''
# print(args)
# print(kwargs)
# return args
# print(func.__doc__) #查看函数的注释 函数名.__doc__

函数的名称空间
内置空间
全局空间
局部空间

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

a = 1
b = 2

def func():
print(1)

a = 10
def func():
a = 1 # 局部空间
print(a)
func()

def func1():
print(a) # 局部空间不是共享的
func1()

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

作用域命名空间:

内置空间 + 全局空间 == 全局 globals()
局部空间 locals()

函数的嵌套:

def func():
print(1)

func()

func()

def func():
print(1)


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

def func2():
print(33)
func()

def func1():
print(2)

func2()

def func():
print(1)
def func1():
print(2)
func3()
def func2():
print(5)
def func3():
print(4)
func2() #飘红不代表报错\
func1()
func()

def fun1():
print(1)
def fun2():
print(2)
def fun3():
print(3)
def fun6():
print(6)
fun3()
def fun4():
print(4)
def fun7():
print(7)
fun7()
def fun5():
print(5)
fun5()
fun4()
fun6()
fun2()
fun1()

globals()
locals()

a = 10
def func():
a = 20
def func1():
pass
print(a)
# print(globals()) #查看全局作用域 内容的
# print(locals()) # 查看局部作用域 内容的
func()


global 全局
nonlocal

a = 10 #
def func():
global c # 申明我要修改全局的变量a的值
b = 100
print(b) #100
print(locals()) # {} 存放我局部作用域里的一个容器 {'b':100}
func()
print(a) #10

a = 11
def func():
def fun1():
def func2():
global a
a =100
print(a)
fun1()
func()
print(a)


n = 1
def func():
n = 10
def func2():
def func1():
nonlocal n #修改 离得 最近 上一次 里的变量值,
# 上一次没有就继续往上找,找到全局最外层局部
n = 100
print(n) # 10
func1()
func2()
func()
print(n)


b = 10
def func():
b = 100
print(b)
def func1():
print(b) # 100
def func2():
print(b) # 100
def func3():
nonlocal b
b = 5
print(b) # 5
func3()
print(b) # 5
func2()
print(b) # 5
func1()
print(b) # 5
func()
print(b) # 10
posted @ 2019-01-11 20:18  june_ruby  阅读(161)  评论(0编辑  收藏  举报