Python3 函数基础2
可变长参数
可变长形参: *args
形参中的* 会将溢出的位置实参全部接收, 然后以元祖的形式存储, 并将元祖赋值给*后面的args
# 我们习惯把*后面的形参叫做args
def func(a, *args):
print(args)
func(1, 2, 3, 4) # (2, 3, 4)
可变长实参: *容器类
实参中的*会将其后面的容器类型的元素(列表, 集合, 元祖, 字典)依次取出, 变成位置实参
def func(a, b, c, d):
print(a, b, c, d)
tup = (2, 3)
func(1, *tup, 4) # 1 2 3 4
可变长形参: **kwargs
形参中的**会将溢出的关键字实参全部接收, 然后以字典的形式存储, 并赋值给后面的kwargs
# 我们习惯把**后面的形参叫做kwargs
def func(a, **kwargs):
print(kwargs)
func(1, b=2, c=3) # {'b': 2, 'c': 3}
可变长实参: **字典
实参中的**会将其后面的字典类型key:value取出, 转化为关键字实参(key=value)
def func(a, b, **kwargs):
print(**kwargs)
dic = {'c':3, 'd':4}
func(1, 2, **dic) # {'c': 3, 'd': 4}
函数对象
我们可以把函数看做一种数据类型, 函数名就是这个函数的函数对象
引用
def func():
print('from func')
print(func) # <function func at 0x00000000024C1E18>
f = func
f() # from func
当做容器类型元素
def func():
print('from func')
lis = [func, 1, 2, 3]
lis[0]() # from func
当做参数传给一个函数
def func1():
print('from func1')
def func2(x):
x()
func2(func1) # from func1
当做函数的返回值
def func():
print('from func1')
def func2(x):
return x
res = func2(func1)
res() # from func1
函数对象应用
# 简易购物系统
def register():
print('注册')
def login():
print('登录')
def shopping():
print('购物')
func_dict = {
'1': register,
'2': login,
'3': shopping
}
while True:
print('''
1 注册
2 登录
3 购物
''')
choice_inp = input('请选择你需要的功能(输入q退出): ')
if choice_inp == 'q':
break
func_dict[choice_inp]()
名称空间和作用域
名称空间
用来存储名称的空间(变量名/函数名等)
内置名称空间
存储了Python内置方法的名称
局部名称空间
存储了函数内部定义的名称
全局名称空间
除了内置和局部的名称都存储在全局名称空间
空间名称的生成顺序
- 内置名称空间: Python解释器启动时
- 全局名称空间: 执行文件代码时
- 局部名称空间: 函数调用的时
名称空间搜索顺序
比如我们现在要 print(x), Python解释器就会在各个名称空间搜索我们有没有定义过x
搜索顺序: 先从当前名称空间开始寻找, 找不到会按着局部-->全局-->内置-->报错顺序寻找
作用域
全局作用域
全局有效, 全局存活, 包含内置名称空间+全局名称空间
局部作用域
局部有效, 临时存储, 只包含局部名称空间
注意事项
- 全局作用域和局部作用域之间是相互独立的
def func():
x = 1
print(f'局部作用域x: {x}')
x = 2
func() # x = 1
print(f'全局作用域x: {x}')
'''
局部作用域x: 1
全局作用域x: 2
'''
- 局部作用域1和局部作用域2之间也是相互独立的
def func1():
x = 1
def func2():
x = 2
print(f'局部作用域2中x: {x}')
func2() # x = 2
print(f'局部作用域1中x: {x}')
func1()
'''
局部作用域2中x: 2
局部作用域1中x: 1
'''
补充
- global
x = 1
def func():
global x # global声明x为全局变量
x = 2
func()
print(x) # 2
- nonlocal
def func1():
x = 1
def func2():
nonlocal x # nonlocal声明x为顶层函数的局部作用域变量
x = 2
f2()
print(x)
func1() # 2
- 在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。
lis = []
def func():
lis.append(1)
print(f"调用函数前: {lis}")
func()
print(f"调用函数后: {lis}")
'''
调用函数前: []
调用函数后: [1]
'''
Python3 函数基础2的更多相关文章
- Python3 函数基础1
目录 定义函数 定义函数的三种形式 空函数 有参函数 无参函数 函数的调用 函数的返回值 函数的参数 形参 (parameter) 实参(argument) 位置形参与位置实参 默认形参 关键字实参 ...
- Python开发基础-Day5-字符编码、文件处理和函数基础(草稿)
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- python开发基础之字符编码、文件处理和函数基础
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- 10分钟学会Python函数基础知识
看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- JavaScript 函数基础
1. JavaScript 函数基础 1. 定义方法 2. 函数的调用方法 3. 函数方法 apply : 将函数作为数组的方法来调用 将参数以数组形式传递给该方法 call : 将函数作为对象的 ...
- Python 函数基础、有序集合、文件操作(三)
一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...
- 【2017-03-05】函数基础、函数四种结构、ref和out参数、递归
一.函数基础 1.函数/方法:非常抽象独立完成某项功能的一个个体 2.函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 3.分类 固定功能函数高度抽象函数 4.函数四要素:输入, ...
- PHP基础入门(三)---PHP函数基础
PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...
随机推荐
- Thinkphp5与QueryList,也可以实现采集(爬虫)页面功能
QueryList 是什么 QueryList是一套用于内容采集的PHP工具,它使用更加现代化的开发思想,语法简洁.优雅,可扩展性强.相比传统的使用晦涩的正则表达式来做采集,QueryList使用了更 ...
- PHP+Swoole并发编程的魅力
PHP语言是一个短生命周期的Web编程语言,很多PHPer已经形成了fpm下编程的思维定势.实际上在Swoole出现之后,这种串行化编程的模式早已被打破.使用Swoole完全可以轻易实现更灵活的并发编 ...
- Linux\CentOS 安装 vsftpd 服务器
安装 查看电脑是否存在 vsftpd 服务器 rmp -qa|grep vsftpd 如果有就删除,没有就使用yum 安装 vsftpd yum -y install vsftpd 配置 在根目录下创 ...
- usaco training <1.2 Greedy Gift Givers>
题面 Task 'gift1': Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided t ...
- 攻克数通,斩获云计算!誉天Double HCIE学员考证秘笈揭晓
不知不觉,已经过了四个月的时间了,我是六月多报名云计算的,本来是奔着邹Sir去的,但是当时邹sir已经上到HCIE的课程了,只能蹭学弟之前的录屏看.等到七月八号,又正式跟了曾曦老师上了一次完整的课程. ...
- 白话布隆过滤器BloomFilter
通过本文将了解到以下内容: 查找问题的一般思路 布隆过滤器的基本原理 布隆过滤器的典型应用 布隆过滤器的工程实现 场景说明: 本文阐述的场景均为普通单机服务器.并非分布式大数据平台,因为在大数据平台下 ...
- elementui 模态框 拖动
第一步引入import elDragDialog from "@/directive/el-dragDialog";第二步 在export default中声明directives ...
- Java设计模式之鸭子模式
这两天在看HeadFirst设计模式,第一种鸭子模式都不太理解.后来在百度知道上看了某大神的解释 明白了不少. 列出如下: 假设我们需要设计出各种各样的鸭子,一边游泳戏水, 一边呱呱叫.很明显这时我们 ...
- mysqldump工具实现mysql数据库的备份还原
简介 冷.温.热备份 冷备:读写操作均不可进行 温备:读操作可执行:但写操作不可执行 热备:读写操作均可执行 MyISAM:温备,不支持热备 InnoDB:都支持 不管是热备还原还是冷备还原,还原时都 ...
- 图解 Spring:HTTP 请求的处理流程与机制【3】
3. HTTP 请求在 Web 应用中的处理流程 在穿越了 Web 容器之后,HTTP 请求将被投送到 Web 应用,我们继续以 Tomcat 为例剖析后续流程.Web 容器与 Web 应用的衔接是通 ...