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 关键字参数→字典 混 ...
随机推荐
- 【24.63%】【codefroces 686D】Kay and Snowflake
time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standa ...
- Android 升级下载 它们的定义Updates 兼容版本
Android 更新模块 它们的定义Update 写这个总结是由于在项目中碰到了Android系统兼容的BUG Android项目原本使用的是API提供的下载方法 例如以下: Download ...
- 记录一下go web 文档
https://github.com/astaxie/build-web-application-with-golang
- PAT 1065 - 1068 题解
这次的题目来源是 2013 年 10 月 7 日下午的浙大计算机研究生招生机试题. 这次题目的难度,按姥姥的说法是:『比普通的 PAT 要难了 0.5 个点.我是把自己的题目从 1.0 到 5.0 以 ...
- Windows Container 和 Docker
Windows Container 和 Docker 微软在2016年的Ignite技术大会上正式发布了Windows Server 2016,其中的容器服务已经可以作为生产环境使用.这意味着Wind ...
- Method for finding shortest path to destination in traffic network using Dijkstra algorithm or Floyd-warshall algorithm
A method is presented for finding a shortest path from a starting place to a destination place in a ...
- atitit.提高开发效率---mda 革命性的软件开发方法
atitit.提高开发效率---mda 革命性的软件开发方法 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和事实上现相分离 2 3. 眼下的问题模型和代码不同步 2 4. ...
- C++一个简单的手柄类模板
#ifndef HANDLE_H #define HANDLE_H #include "Animal.h" template <typename T> class Ha ...
- 在sql语句中 inner join ,left join,right join 和on 以及where
当使用几种join的时候,on是指表连接起来基于的条件,where是对连接的表进行过滤的条件. where 1=1 当我们需要拼接字符串的时候 在基础sql字符串中写上where 1=1 可以不需要 ...
- Leetcode 319 Bulb Switcher 找规律
有n盏关着的灯,第k轮把序号为k倍数的关着的灯打开,开着的灯关闭. class Solution { public: int bulbSwitch(int n) { return (int)sqrt( ...

