1.空间:内置空间,全局空间,局部空间。

内置空间:空间存放python解释器,为我们提供了方便的名字:input,print,str,list,tuple

三个空间的加载顺序:

内置空间》》全局空间》》局部空间

三个空间的取值顺序:

局部调用:局部空间》》全局空间》》内置空间

全局调用:全局空间》》内置空间

作用域:

全局作用域:包含内置空间,全局空间,在整个文件的任意位置都能被引用,全局有效。

局部作用域:局部空间内有效。

2.函数参数--动态参数

2.1动态接收位置参数:

参数位置用*表示接受任意参数

*表示一种聚合。

def fun(*args):
print('张学友的歌曲:',args) #收到的结果是一个元祖。( ,)
fun('李兰香','饿狼传说','心如刀割','我等到花儿也谢了')
结果;
张学友的歌曲: ('李兰香', '饿狼传说', '心如刀割', '我等到花儿也谢了')

2.1.1.注意:动态接收参数时--动态参数必须在位置参数的后面。

def fun(*args,a,b):          #动态参数在位置参数前面,聚合后位置参数世界收不到数据
print(args,a,b)
fun(1,2,3,4,55) TypeError: fun() missing 2 required keyword-only arguments: 'a' and 'b'

正确的输入是  动态参数在位置参数的后面:

def fun(a,b,*args):    #动态参数在位置参数后面。
print(args,a,b)
fun(1,2,3,4,55)
结果:
(3, 4, 55) 1 2 #args以元组的形式输出,a=1,b=2

2.1.2 带有默认值的参数的位置问题:

默认值写在动态参数前面,默认值不生效

# 默认值写在动态参数前面,结果不生效
def fun(a,b,c='All falls down',*args):
print(a,b,c,args)
fun(1,2,3,4,5,6,'ada lace') 结果:
1 2 3 (4, 5, 6, 'ada lace') #实际上默认值All falls down没有打印出来

  

默认值写在动态参数后面,默认值生效

# 默认值在位置参数后面,结果生效
def fun(a,b,*args,c='All falls down'):
print(a,b,c,args)
fun(1,2,3,4,5,6,'ada lace')
结果:
1 2 All falls down (3, 4, 5, 6, 'ada lace')

  注意:形参的顺序:位置参数》》动态参数》》默认参数

     *args  **kwargs 程序员约定习惯

3.动态接收关键字参数

*无法接收关键字参数。

#动态关键字接收参数最后会生成一个字典形式
def fun(**kwargs):
print(kwargs)
fun(a=11,b=[1,True],c='ad',d={1,2})
结果:
{'a': 11, 'b': [1, True], 'c': 'ad', 'd': {1, 2}}

顺序:位置参数》》*args(动态位置参数)》》默认值参数》》**kwargs

def fun(*args,**kwargs):
print(args,kwargs)
fun(1,['ada lace',123],'lace',{"k1":1},a='TROUBLE',b=123,c=[11,22,3])
结果:
(1, ['ada lace', 123], 'lace', {'k1': 1}) {'a': 'TROUBLE', 'b': 123, 'c': [11, 22, 3]}

例如:

def fun(a,b,*args,c='JOKER',**kwargs):
print(args,kwargs)
fun(1,2,['ada lace',123],'lace',{"k1":1},d='TROUBLE',e=123,f=[11,22,3])
结果:
(['ada lace', 123], 'lace', {'k1': 1}) {'d': 'TROUBLE', 'e': 123, 'f': [11, 22, 3]}

4.函数的注释:

函数注释用"""    """

在外部查看函数的注释 函数名.    _doc_

5.global,  nonlocal

global 表示不再使用局部作用域的内容,而改用全局作用域

global只限定于字符串和数字。

注:对于可变的数据类型(list,dict,set),可以直接引用,不用通过global。

a=100
def fun():
global a
print(a)
fun()
print(a)

可变的数据类型:

li=[11,22,33]
def fun():
li.append('Tro')
print(li)
fun()
结果:
[11, 22, 33, 'Tro']

nonlocal:

1,不能修改全局变量。

2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

a=10
def fun():
a=20
def fun1():
nonlocal a
a=83
print(a)
fun1()
print(a)
fun()
结果:
83
83
a=10
def fun():
a=20
def fun1(): a=83
print(a)
fun1()
print(a)
fun()
结果:
83
20

  

