6.函数的动态参数

*args,**kwargs:能接受动态的位置参数和动态的关键字参数

*args -- tuple

*kwargs -- dict

动态参数优先级:位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数

1.*.args:

​ 接收动态的位置参数,接受任意多个,定义阶段*为聚合,调用阶段*为打散

def func(a,b,*args):#*.args可以替换,*s
print(a,b,args)
print(a,b,*args) #*为打散
func(1,2,3,4,5,6)
#优先级: 位置参数 > 动态参数 def func(a=1,b=2,*args):#不推荐使用,不会报错
print(a,b,args)
func(1,2,3,4,5,6)
#默认参数放在动态参数后面
def func(*args,a=11,b=12):
print(a,b,args)
func(1,2,3,4,5,6)
#*args:元组,接收位置参数
2.**kwargs:

​ 接收动态的关键字参数

#**kwargs:字典,接收关键字参数。
def func(a,b,**kwargs):
print(a,b,kwargs)
func(1,2,3,4,5,6)

def func(a,b,*args,c=1,d=2,**kwargs):
print(a,b,args,c,d,kwargs)#*kwargs:获取是字典的键
print(*kwargs)
func(1,2,3,4,c=8,d=10,e='alex',f='wusir')
3.#*args,**kwargs结合:
def func(*args,**kwargs):
print(args,kwargs)
func(1,2,3,4,a=5,b=2,c=7)
4.扩展:将列表和字典传进去的方法
#列表
list1 = [12,23,3,4,5,6]
def func(*args):
print(*args)
func(list1[0],list1[1]...)#笨方法
func(*list1)#用*打散全部上传
#字典
dict1 = {'k1':1,'k2':2}
def func(**kwargs):
print(kwargs)
func(**dict1)

7.函数的注释:

反射

def func(user,passwd):
"""
密码加密
:param user: 用户名 str
:param passwd: 密码 str
:return: 加密的密码
"""
return user,passwd print(func.__doc__)#查看函数注释
print(func.__name__)#查看函数名

8.名称空间:

全局空间:当前的py文件需要开辟的空间存放在全局空间,(无缩进)

局部空间:函数中开辟的的空间就是局部空间

内置空间:用于存放内置函数

​ #每一次运行,都一定会加载内置空间和全局空间

​ 加载顺序:内置空间 > 全局空间 > 局部空间

​ 取值顺序:局部空间 > 全局空间 > 内置空间

作用域:

​ 全局作用域:内置空间 + 全局空间

​ 局部作用域:局部空间

10.函数的嵌套

1.简单嵌套
def func():
print(1)
def f1():
print(2)
return f1()#f1没有返回值,默认返回None
func()#结果: 1 \n 2 #不管在什么位置,只要是函数名+(),就是调用此函数
def func():
a = 1
def foo():
b = 2
print(b)
print(a)
def f1():
print(b)
return f1()
return foo #返回的是foo的内存地址,没有(),表示没有调用foo函数
print(func())#结果:<function func.<locals>.foo at 0x000002C49CBADD90> #**调用foo.
def func():
def foo():
a = 1
print(a)
return doo
#a = func(),得到foo的内存,然后a()调用foo
a = func()
a()
2.函数的互相引用:
def func():
a = 1
foo()
print(a)
def foo():
b = 2
print(b)
func()#结果: 2 \n 1
foo()#结果:2

同级函数:同级局部空间的数据不共享

def a():
a = 1
c()
print(c)
def b():
b = 2
print(b)
def c():
c = 3
print(a)
def run():
a()
run()#结果
#<function a at 0x0000015464512F28>
#<function c at 0x00000154661DDC80>
#同级局部空间的数据不共享,输出的是函数名对应的内存地址
3.函数嵌套的参数传递:
def func(a):
foo(a)
def foo(e):
b(e)
def b(c):
print(c)
func(15)#结果:15 def func(a):
foo(a)
def foo(e):
b(e)
def b(c):
print(c)
return 10
print(func(15))#结果:15 \n None #每一个函数都需要返回上一层结果才能返回最深层结果
def func(a):
return(foo(a))
def foo(e):
return(b(e))
def b(c):
print(c)
return 10
print(func(15))#结果:15 \n 10

