栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python函数命名空间

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python函数命名空间

文章目录
  • 一、*与**在实参中的作用
  • 二、命名关键字参数(冷门了解)
  • 三、名称空间
    • 1.内置名称空间
    • 2.全局名称空间
    • 3.局部名称空间
  • 四、名字的查找顺序
  • 五、名称空间的作用域
  • 六、局部名称空间复杂情况
  • 七、global与nonlocal关键字
  • 八、函数名的多种使用方式

一、*与**在实参中的作用
	*在形参中的作用
		接收多余的位置参数并组织成元组的形式赋值给*后面的变量名
	**在形参中的作用
		接收多余的关键字参数并组织成字典的形式赋值给**后面的变量名
	*与** 其实在实参和形参中的作用一样 集体我们看例子:
	形参:
		def func(*args, **kwargs):			
	    	print(args)							
	    	print(kwargs)
		func()								结果:(){}
		func([1, 2, 3, 4, 5, 6])			结果:([1, 2, 3, 4, 5, 6],){}	将多余的位置转为元祖
	
	实参:def func(*args, **kwargs):
		    print(args)
		    print(kwargs)
		l1 = [1, 2, 3, 4]					列表
		s = 'hello'							字符串
		d = {'1': 'jason', '2': 18}			字典
		func(*l1)							结果:(1,2,3,4) {}				*在实参中也是将多余的位置转为元祖
		func(*s)							结果:('h', 'e', 'l', 'l', 'o'){}	字符串以字节为单位
		func(**d)							结果:(){'1': 'jason', '2': 18}		**在实参中也是将多余的位置转为字典
二、命名关键字参数(冷门了解)
		想让函数的形参在传值的时候必须要关键字传值:不可以
		def func(a,b,*args):	
		    pass
		func(1,2)							结果:空
		func(a=1,b=2)						结果:空
		func(1,b=222)						结果:空
		
		需要形参在传实参的时候 必须按照关键字参数才可以 在*args 后面加上关键形参
		下面实参加上数据值即可	
		
		def func(a, b, *args, d):			加上关键d形参 不能放在前面
   		print(a, b, args, d)
		func(1, 2, 3, 4, 5, 6, 7) 			结果:报错
		func(1, 2, 3, 4, 5, 6, d=666)		结果:1 2 (3, 4, 5, 6) 666	
三、名称空间
	就是用来存放变量名与数据值之间绑定关系的地方
1.内置名称空间
	内置名称空间就是python解释器一打开就默认创建的空间
    写代码过程中可以直接使用的名字都在该空间中(print、len、input)
2.全局名称空间
	py文件运行代码过程中产生的变量名都会存入该空间
   	1.普通代码里面的变量名	2.分支结构里面的变量名	3.循环结构里面的变量名
    4.定义函数的函数名		5.定义类的类名
3.局部名称空间
	函数体代码运行过程中产生的名字都会存入该空间

四、名字的查找顺序
	寻找变量名之前一要先看自己是那个空间
		1.当前在全局名称空间
			全局名称空间	>>>:  内置名称空间
		2.当前在局部名称空间
			局部名称空间  >>>:  全局名称空间  >>>:	内置名称空间
			
	如果三个空间中都没有这个变量名那结果就报错不存在
	名字的查找顺序默认情况下不能颠倒只能是	局部>>>:全局>>>:内置
五、名称空间的作用域
	1.内置名称空间
		在程序任意位置都可以使用(全局有效)随时调用
	2.全局名称空间
		在程序任意位置都可以使用(全局有效)随时调用
	3.局部名称空间
		在各自的局部空间可以使用(局部有效)调用的时候才有用
		只能在自己的空间里面使用 别的局部空间数据用不到
六、局部名称空间复杂情况
	1.各自局部名称空间默认情况下不能彼此共享名字
		def func1():				
		    name = 'meijin'
		    print(age)
		def func2():						结果肯定是报错的
		    age = 18						在各自的局部空间可以使用(局部有效)
		    print(name)
		func1()
		func2()
	2.局部案例怎样拿到其他局部的变量名:嵌套式函数
		x = 1
			def func1():
			    x = 2
			    def func2():
			        x = 3					当本层函数没有x再在外层局部寻找X
			        def func3():			外层的局部空间也没有x就在全局空间找
			            print(x)  			全局没有找内置空间 内置空间没有报错
			        func3()
			    func2()
			func1()
七、global与nonlocal关键字
	global
		正常情况下 局部名称空间里面出现新的名字会在局部名称空间中存储
		但是有时候需要在局部名称空间中修改全局名称空间的名字	这就有了global
		局部修改全局名称空间中不可变类型的数据 需要使用关键字global	(str、int、float、tuple)
		如果是可变类型 则无需关键字声明 (list、dict、set)
		money = 999

		def func():	
		    global money  					加上global这时候改变的就是全局名称中的money
		    money = 1000					赋值全局名称中的money
		    print(money)
		func()
	nonlocal
		在内存局部名称空间修改外层局部名称空间中的不可变类型
		def func1():
		    x = 1
		    l1 = [1,2]
		    def func2():
		        nonlocal x					声明修改外层局部x
		        x = 999						给予新数据值
		        l1.append(666)				l1尾部追加666
		    func2()
		    print(x)
		    print(l1)
		func1()								结果:999,[1,2,666]	

八、函数名的多种使用方式
	1.函数名也可以被用来多次赋值(函数名与变量名使用一致)
	
		def func():
    		print('from func')
		name = func							func函数名的数据值赋值给name
		name()
		name1 = name						函数名name赋值给name1
		name1()
	
		result:from func, from func
	
	 2.函数名还可以当做函数的实参
	 	def func():
    		print('from func')	
		def index(a):
		    print(a)
		index(123)							返回值123
		name = 'meijin'
		index(name)							返回meijin
		index(func)							返回函数体代码
	
		result: 123, jason, 

	 3.函数名还可以当做函数的返回值
		def func():
	   		print('from func')
		def index():
		    return func
		res = index()						函数名index赋值给res
		print(res)							打印出来回事函数体代码地址
		res()								运行res函数

		result:, from func

	 4.函数名还可以当做容器类型里面的数据值
	 	def func():
   			print('from func')
		l1 = [1,2,3,4,func]					尾部添加未运行的函数名
		print(l1)							1234函数体代码地址
		l1[-1]()							索引函数名并运行
		
		result:[1, 2, 3, 4, ],from func

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004900.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号