10,*args **kwargs 函数的命名空间。
用户传入到函数中的实参数量不定时,或者是为了以后拓展,
此时要用到动态参数*args,**kwargs(万能参数。)
*args(接受的是所有的位置参数)
以元组的形式返回给函数调用者。
**kwargs(接收的是所有的关键字参数)
以字典的形式,返回给函数调用者。
**dict 将字典的键值对添加到kwargs字典中。
*可迭代对象(str,list,tuple,list,dict(key))每一个元素添加到args元组中。
print不能接受**kwargs的关键字参数。
# 在有多种类型的在形参接受数据的时候,位置参数必须在前面,默认参数必须在后面,关键字参数要遵循位置参数
def func2(a,b,*args,sex='男'):
print(a)
print(b)
print(args)
print(sex) func2(1,2,'f','g','s',sex='女')
def func2(a,b,*args,sex='男',age=20,**kwargs):
print(a)
print(b)
print(args)
print(sex)
print(age)
print(kwargs)
func2(1,2,4,5,6,7,8,x=6,y=5,name='alex')
计算传参计算出数值
def sum1(*args):
ret = 0
for i in args:
ret += 1
return ret d = sum1(1,2,3,)
print(d)
打印出args 和kwargs的格式
def func1(*args,**kwargs):
print(args)
print(kwargs)
func1()
将列表,字典融合一个列表
def func1(*args,**kwargs):
print(args)
print(kwargs)
l1 = [1, 2, 3]
l2 = [11, 21, 32]
dic = {'name':'alex','age':18}
dicc = {'na':'ex','a':18}
func1(*l1,*l2,**dic,**dicc)
在函数的执行时,*是用来打散,**也是打散。
def func3(*args,**kwargs):
print(args)
print(kwargs)
l1 = [1, 2, 3]
l2 = [11, 21, 32]
func3(*l1,*l2)
def func3(*args,**kwargs):
print(args)
print(kwargs)
# l1 = [1, 2, 3]
# l2 = [11, 21, 32]
l1 = {'name':'dddd','ddff':18}
l2 = {'ne':'dd','df':1}
什么是命名空间?
命名空间就是,我们给在内存中存放变量与值得对应关系的空间,叫做命名空间。
命名空间一共分为三种:
1,全局命名空间
代码在运行开始,创建的存储,变量与值得关系,的空间叫做全局命名空间。
2,局部命名空间
在函数的运行中,开辟了临时的空间叫做局部命名空间。临时空间没有特殊的含义下,不能被全局变量引用。
3,内置命名空间
内置命名空间中存放了python解释器为我们提供的函数,例如:input,list,print,tuple......他们都是我们拿过来直接可用的内置函数。
命名空间的加载与取值顺序?
加载python文件时候,内置命名空间(程序运行前加载)——全局命名空间:从上到下加载--——局部命名空间(程序运行中,调用时候才加载)
取值顺序?
在局部调用:局部命名空间——全局命名空间——内置命名空间。
在全局调用:全局命名空间——内置命名空间。
取值顺序(单项):局部名称空间(函数执行时)——全局命名空间——内置命名空间
执行顺序:local——eclose——global——built-in
当程序运行时,代码从上至下一次读取,遇到变量与值,
他会在内存中开辟一个空间,存放变量与值的内存地址的对应关系。
这样存储变量与值得对应关系的空间叫做名称空间(命名空间)。
当解释器遇到函数时,他会将函数名存储在内存中,但是对于函数体莫不关心。
当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个
临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做临时名称空间。
count = 1 def func1():
print(count)
func1()
局部作用域可以对全局作用域的变量进行引用。
count = 1
# 函数内部如果有变量名与全局变量名相同且对此变量进行改变,
# Python 就会将你引用的那个变量视为局部定义的变量,但是局部没定义,
# 则他会报错。
# def func1():
# count1 = count + 1
# print(count)
# func1()
#
# def func1():
# count = 3
# def inner():
# count = count + 1
# inner()
# print(count)
# func1()
作用域 global 和 nonlocal
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。
全局作用域:包含内置名称空间,全局名称空间,在整个文件的任意位置都能被应用,全局有效。
局部作用域:局部名称空间,只能在局部范围内生效。
global
1声明一个全局变量。
2在局部作用域想要对全局作用域的全局变量进行修改时,需要用到golbal(限于字符串,数字)
1,定义一个global,在局部作用域中,声明一个全局变量。
2,在局部作用域中,更改一个全局变量。 3,对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
global:
def func1():
global name
name = 'alex'
func1()
name = '老男孩'
print(name)
1,定义一个global,在局部作用域中,声明一个全局变量。
2,在局部作用域中,更改一个全局变量。
对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
nolocal:
不能改变一个全局变量。
在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下变量全部发生改变。
def func1():
name = 'alex'
print(name) #alex
def inner():
nonlocal name
name = '老男孩'
print(name)#老男孩
inner()
print(name) #老男孩
func1()
def add_b():
b = 42
def do_global():
b = 10
print(b)
def dd_nonlocal():
nonlocal b
b = b + 20
print(b)
dd_nonlocal()
print(b)
do_global()
print(b)
add_b()
10,*args **kwargs 函数的命名空间。的更多相关文章
- python --- 10 *args **kwargs 命名空间 作用域 函数的嵌套
函数进阶 1. "*" 和 "**" ① 在形参位置时 都是聚合的作用 *args 位置参数→元组 **kwargs 关键字参数→字典 混 ...
- python之路---10 *args **kwargs 命名空间 作用域 函数的嵌套
二十八.函数进阶 1. "*" 和 "**" ① 在形参位置时 都是聚合的作用 *args 位置参数→元组 **kwargs 关键字参数→ ...
- day10 参数args kwargs 作用域
函数参数/作用域/args/kwargs 1.参数 1.1参数基本知识 任意个数 任意类型 func("1",True) 1.2位置传参(调用函数并传入参数) def func(a ...
- 动态参数(*args,**kwargs),命名空间和作用域,global和nonlocal,函数的嵌套
1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上*聚合, **聚合 在实参上*打散, **打散 ...
- python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal
一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...
- python之动态参数 *args,**kwargs和命名空间
一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args ...
- (3)什么是函数(函数的定义、形参、实参、默认形参、可变长函数args|kwargs)
什么是函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需调用其函数名即可 1.减少重复代码 2.使程序变的可扩展 3.使程序变得易维护 定义函数的语法 形参 主要的作 ...
- 函数参数 f_arg, *args, **kwargs
当需要给函数传参时,可以通过运用不同的形参来传递,达到参数不同的使用目的. 简单来说:f_arg就是传递的第一个参数,类似于C++中的普通参数: *args 传递的是一个参数的list: **kwar ...
- 1.函数的结构,调用,传参,形参,实参,args,kwargs,名称空间,高阶函数
1.函数的初识 初始函数 获取任意一个字符串的元素的个数 s1='dsjdkjkfefenga' count=0 for i in s1: count+=1 print(count) 获取列表的元素的 ...
随机推荐
- ZOJ Saddle Point 数学思维题
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5564 根据它的定义是行最小,列最大. 可以证明鞍点是唯一的. ...
- 牛客网Java刷题知识点之调用线程类的start()方法和run()方法的区别
不多说,直接上干货! 前期博客 牛客网Java刷题知识点之四种不同的方式创建线程 这里很简单 首先,系统通过调用线程类的start()方法来启动一个线程,此时这个线程处于就绪状态,而非运行状态,也就意 ...
- Unity Shader入门精要学习笔记 - 第14章非真实感渲染
转载自 冯乐乐的 <Unity Shader 入门精要> 尽管游戏渲染一般都是以照相写实主义作为主要目标,但也有许多游戏使用了非真实感渲染(NPR)的方法来渲染游戏画面.非真实感渲染的一个 ...
- Unity Shader入门精要学习笔记 - 第13章 使用深度和法线纹理
线纹理的代码非常简单,但是我们有必要在这之前首先了解它们背后的实现原理. 深度纹理实际上就是一张渲染纹理,只不过它里面存储的像素值不是颜色值而是一个高精度的深度值.由于被存储在一张纹理中,深度纹理里的 ...
- VS局域网断点调试设置
1.电脑文档文件夹下\IISExpress\config文件内找到applicationhost.config文件编辑 找到<sites>节点 找到你要编辑的site节点 在<bin ...
- Java编程基础-字符串
在Java语言中,字符串数据实际上由String类所实现的.Java字符串类分为两类:一类是在程序中不会被改变长度的不变字符串:另一类是在程序中会被改变长度的可变字符串.Java环境为了存储和维护这两 ...
- uvm_marcos——UVM宏定义
I programmed all night.Through the window, on my screen,The rising sun shined. 编程一整夜,透过窗户,照在屏幕上.初升的太 ...
- Android上线check_list
Android 上线 check_list 类型 序号 检查项 结果(pass/no) 安装 卸载 1 非Root环境下的安装.卸载 2 Root环境下的安装.卸载 3 安装文件检查,无泄漏用户信息的 ...
- spring 上传附件
jsp: <form class='uk-form' action="savelead" method="post" enctype="mult ...
- 数据库web项目对数据库的操作
1.0.JSTL与jsp实现对数据库的操作 MySql 数据库: create database if not exists CommodityDB; use CommodityDB; drop ta ...