10.函数基础扩展

1.动态传参

'''def chi(*food):
print ('我要吃',food)
chi ('白楼烤肉饭','丸子汤','方便面','可乐')
chi ('杨国福')
chi ('白楼烤肉饭','丸子汤','杨国福','方便面','可乐')
'''
#*food *表示的是不定参数,可以传递任意个信息,参数名是food,接收到的是元组


#*代表的是接收位置的动态传参
#传参的顺序
位置 *args 默认值 **kwargs
#如果默认值参数在*args前面  想让默认值生效 *args将永远接收不到值

# def func( a, b, *args,c = 5): # arguments参数
#     print(a, b, c, args)
# func(1,2,3,4,5,6,8,c = 10)

 

关键字的动态传参

# *args  位置参数 接收到的是元组
# **kwargs 关键字的动态传参,接收到的是字典

# def func(**kwargs):
#     print (kwargs)
# func (a =10, b =20,jay = '周杰伦')

#kwargs  key word arguments

# def func(*args,**kwargs):
#     print (args)
#     print(kwargs)
# func (1,2,3,jj = '林俊杰',jay = '周杰伦')
# 无敌模式,所有的参数都能接收

*args 和**kwargs

# def func(*args): #在形参位置把传进来的参数进行耦合,耦合成一个元组
#     print (args)
# # func(1,2,3,4,5,6)
# lst = '娃哈哈'
# func(*lst)#  在实参位置 * 表示打散, 打散的是可迭代对象

# def func(**kwargs):#**把接收到的关键字参数打包耦合成字典
#     print (kwargs)#必须是字典
# dic = {"张无忌": "明教教主", "谢逊": "金毛狮王", "范瑶": "光明右使"}
# func (**dic)#在这里  **是把字典打散,字典key作为参数的名字,字典的值作为参数的值传递给形参
# 在形参上
# 
# 1.位置参数
# 2.默认值参数
# 3.动态参数
#     1.*args   位置参数的动态传参,系统会自动把所有的位置参数耦合成元组
#     2.**kwargs   关键字的动态传参,系统会自动把所有的关键字耦合成字典
#     3.def func (*args,**kwargs):  无敌传参
#     4.顺序  位置参数 *args 默认值 **kwargs
#     5.在使用的时候,可以任意进行搭配
# 4.在实参上,**表示打散 在形参上表示耦合
# # 位置  *args  默认值

 

2.名称空间

我们给存放名字和值的关系的空间起一个名字:命名空间,我们的变量在存储的时候就是储存在这片空间中的

命名的空间分类

全局命名空间--》我们在py文件中,函数外声明的文件都是全局命名空间

局部命名空间-》在函数中声明的变量会放在局部命名空间

内置命名空间--》存在Python解释器为我们提供的名字,list,str,tuple,int这些都是内置的命名 空间

函数中变量的分类

# 最开始会开辟一个自己的命名空间——内置空间名称
#
# 在函数内部属于局部名称空间
# # 直接在py文件一个层面上是全局名称空间
# def func():
#     lalala =10
# func()
# 加载顺序
# 内置=》全局=》局部
# 取值顺序
# 局部=》全局=》内置

作用域

作用域:变量或者函数的声明周期
全局作用域:全局名称空间+内置名称空间
局部作用域:局部名称空间

qiao = "乔峰"
def 抗收音机():
    bgm = "难念的经"
    print("娃哈哈")
    print(locals())
抗收音机()

print (globals())查看全局作用域中的内容
print(locals()) 查看当前作用域中的内容

 

3.函数的嵌套

def func1():
    print ('我是function1')

def func2():
    print('我是function2')
    func1()

def func3():
    func2()
    print('我是function3')
func3()
这样的代码是互相调用,不是嵌套
def outer():
    def inter():
        print ('我是内部')
    print ('我是外部')
    inter()
outer()


def outer():
    print ('我是外面的')
    def inter1():
        def inter2():
            print ('我是里边的2')
        inter2()
        print('我是里边的1')
    inter1()
    print ('我是外面的收尾')
outer()

a = 10
def func():
    global a  #表示的是在当前作用域中使用的a是全局中的变量\
    # 结果就是把这个函数中的a的值给全局变量
    a = 20
    print (a)
print (a)
func()
print (a)

nonlocal

# def outer():
#     a = 10
#     def inter():
#         nonlocal a #a找的是局部当中,离他最近的上层中的那个变量
#         a += 20
#         print (a)
#     print (a)
#     inter()
#     print (a)
# outer ()

 

需要完全搞懂的知识点

# a = 1
# def fun1():
#     a = 2
#     def fun2():
#         nonlocal a
#         a = 3
#         def fun3():
#             a = 4
#             print (a)
#         print (a)
#         fun3()
#         print (a)
#     print (a)
#     fun2 ()
#     print (a)
# print (a)
# fun1 ()
# print (a)

# global 引入的是全局变量,可以定义全局变量
# nonlocal 引入局部中离他最近的外部变量

 

posted on 2018-10-05 15:26  小王子QAQ  阅读(42)  评论(0)    收藏  举报