python中的命名空间以及函数的嵌套
一.动态传参
函数的形参中除了默认值参数和位置参数外,还有动态传参.当不确定形参有几个或者有很多的时候,就可以使用动态传参.
1.1 动态接收位置参数
在python中使用*来接收动态位置参数
def chi(*food): #只有动态参数
print('我要吃',*food)
chi('饭','肉','鱼') #我要吃 饭 肉 鱼 def chi(a,b,*food): #动态参数和位置参数
print('我要吃',*food)
chi('饭','肉','鱼','桃子','苹果') #我要吃 鱼 桃子 苹果 def chi(*food,a,b):
print('我要吃',*food)
chi('饭','肉','鱼','桃子','苹果') #chi() missing 2 required keyword-only arguments: 'a' and 'b'
#★动态参数必须在位置参数的后面,否则就全被动态参数给收了 def chi(a,b,*food,c='哈哈'): #动态参数和位置参数和默认值参数
print('我要吃',*food,c)
chi('饭','肉','鱼','桃子','苹果') #我要吃 鱼 桃子 苹果 哈哈
#★顺序位置参数,动态参数,默认值参数
1.2动态接收关键字参数
在python中使用**来接收动态关键字参数
def chi(**food): #只有动态关键字参数
print(food)
chi(a='收到',b=1,c=6) #{'a': '收到', 'b': 1, 'c': 6} def chi(a,b,**food): #动态关键字参数和位置参数
print(a,b,food)
chi('sd','zc',n='收到',z=1,x=2) # 3sd zc {'n': '收到', 'z': 1, 'x': 2} def chi(a,b,c='哈哈',**food): #动态关键字参数和位置参数和默认值参数
print(a,b,c,food)
chi('sd','zc',n='收到',z=1,x=2) #sd zc 哈哈 {'n': '收到', 'z': 1, 'x': 2}
★★★最终顺序:位置参数>*args>默认值参数>**kwargs★★★
这四种参数可以任意的进行使用
如果想接受所有的参数:
def func(*args,**kwargs): #无敌
print(args,kwargs)
func(0,1,2,'及',a=1,b=2,c='积极') #(0, 1, 2, '及') {'a': 1, 'b': 2, 'c': '积极'}
##############接收到的动态位置参数保存在元组中,接收到的动态关键字参数保存在字典中############
1.3 打散和聚合
def func(*args):
print(args)
lis=[1,2,3,4,5]
func(lis) #([1, 2, 3, 4, 5],) ##################将一个可迭代对象打碎需要在这个可迭代对象前加*#######################
def func(*args):
print(args)
lis=[1,2,3,4,5]
func(*lis) #(1, 2, 3, 4, 5) #如果是字典 def func(**kwargs):
print(kwargs)
dic={1:'a',2:'b',3:'c',4:'d',5:'e'}
func(**dic) #TypeError: func() keywords must be strings打散之后变成了1='a'不符合逻辑 ##################这里字典的键只能是字符串类型#################### def func(**kwargs):
print(kwargs)
dic={'A':'a','B':'b','C':'c','D':'d','E':'e'}
func(**dic) #{'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd', 'E': 'e'} #########################形参的位置*,**: 聚合;实参的位置*,**: 打散#############################
1.4 函数的注释
#在函数名下且只能在函数名下,输入多行注释即可产生
def func(**kwargs):
'''
这个位置写当前函数是干什么的
:param kwargs: kwargs参数是什么意思
:return: 返回值是什么玩意
'''
print(kwargs)
dic={'A':'a','B':'b','C':'c','D':'d','E':'e'}
func(**dic)
二.命名空间
2.1
在python解释器开始运行之后,就会在内存中开辟一个空间,每当遇到一个变量的时候,就会把变量名和值之间的关系记录下来,当遇到函数定义的时候,解释器只是把函数的名读入内存,表示这个函数存在了,至于函数内部的变量和逻辑,解释器是不关心的,也就是说,一开始函数只是加载进来,只有当函数被调用或访问的时候,解释器才会根据函数内部声明的变量开辟内存空间,但是,随着函数的执行完毕,这些函数内部变量占用的空间也会随着函数的执行完毕而被清空.
def func():
a=10
print(a)
func()
print(a) #此时的a不存在
命名空间 :存放名字和值之间的空间
命名空间的分类:
1.全局命名空间:函数外声明的变量都属于全局命名空间
2.局部命名空间:在函数中声明的变量会放在局部命名空间
3.内置命名空间:python解释器为我们提供的名字,list,tuple......
加载顺序:
1.内置命名空间
2.全局命名空间
3.局部命名空间
2.2作用域就是作用范围.
1.全局作用域
2.局部作用域
a=10
def func():
a=40
b=20
def abc():
print('哈哈')
print(a,b)
print(globals()) # 'a': 10, 'func': <function func at 0x0000025C198F2EA0>
print(locals()) # 'b': 20, 'a': 40
func()
#####通过globals()函数来查看全局作用域中的内容,通过locals()函数来查看局部作用域中的内容
2.3 关键字global和nonlocal
global: 在局部访问全局中的内容
nonlocal: 在局部寻找外层函数中离他最近的那个变量
以上是有nonlocal的情况:
一下是没有nonlocal的情况:

