Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法
Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法
内容大纲
1.函数的动态参数
2.函数的注释
3.名称空间
4.函数的嵌套
5.global以及nolocal的用法
1.函数的动态参数
# def func(a,b=1):
# print(a,b)
#
# func(1)
def func(a,b,*args):
print(a,b,args) # * 聚合
print(a,b,*args) # * 打散
func(1,2,3,4,5,6,7,8,9,0)
*args 是万能(接受任意多个)的位置参数 在函数定义的时候叫做聚合
# def func(a,b,*args):
# *args 是万能(接受任意多个)的位置参数 *在函数定义的时候叫做聚合
#
# func(1,2,3,4,5,6,7,8,9,0)
位置参数 > 动态位置参数 > 默认参数
# def func(*args,a=1,b=2):
# print(a,b,args) # 元组(接受的位置参数)
# func(12,15,16,19,10)
# def func(a,b,**kwargs):
# print(a,b,kwargs) # 字典(接受的关键字的参数)
# func(1,2,c=1,d=2)
# def func(a,b,*args,c=1,d=2):
# print(a,b,*args,c,d)
# func(1,2,3,4)
def func(a,b,*args,c=1,d=2,**kwargs):
print(a,b,*args,c,d,kwargs)
*kwargs -- 获取到的字典的键
# func(1,2,3,4,c=8,d=10,e="alex",f="wusir")
def func(*agrs,**kwargs): # 万能传参
print(agrs,kwargs)
func(1,2,3,4,5,6,7,8,a=1,b=2,c=3)
参数的优先级: 位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数
1.万能传参: 动态位置参数,动态关键字参数 (最常用******)
2.位置参数,动态位置参数
3 动态位置参数,关键字参数,动态关键字参数
2.函数的注释
写好函数的定义后,换行,三个双引号回车自动弹出所需注释的内容
每次写函数需要写注释
函数名__doc__
# def func(a,b):
# """
# 逻辑判断...
# :param a: str
# :param b: int
# :return: bool
# """
# print(a,b)
# def func1(user,password):
# """
# 密码加密
# :param user: 用户名 str
# :param password: 密码 str
# :return: 加密的密码 MD5
# """
# print(user,password)
# print(func.__doc__)
print(func1.__doc__)
print(func.__name__)
3.名称空间
# print(11)
# a = 10
#
# def func():
# b = 20
# print(b)
内置空间 : Python解释器自带的,print input len
全局空间 : 当前py文件需要开辟的空间存放在全局空间
局部空间 : 函数中开辟的空间就是局部空间
加载顺序:
# 内置空间 > 全局空间 > 局部空间
取值顺序:
# 局部空间 > 全局空间 > 内置空间(找不到就报错了!)
作用域:
# 全局作用域: 内置空间 + 全局空间
# 局部作用域: 局部空间

4.函数的嵌套
# def func():
# print(1)
# def f1():
# print(2)
# return f1()
# func()
#结果:1 2
# def func():
# print(1)
# def f1():
# print(2)
# return func()
# func()
#结果:无限循环1
不管在什么位置,只要是函数名+() 就是在调用此函数
函数调用执行后,函数体中开辟的空间就自动销毁了
# def func():
# a = 1
# def foo():
# b = 2
# print(b) # 2
# print(a) # 1
# def f1():
# print(b) # 2
# return f1()
# return foo()
# print(func())
#2
#1
#2
#None
# 函数互相引用
# def func():
# a = 1
# foo()
# print(a)
#
# def foo():
# b = 2
# print(b)
# func()
#结果:
#2
#1
# def a():
# a1 = 1
# c()
# print(c)
# def b():
# b1 = 2
# print(b1)
# def c():
# c1 = 3
# print(a)
# def run():
# a()
# run()
#结果:返回是a,c的地址
#<function a at 0x000000141BA21E18>
#<function c at 0x000000141D93AA60>

# def func():
# a = 1
# def b():
# print(a)
#
# def foo():
# b = 1
# def z():
# print(func)
# print(b)
# ret = z()
# func()
# return ret
#
# def run():
# foo()
# print(run())
#结果:
#<function func at 0x00000012E4CE1E18>
#1
#None
切记返回值,不写的时候默认返回None
# def func(a):
# foo(a) #10
# def foo(e):
# b(e) # return 10
# def b(c):
# print(c)
# return 10
# print(func(5))
#结果:
#5
#None
由于中间没有return,所以在返回的途中断掉传送
5.global及nolocal的用法
# def func():
# global a
声明修改全局变量的值
只会改变全局变量的值
# a += 1
# print(a)
# func()
# print(a)
# a = 10
# def f1():
# a = 10
# def f2():
# a = 15
# def f3():
# global a
# a += 1
# print(a) # 11
# print(a) # 15
# f3()
# print(a) # 10
# f2()
# f1()
#结果:
#10
#15
#11