11.global,nonlocal

1.global:

​ 声明全局变量,可以修改全局变量

a = 10
def func():
#a += 1#局部不可修改全局数据
global a#声明全局变量,可以修改
a +=1
print(a)
func()
print(a)
2.nonlocal:

​ nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量

​ 在外层的函数中,修改局部空间内的变量值,完全不涉及全局空间的变量,只修改此函数最近的上层的变量,上一层没有,继续向上寻找,直到最外层函数,如果最外层也没有,就报错。

a = 10
def func():
def f1():
a = 12
def fool():
nonlocal a
a += 1
print(a) #13
print(a)# 12
fool()
print(a)#13
print(a)# 10
f1()
print(a)#10
func()
print(a) #10

python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal的更多相关文章

  1. Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

    Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...

  2. python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal

    一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...

  3. day11函数的进阶动态参数,命名空间,作用域,第一类对象

    一.习题收藏 5.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数,并返回结果. # def func4(s): # dic = { # 'num':0,'alpha':0, ...

  4. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  5. python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

    今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...

  6. python基础知识(二)

    python基础知识(二) 字符串格式化 ​ 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 ​ print(' %s is boy'%('tom')) ----> ...

  7. CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】

    函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...

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

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

  9. python学习笔记12(函数三): 参数类型、递归、lambda函数

    一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参 ...

随机推荐

  1. CentOS 7 配置163源

    具体的操作步骤: 1.打开终端,输入su指令切换到root用户:su 2.切换到系统yum源的目录下,即:cd /etc/yum.repos.d 3.备份系统默认yum源(也可直接删除):mv Cen ...

  2. IT回忆录-2

    随着网络的发展,下载工具也不断地更新. 印象比较深的下载工具,从网络蚂蚁.网际快车,到BT. BT出来的时候,对下载真的是一个革命啊,以前下载东西,下载的人越多肯定就越慢,我们之前还会跑到一些FTP上 ...

  3. virtualbox 安装 extension pack 方法以及出现 "The installer failed with exit code 1: VBoxExtPackHelperApp.exe: error: Failed to rename the temporary directory to the final one"的解决办法

    virtualbox 的版本:5.1.26    下载地址:https://www.virtualbox.org/wiki/Downloads extension pack 的版本:5.1.26   ...

  4. c# 查询本机可用的代理ip

    现在有很多网站都提供免费的代理ip,但是你会发现很多网站显示的可以用的 ,在自己电脑上是用不了,写个小代码提取出自己电脑上可以用的代理,没什么技术含量,只是为了记录一下 string strUrl = ...

  5. UISearchController 的大坑

         UISearchBar+UISearchDisplayController这个组合的稳定性经过几次iOS版本迭代肯定不言而喻,但苹果爸爸就是任性的在iOS8.0中宣布弃用UISearchDi ...

  6. PHP/JS中获取当前页面的完整URL

    javascript实现: top.location.href 顶级窗口的地址this.location.href 当前窗口的地址 php实现 PHP实现 #测试网址: http://localhos ...

  7. 通过OSG实现对模型的日照模拟

    目录 1. 加载模型 2. 光照 1) 环境反射 2) 漫反射 3) 日照方向 (1) 太阳高度角和太阳方位角 (2) 计算过程 4) 改进实现 3. 阴影 4. 太阳高度角与太阳方位角的计算 1) ...

  8. 从零开始的Wordpress个人博客搭建

    0x00前言 在博客园写了有一年的博客了,也想换换新口味,wordpress的众多的主题和个性化设置非常符合我的喜好,所以捣鼓了一天也算是把它搭好了. 直接在服务器上搭建wordpress还需要配置m ...

  9. YARN分析系列之一 -- 总览YARN组件

    下图简单明了的描述了hadoop yarn 的功能是如何从 hadoop 中细化出来的. 注:图片来自 https://apprize.info/php/hadoop/9.html Hadoop 从 ...

  10. 前端自动化工具gulp入门基础

    gulp是前端开发过程中经常要用到的工具,非常值得花时间去掌握.利用gulp,我们可以使产品流程脚本化,节约大量的时间,有条不紊地进行业务开发.本文简单讲一下入门gulp需要掌握的东西. 安装gulp ...