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 函数名([参数]): 函数文档字符串 函数体 ...
随机推荐
- Jmeter基础002----Jmeter简单使用
一.Jmeter概述 1.概述 JMeter是Apache公司使用JAVA开发的一款开源测试工具,它的功能强大.高效,可以模拟一些高并发或多次循环等测试场景,使用方便灵活. 2.使用 安装配置java ...
- [源码解析] GroupReduce,GroupCombine 和 Flink SQL group by
[源码解析] GroupReduce,GroupCombine和Flink SQL group by 目录 [源码解析] GroupReduce,GroupCombine和Flink SQL grou ...
- 『图论』LCA 最近公共祖先
概述篇 LCA (Least Common Ancestors) ,即最近公共祖先,是指这样的一个问题:在一棵有根树中,找出某两个节点 u 和 v 最近的公共祖先. LCA 可分为在线算法与离线算法 ...
- PowerBuilder中DW如何手动触发事件
调用setitem默认不会触发itemchanged事件 如果想实现可手动触发itemchanged事件 事件格式如下: dw_list.event itemchanged( /*long row*/ ...
- 【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件
Hello 大家好,我是TANZAME,我们又见面了.今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品. 随着业务增长,线上环境的QPS暴增,自然而然将当前的单 ...
- 乌班图设置C++11
zsh: echo "alias g++='g++ -std=c++11'" >> ~/.zshrc source ~/.zshrc bash: echo " ...
- Mac OS 生成 icon 和 ico 文件
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 1. 生成 IC ...
- Java 将PDF/XPS转为Word/html /SVG/PS/PCL/PNG、PDF和XPS互转(基于Spire.Cloud.SDK for Java)
Spire.Cloud.SDK for Java提供了接口PdfConvertApi通过convert()方法将PDF文档以及XPS文档转为指定文档格式,如转PDF为Word(支持Docx.Doc). ...
- Flask项目实战:创建电影网站(3)后台的增删改查
添加预告 根据需求数据库创建表格 需求数据库,关键字title logo # 上映预告 class Preview(db.Model): __tablename__ = "preview&q ...
- 【反转开灯问题】Face The Right Way
题目 Farmer John has arranged his N (1 ≤ N ≤ 5,000) cows in a row and many of them are facing forward, ...