# a = 10
# def func():
# def f1():
# global a
# a += 1
# def foo():
# nonlocal a
# a += 1
# print(a) # 31
# foo()
# print(a) # 31
# f1()
# func()
# print(a) # 10
global : 修改全局空间的变量对应的值
nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数
nolocal例子:
a = 1
def fun_1():
a = 2
def fun_2():
nonlocal a
a = 3
def fun_3():
a = 4
print(a)
print(a)
fun_3()
print(a)
print(a)
fun_2()
print(a)
print(a)
fun_1()
print(a)
结果:
1
2
3
4
3
3
1
6.今日总结
# 1.函数的动态参数
# *args,**kwargs (能够接受动态的位置参数和动态的关键字参数)
# 定义阶段(*args,**kwargs) 聚合
# *args - tuple
# **kwargs -- dict
# 使用阶段*args,*kwargs 打散
# *args - 源数据类型
# *kwargs - 打散是字典的键
# 优先级: 位置 > 动态位置> 默认 > 动态关键字
# lst = [12,23,3,4,5,6]
# def func(*args):
# print(*args)
# func(lst[0],lst[1]) # 笨的办法
# func(*lst)
# dic = {"key":1,"key1":34}
# def func(**kwargs):
# print(kwargs)
# func(**dic)
# 2.函数的注释
"""
每次写函数的时候需要写注释
函数名.__doc__
"""
# 3.名称空间
# 内置空间: python解释器自带的
# 全局空间:当前文件(.py文件)
# 局部空间:函数体开辟的空间
# 加载顺序: 内置 > 全局> 局部
# 取值顺序: 局部 > 全局 > 内置
# 作用域:
# 全局作用域 内置 + 全局
# 局部作用域: 局部
# 4.函数嵌套
# 函数中套函数
# 函数嵌套调用
# 函数嵌套参数的传递
# 函数嵌套返回值的传递
# 5.global nonlocal
# global : 修改全局空间的变量对应的值
# nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
# 只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数
# 6.三元运算符
# a = 10
# b = 20
# c = a if a> b else b
# 变量名 = 条件成立的结果 条件 条件不成立的结果
Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法的更多相关文章
- 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结
03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...
- python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象
今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...
- 函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用
一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部 ...
- python基础知识-day8(动态参数)
1.动态参数 函数的形式参数个数不确定.函数的形式数据类型不确定,使用动态参数,*代表元组,**代表字典. 2.代码案例演示 1 def func(*args,**kwargs): 2 print(a ...
- CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】
函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...
- python 之 面向对象基础(定义类、创建对象,名称空间)
第七章面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问 ...
- 百万年薪python之路 -- 函数的动态参数
1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...
- 函数动态参数和Python中的三种空间
动态参数 : *args 实参角度: 定义一个函数时, * 将所有的位置参数聚合到一个元祖中 顺序 : 位置参数 > * args > 默认参数 > **kwargs 接受所有参数 ...
- 第5章函数进阶 第5.1节 Python函数的位置参数、关键字参数精讲
前面第二章简单介绍了函数定义的语法,经过后面一系列的学习,函数有必要再次介绍一下相关内容. 一. 关于函数的语法 1. 语法 def 函数名([参数]): 函数文档字符串 函数体 ...
随机推荐
- @atcoder - AGC034F@ RNG and XOR
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个值域在 [0, 2^N) 的随机数生成器,给定参数 A[ ...
- SpringCloud Alibaba (一):序言
为什么要转用SpringCloud Alibaba? Spring Cloud Netflix项目进入维护模式 在2018年底时,Netflix宣布Hystrix进入维护模式.自2016年以来,Rib ...
- python+selenium上传本地文件
迅雷号自媒体视频文件自动上传,贴标签发布 难点 本地文件上传,通过send_keys(‘文件路径’)的方式实现上传的目的 文件名通过正则匹配的方式进行处理,主要匹配出中文标题名称 处理过程中文件名称中 ...
- C语言中main函数的参数argc和argv
参考资料: http://wiki.opencv.org.cn/index.php/Main%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0argc%EF%BC%8Cargv% ...
- Programming Model
上级:https://www.cnblogs.com/hackerxiaoyon/p/12747387.html Dataflow Programming Model 数据流的开发模型 Levels ...
- 01[了解] Dubbo
什么是Dubbo? 概述 Dubbo是阿里巴巴内部使用的分布式业务框架,2012年由阿里巴巴开源. 由于Dubbo在阿里内部经过广泛的业务验证,在很短时间内,Dubbo就被许多互联网公司所采用,并产生 ...
- 在Ubuntu 16.04上编译OpenJDK8的源代码
本文将详细介绍在Ubuntu16.04上对OpenJDK8进行编译. 1.准备编译环境 使用的操作系统为Ubuntu16.04,如果读者没有安装Ubuntu,可以在Windows上使用虚拟机的方式进行 ...
- 解密TaurusDB存储端高并发之线程池
摘要:为了能加快相关任务的高效执行,TaurusDB采用多线程技术处理的方式,增加处理器单元的吞吐能力,从而提高存储端的执行效率. 1. TaurusDB背景 随着云计算进入2.0时代,数据急剧膨胀, ...
- pycharm远程连接vagrant虚拟机中mariadb数据库
1.虚拟机数据库设置--重启数据库 (1)vi /etc/my.cnf bind = 0.0.0.0 (2).远程不能用root用户连,得新建用户 select host,user from mysq ...
- linux下 解释 终端命令 ls -al或者ls -li 输出的信息
$ ls -al drwxr-xr-x. wjshan0808 wjshan0808 Sep : .cache $ ls -li ...