函数基础2
Posted zj420255586
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数基础2相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章