day 0314函数的进阶的更多相关文章

  1. 小学生都能学会的python(函数的进阶)

    小学生都能学会的python(函数的进阶) 1. 动态传参 形参: 1. 位置参数 2. 默认值参数 3. 动态传参 *args 动态接收位置参数 **kwargs 动态接收关键字参数 def fun ...

  2. python基础(9)-迭代器&生成器函数&生成器进阶&推导式

    迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...

  3. 初涉JavaScript模式 (10) : 函数 【进阶用法】

    写在前面 不知不觉写到第10篇了.这篇写起来很忐忑,终于和高级搭上边了(呵呵),这篇我们 主要 说一下 JS 方法的部分高级用法(我知道的),笔者水平有限,难免有错.废话不多少,进入正文. 初始化 我 ...

  4. Python之函数的进阶(带参数的装饰器)

    函数篇--装饰器二 带参数的装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函 ...

  5. python成长之路七-函数的进阶

    1,python中,名称空间分三种: 全局命名空间 局部命名空间(临时命名空间) 内置名称空间 2,作用域(两种): 1,全局作用域  包含:全局名称空间   内置名称空间 2,局部作用域  包含:局 ...

  6. python学习 day10打卡 函数的进阶

    本节主要内容: 1.函数参数--动态参数 2.名称空间,局部名称空间,全局名称空间,作用域,加载顺序. 3.函数的嵌套 4.gloabal,nonlocal关键字 一.函数参数--动态传参 形参的第三 ...

  7. day python011函数的进阶

    形参: 1.位置传参  2. 默认值传参. 3.动态传参 一   动态传参(形参的一种): 之前我们说过了了传参, 如果我们需要给⼀一个函数传参, ⽽而参数⼜又是不确定的. 或者我给⼀一个函数传很多参 ...

  8. 函数的进阶(动态参数,命名空间和作用域,函数的嵌套,gloabal和nonlocal关键字)

    1. 函数参数--动态传参 昨天已经解过了传参, 如果需要给一个函数传参,而参数又是不确定的. 或者我们给一个函数传很多参数, 我的形参就要写很多, 写起来就很麻烦, 这时我们可以考虑使用动态参数.形 ...

  9. python 内置函数(二) 进阶函数 递归内容及二分法查找 知识点

    1,lambda:  匿名函数 2.sorgted()  排序函数 3,filter()   过滤函数 筛选 4,map()  映射函数 5.递归 6.二分法 一. 匿名函数: lambda lamb ...

随机推荐

  1. JS控制音频顺序播放

    做一项目,用到“叫号功能”,网页上有一“叫号”按钮,点击后就读数据库中存的号码,如123号, 然后就发声音出来, 思路是网上下载0123456789的叫号声音,然后按钮点击事件里就在JS里写用那个HT ...

  2. ASP.NET CORE下用盛派微信SDK取微信openid

    用CORE做项目用到微信的相关东西,听说那个盛派微信SDK很火,自己弄了下,只是简单的用用,用户访问页面取微信openid

  3. Atiitt 使用java语言编写sql函数或存储过程

    Atiitt 使用java语言编写sql函数或存储过程 1.1. java编写sql函数或存储过程的机制1 1.2. Java编写sp的优点1 1.3. 支持java源码,class文件,blog f ...

  4. batch,iteration,epoch 什么意思

    深度学习中经常看到epoch. iteration和batchsize,下面按自己的理解说说这三个的区别: (1)batchsize:批大小.在深度学习中,一般采用SGD训练,即每次训练在训练集中取b ...

  5. docker打包centos增加中文支持

    docker打包centos增加中文支持 前言 使用的某个包的返回值,在本机测试时返回结果是中文,结果打包到docker后返回结果变英文了:猜测是系统语言的问题,进入docker测试了一下,发现果然是 ...

  6. Centos7.x 执行top命令教程

    一.作用 top命令用来显示执行中的进程,使用权限是所有用户 二.格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 三.命令参数解释 d:指定更新的间隔,以秒计 ...

  7. 【九天教您南方cass 9.1】 07 绘制与标注圆曲线和细部点的方法

    同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 我是本节课主讲老师九天. 我们讲课的教程附件也是共享的,请注意索取测量空间中. [点击索取cass教程]5元立得 (给客服说暗号:“ ...

  8. java中的数据加密5 数字证书

    数字证书 A用私钥加密了,那么B接受到消息后,用A提供的公钥解密:那么现在有个讨厌的C,他把消息拦截了,然后用自己的私钥加密,同时把自己的公钥发给B,并告诉B,那是A的公钥,结果....,这时候就需要 ...

  9. Java知多少(73)文件的压缩处理

    Java.util.zip 包中提供了可对文件的压缩和解压缩进行处理的类,它们继承自字节流类OutputSteam 和 InputStream.其中 GZIPOutputStream 和 ZipOut ...

  10. C# 验证给定的字符串形式的日期是否合法

    用于验证日期的有效性,对于用户输入的不规则日期也作了简单处理,比如用户输入了“今天”,则代码会认为用户要返回的是今天的日期,另外可以对纯数字的日期进行解析,比如:20130906 /// <su ...