一.动态传参

函数的形参中除了默认值参数和位置参数外,还有动态传参.当不确定形参有几个或者有很多的时候,就可以使用动态传参.

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中的命名空间以及函数的嵌套的更多相关文章

  1. 13.Python中的命名空间是什么

    Python中的命名空间是什么? In Python,every name introduced has a place where it lives and can be hooked for. T ...

  2. Python之路Python全局变量与局部变量、函数多层嵌套、函数递归

    Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...

  3. Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted

    1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...

  4. Python中的高阶函数与匿名函数

    Python中的高阶函数与匿名函数 高阶函数 高阶函数就是把函数当做参数传递的一种函数.其与C#中的委托有点相似,个人认为. def add(x,y,f): return f( x)+ f( y) p ...

  5. python中enumerate()函数用法

    python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6]  请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...

  6. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  7. Python中sort和sorted函数代码解析

    Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...

  8. Python中进制转换函数的使用

    Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...

  9. python --- 10 *args **kwargs 命名空间 作用域 函数的嵌套

    函数进阶 1.   "*"  和  "**" ① 在形参位置时   都是聚合的作用 *args    位置参数→元组 **kwargs   关键字参数→字典 混 ...

随机推荐

  1. OpenCL编程基本流程及完整示例

    1. 选择OpenCL平台并创建一个上下文 平台(Platform)是指主机和OpenCL管理框架下的若干个设备构成的可以运行OpenCL程序的完整硬件系统,这个是跑OpenCL程序的基础,所以第一步 ...

  2. css 单选框 样式 填充自定义背景 after

    input[type='radio'] //width 16px //height 16px display none //input[type='radio']:chcked // backgoun ...

  3. 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP

    原文 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP 能上架 Windows 应用商店的并不一定必须是 UWP 应 ...

  4. PHP数组教程

    定义数组 PHP数组array是一组有序的变量,其中每个变量被叫做一个元素. 一.定义数组 可以用 array() 语言结构来新建一个数组.它接受一定数量用逗号分隔的 key => value ...

  5. 大约laravel错误的解决方案

    2015-3-13 夜晚 9:13 执行laravel发生错误Indirect modification of overloaded element of BbsArticle has no effe ...

  6. Monthly Expense

    Problem Description Farmer John is an astounding accounting wizard and has realized he might run out ...

  7. WPF: FishEyePanel/FanPanel - 自定义Panel

    原文:WPF: FishEyePanel/FanPanel - 自定义Panel 原文来自CodeProject,主要介绍如何创建自定义的Panel,如同Grid和StackPanel. 1) Int ...

  8. error: stable identifier required, but $iwC.this.$VAL4.sqlContext found.

    在spark_shell创建SQLContext导入对象后sqlContext时间,例如,下面的例外: 找个理由sqlContext必须是val类型. 后引入到正常的变化. 版权声明:本文博客原创文章 ...

  9. Swift - 关于 Optional 的一点唠叨

    Optional 是 Swift 的一个非常重要的特性,它除了提供类型安全的机制,也是 Swift 中很多语言特性的核心.当然,使用 Optional 时也要了解很多坑,这样能帮助我们更好的运用它. ...

  10. AngularJS ng-if使用

    示例中,根据ng-if指令显示不同任务状态,以及判断任务是否可以操作 <div ng-app="NgifDemoApp" ng-controller="NgifDe ...