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 函数名([参数]): 函数文档字符串 函数体 ...
随机推荐
- 《Java并发编程的艺术》第6/7/8章 Java并发容器与框架/13个原子操作/并发工具类
第6章 Java并发容器和框架 6.1 ConcurrentHashMap(线程安全的HashMap.锁分段技术) 6.1.1 为什么要使用ConcurrentHashMap 在并发编程中使用Has ...
- 【服务器】VMware Workstation Pro虚拟机搭建本地服务器CentOs7和宝塔面板(保姆式教程)
内容繁多,请耐心跟着流程走,在过程中遇到问题请在下面留言. 前言 这几天一直在复习thinkphp5.1,学习环境是phpStudy8.1,但是遇到了文件有缓存的问题(thinkphp5.1.39,修 ...
- 三角函数与缓入缓出动画及C#实现(图文讲解)
日常经常能看到缓入缓出的动画效果,如: 1,带缓入缓出效果的滚动条: 2,带缓入缓出效果的呼吸灯: 像上面这种效果,就是用到了三角函数相关的知识,下面将从头开始一步步去讲解如何实现这种效果. 一.基础 ...
- java中值传递
最近学基础的时候,老师讲了值传递和引用传递,这个问题一直不太明白,上网查了很多资料,按照自己的理解整理了一遍,发现之前不太明白的地方基本上想明白了,如有不正确的地方,欢迎指正,谢谢. 首先要说明的是j ...
- Pytorch入门——手把手带你配置云服务器环境
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天这篇是Pytorch专题第一篇文章. 大家好,由于我最近自己在学习Pytorch框架的运用,并且也是为了响应许多读者的需求,推出了这个P ...
- Shell 脚本学习(1)
一 Shell概览 1. 自动化批量系统初始化程序(update, 软件安装,时区设置,安全策略,...) 2. 自动化批量软件部署程序(LAMP,LNMP,Tomcat,LVS,Nginx) 3. ...
- win10提示“无法设置移动热点 请打开WLAN”的解决方法
一位用户在使用Win10创意者操作系统过程中,遇到了无法开启移动热点的情况,开关呈灰色状态,而且提示:无法设置移动热点 请打开WLAN,该如何解决呢?该用户表示Wlan一直开着呀,感觉非常奇怪.接下来 ...
- API(List、Map)
day 07 API List接口 特点: 有序,带索引,内容可以重复 Arraylist: 创建对象一般使用多态的格式: List<E> li = new ArrayList<E& ...
- (私人收藏)React教程手册
React教程手册 https://pan.baidu.com/s/1ka2PJ54HgqJ8lC6XgbvdLg pedx React 教程 含有3个附件,如下: react.js react-do ...
- C++中string转换为char*类型返回后乱码问题
问题来源: 在写二叉树序列化与反序列化时发现序列化函数为char* Serialize1(TreeNode *root) 其函数返回类型为char*,但是我在实现的过程中为了更方便的操作添加字符串使 ...