码迷,mamicode.com
首页 > 其他好文 > 详细

函数基础2

时间:2019-08-11 20:25:04      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:参数   引用   int   产生   函数定义   oca   rgs   func   结束   

1. 可变参数

  • 可变位置参数(*args):接收多余的位置参数,以元组形式存储
  • 可变关键字参数(**kwargs):接收多余的关键字参数,以字典形式存储
def person(name, age, height = 180, *args, **kwargs):
    print(name)
    print(age)
    print(height)
    print(args)
    print(kwargs)
    
person('zhangsan', 18, 185, 20, '男', live = 'Shanghai')

执行结果为:

zhangsan
18
185
(20, '男')
{'live': 'Shanghai'}

2. 函数对象

python中面向对象贯彻的很彻底,一切即对象,函数是第一类对象,即函数可以被当做数据处理。

  • 引用:可以将函数引用给其他变量
  • 当作参数传给一个函数
  • 可以当作函数的返回值
  • 可以当作容器类型的元素

3. 函数嵌套

def func1():
    def func2():
        a = 1
        print(a)
    func2()
    
func1()

4. 名称空间和作用域

变量到底是什么,我们从前面学习的知识可知道,定义了一个变量后,变量名就会指向变量值,这种关系与字典很像,变量值存放在变量名指向的内存空间地址,那么变量名存放在什么地方呢?其实在Python中有专门的区域存放变量名,这和空间就称为名称空间。

1. 名称空间

  • 内置名称空间:存放Pyhton解释器自带的名字,在python解释器启动时有效,python解释器关闭后失效
  • 全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间,在文件执行时生效,文件执行结束后失效
  • 局部名称空间:用于存放函数调用期间函数体产生的名字,在文件执行调用函数时生效,函数调用结束后失效
  • 加载顺序:内置名称空间 -> 全局名称空间 -> 局部名称空间
  • 查找顺序:当前名称空间 -> (内置名称空间 -> 全局名称空间 -> 局部名称空间)

2.作用域

  • 全局作用域:全局有效,全局存活,包含内置名称空间和全局名称空间。
  • 局部作用域:局部有效,临时存储,只包含局部名称空间。
  • 注意:作用域关系在函数定义阶段就固定死了,与函数的调用无关。
  • global:修改全局作用域中的变量
def test():
    global x
    x = 1
    
x = 3
test()
print(x)  # 不申明之前结果为3,申明之后修改为1
  • nonlocal:修改局部作用域中的变量。
def test():
    x = 1
    def test1():
        nonlocal x
        x = 2
    test1()
    print(x)  # 不申明之前为1,申明之后修改为2
    
x = 3
test()
print(x)  # 3,因为没有申明全局变量,保持不变

函数基础2

标签:参数   引用   int   产生   函数定义   oca   rgs   func   结束   

原文地址:https://www.cnblogs.com/zj420255586/p/11336429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!