python中的命名空间以及函数的嵌套的更多相关文章
- 13.Python中的命名空间是什么
Python中的命名空间是什么? In Python,every name introduced has a place where it lives and can be hooked for. T ...
- Python之路Python全局变量与局部变量、函数多层嵌套、函数递归
Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...
- Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
- Python中的高阶函数与匿名函数
Python中的高阶函数与匿名函数 高阶函数 高阶函数就是把函数当做参数传递的一种函数.其与C#中的委托有点相似,个人认为. def add(x,y,f): return f( x)+ f( y) p ...
- python中enumerate()函数用法
python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6] 请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...
- Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用
Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...
- Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
- Python中进制转换函数的使用
Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...
- python --- 10 *args **kwargs 命名空间 作用域 函数的嵌套
函数进阶 1. "*" 和 "**" ① 在形参位置时 都是聚合的作用 *args 位置参数→元组 **kwargs 关键字参数→字典 混 ...
随机推荐
- OpenCL编程基本流程及完整示例
1. 选择OpenCL平台并创建一个上下文 平台(Platform)是指主机和OpenCL管理框架下的若干个设备构成的可以运行OpenCL程序的完整硬件系统,这个是跑OpenCL程序的基础,所以第一步 ...
- css 单选框 样式 填充自定义背景 after
input[type='radio'] //width 16px //height 16px display none //input[type='radio']:chcked // backgoun ...
- 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP
原文 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP 能上架 Windows 应用商店的并不一定必须是 UWP 应 ...
- PHP数组教程
定义数组 PHP数组array是一组有序的变量,其中每个变量被叫做一个元素. 一.定义数组 可以用 array() 语言结构来新建一个数组.它接受一定数量用逗号分隔的 key => value ...
- 大约laravel错误的解决方案
2015-3-13 夜晚 9:13 执行laravel发生错误Indirect modification of overloaded element of BbsArticle has no effe ...
- Monthly Expense
Problem Description Farmer John is an astounding accounting wizard and has realized he might run out ...
- WPF: FishEyePanel/FanPanel - 自定义Panel
原文:WPF: FishEyePanel/FanPanel - 自定义Panel 原文来自CodeProject,主要介绍如何创建自定义的Panel,如同Grid和StackPanel. 1) Int ...
- error: stable identifier required, but $iwC.this.$VAL4.sqlContext found.
在spark_shell创建SQLContext导入对象后sqlContext时间,例如,下面的例外: 找个理由sqlContext必须是val类型. 后引入到正常的变化. 版权声明:本文博客原创文章 ...
- Swift - 关于 Optional 的一点唠叨
Optional 是 Swift 的一个非常重要的特性,它除了提供类型安全的机制,也是 Swift 中很多语言特性的核心.当然,使用 Optional 时也要了解很多坑,这样能帮助我们更好的运用它. ...
- AngularJS ng-if使用
示例中,根据ng-if指令显示不同任务状态,以及判断任务是否可以操作 <div ng-app="NgifDemoApp" ng-controller="NgifDe ...

