03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,
# 此时要用到动态参数*args,**kwargs(万能参数。)
# *args接收的是所有的位置参数。
# **kwargs接收的是所有的关键字参数。
# 位置参数,*args,默认参数, **kwargs
# def func1(*args, **kwargs):
# print(args)
# print(kwargs) # func1(1, 2, 3, 4)
# func1(x=4, y=5, z=6)
def func1(*args, **kwargs):
print(kwargs)
func1(1, 2, 3, x=4, y=5, z=6)
先拿位置参数 和 默认参数 发现 *args 要放在他俩中间
def func(a, b, *args, sex='男'):
print(a)
print(b)
print(args)
print(sex)
func(1, 2, 5, 6, 7, 8, sex ='女')
再拿 位置参数,*args, 默认参数, 发现 **kwargs 只能放在最后
def func(a, b, *args, sex='男', age=20, **kwargs):
print(a)
print(b)
print(args)
print(sex)
print(age)
print(kwargs)
func(1, 2, 5, 6, 7, 8, x=5, y=9, age=33, sex ='女')
PS: 计算器 输入数字 进行相加
def sum1(*args):
ret = 0
for i in args:
ret += i
return ret
print(sum1(1, 2, 3,))
* 的魔法用法
def func(*args, **kwargs): # 函数的定义 * 用意是聚合
在函数的执行时, # * 的用意是打撒。
def func(*args, **kwargs):
print(args)
# print(kwargs)
l1 = [1, 2, 6]
l2 = [55, 66, 77]
s1 = 'dhfjgdfgj'
s2 = 'vocvb,cmb'
dic1 = {'name': 'alex'}
dic2 = {'age': 99}
func(*l1, *l2)
# func(**dic1, **dic2)
def func(*args, **kwargs):
# print(args)
print(kwargs)
l1 = [1, 2, 6]
l2 = [55, 66, 77]
s1 = 'dhfjgdfgj'
s2 = 'vocvb,cmb'
dic1 = {'name': 'alex'}
dic2 = {'age': 99}
# func(*l1, *l2)
func(**dic1, **dic2)
04,名称空间,作用域,作用域链,加载顺序等。
#当程序运行时,代码从上至下一次读取,遇到变量与值,
# 他会在内存中开辟一个空间,存放变量与值的内存地址的对应关系。
#这样存储变量与值得对应关系的空间叫做名称空间(命名空间)。
#当解释器遇到函数时,他会将函数名存储在内存中,但是对于函数体莫不关心。
#当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个
# 临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做临时名称空间。
# def func1():
# a = 2
# b = 3
# func1()
名称空间:
内置名称空间
全局名称空间
局部名称空间
加载顺序:内置名称空间 ---> 全局名称空间(程序运行时) ---->局部名称空间(函数执行时)
作用域:
全局作用域:内置名称空间 全局名称空间
局部作用域:局部名称空间
取值顺序(单向):局部名称空间(函数执行时) ---> 全局名称空间 ---> 内置名称空间
L local
E eclose
G global
B Built-in
05,函数的嵌套。
判断 运行的 先后顺序
print(111) #
def func1():
name = 'alex'
print(name) #
def inner():
a = 2
print(a) #
inner()
func1()
print(111) #
def func1():
name = 'alex'
print(name) #
def inner():
a = 2
print(a) #
inner()
print(333) #
func1()
print(444) #
print(111) #
def func1():
name = 'alex'
print(name) # 2
def inner():
a = 2
print(a) #
print(444) #
inner()
print(555) #
func1()
06,global,nonlocal。
# 在全局名称空间里得到局部名称空间的变量
# 1,return
# 2,global
# 1,在局部作用域中声明一个全局变量。
# 2,在局部作用域中,更改一个全局变量。
# 补充:
# 对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
return
# def func1():
# name = 'alex'
# return name
# ret = func1()
# print(ret)
global
1,在局部作用域中声明一个全局变量。
# def func1():
# global name
# name = 'alex'
# func1()
# print(name)
2,在局部作用域中,更改一个全局变量。
# name = '老男孩'
# def func1():
# global name
# name = 'alex'
# func1()
# print(name)
# 对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
# l1 = [1, 2, 3]
# def func1():
# l1.append(666)
# func1()
# print(l1)
nonlocal
#1,不能改变一个全局变量。
# 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
# 并且引用的哪层,从那层及以下此变量全部发生改变。
1,不能改变一个全局变量。 报错!
name = "老男孩"
def func1():
nonlocal name
print(name)
func1()
# 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
# 并且引用的哪层,从那层及以下此变量全部发生改变。
def func1():
name = 'alex'
print(name) # 1, alex
def inner():
nonlocal name
name = '老男孩'
print(name) # 2 老男孩
inner()
print(name) # 3 老男孩
func1()
动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结的更多相关文章
-
Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法
Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...
-
Day 10 动态参数&;名称空间,局部全部.函数嵌套&;global nonlocal关键字.
一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...
-
函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用
一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部 ...
-
python基础之函数参数,名称空间,以及函数嵌套
函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...
-
Python——day11 函数(对象、名称空间、作用域、嵌套、闭包)
一.函数对象 函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象 函数对象的应用 1. 可以直接被引用 fn = cp_fn 2 .可以当作函数参数传递 c ...
-
Python_动态参数、名称空间、作用域、作用域链、加载顺序、函数的嵌套、global、nonlocal
1.动态参数 当实参数量与形参数量相等时,参数传递正常. def func1(a, b, c): pass func1(1, 2, 3) 当实参数量与形参数量不相等时,则会报错. def func1( ...
-
python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象
今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...
-
python--函数、参数、名称空间与作用域、匿名函数、内置函数、闭包
python函数 函数定义 def welcome(): print('hello world!!') welcome() #函数调用 ...运行结果 hello world!! 函数定义和编写原则: ...
-
跟着太白老师学python day10 名称空间,作用域和取值顺序,变量的加载顺序
名称空间分为3种: 1. 全局名称空间 2. 内置名称空间 3. 局部名称空间(临时) 作用域 全局作用域 1全局名称空间 2 内置名称空间 局部作用域 ...
随机推荐
-
django入门记录 1
步骤: 1 安装python和django 2 创建项目python-admin startproject mysite(此处可以替换) 3 至少需要一个数据表,所以要创建一个表 python ...
-
迅为iTOP-4418开发板兼容八核6818开发板介绍
核心板介绍 三星四核S5P4418与八核6818完美兼容 1GB内存/2GB内存可选 电源管理:AXP228,支持动态调频,超低功耗 核心板引出脚最全:四组连接器共320个PIN脚 核心板连接器高度仅 ...
-
ios 消息推送流程 转载
iOS开发:推送通知简述及开发实践热度 1已有 706 次阅读 2013-10-15 09:23 |个人分类:经验之谈|系统分类:ios| IOS, 推送一.关于推送通知 推送通知,也被叫做远程通知, ...
-
Mvc学习--1
1.缓存机制[OutputCache(Duration=10)] 后面的 duration 表示缓存时间 直接放在action上面 是一个特性2.文件上传 @using (Html.BeginForm ...
-
通过程序 VB.Net 或 C# 读取文本文件行数
1, VB.NET 读取 (通过streamReader) ' tmpCount = 0 'Dim tmpSR As New StreamReader(fileFullName, System.Tex ...
-
8-10-Exercise
链接:第三次练习 A.ZOJ 3203 Light Bulb 这道题............哎~既可以用数学直接推导出来,也可以三分求,还可以二分求~~~~ NO1.数学公式 这种方法搞的不是很清楚 ...
-
常用的 css 命名规则
头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left rig ...
-
【mysql】常用操作
2.mysql service mysql status mysql --version mysql -h 服务器主机地址 -u 用户名 -p 用户密码 exit 退出 mysql -h 主机名 - ...
-
Java Error : type parameters of <;T>;T cannot be determined during Maven Install
遇到了一个问题如下: Caused by the combination of generics and autoboxing. 这是由于泛型和自动装箱联合使用引起的. 可以查看以下两个回答: 1 ...
-
Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)
前面用了好久Notebook来交互式编程了,这次说说几个其他的选项: Notebook Markdown 这次选Markdown模式(关于Markdown基础可以看之前写的Markdown Base) ...