博客11
时间:2019-09-20
本文章向大家介绍博客11,主要包括博客11使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
函数的进阶
1. 可变长参数
(1)可变长形参
*args
用来接收多余的位置实参,args是人们约定俗成的一种写法。他把接收到的值按元组的形式存储。
这里args不是形参名,因为当有关键字实参为 args = 1 时,若形参中没有 args这个形参,则调用函数时会报错
也就是说 args = (a,b,c,d) 这样的形式
当没有任何实参传来时,程序不会报错,args就是空元组: args = ()
**kwargs
用来接收多余的关键字实参,kwargs也是人们约定俗成的一种写法。他把接收到的值按字典的形式存储。
这里kwargs不是形参名,因为当有关键字实参为 kwargs = 1 时,若形参中没有 kwargs这个形参,则调用函数时会报错
也就是说 kwargs = {'a':1,'b':2,'c':3,'d':4} 这样的形式
当没有任何实参传来时,程序不会报错,kwargs就是空元字典: kwargs = {}
*args 和 **kwargs 一起使用就可以接收全部的实参
(2)可变长实参
*
用来把星号后的容器数据类型(列表,元组,集合)中的数据提取出来,依次传给位置形参
**
用来把星号后的字典中的键值对提取出来转化成关键字实参,依次传给和关键字对应的形参
2. 函数的对象
python中一切皆对象
对象能够完成这四件事情
能被引用
当作容器类数据类型的元素
当作函数的实参
当作函数的返回值
def register():
print('register')
def login():
print('login')
def withdraw():
print('wightdraw')
def shopping():
print('shopping')
func_dict = {
'1': register,
'2': login,
'3': withdraw,
'4': shopping,
}
print('''
1 注册
2 登录
3 提现
4 购物
''')
while True:
choice = input('请选择你需要的功能(输入q退出):')
if choice == 'q':
break
func_dict[choice]() #此时的 func_dict[chioce] 相当于上面的各个函数名,可以加个括号对上面的函数进行调用
3. 函数的嵌套
函数的嵌套就是函数里面有函数
函数内部定义的函数,外部不能直接调用
#定义函数,只检测语法,不会执行代码
def f1():
print('from f1')
def f2():
print('from f2')
f2() # 在同一位置时,调用函数必须放在定义之后
res = f1()
4. 名称空间和作用域
变量名/函数名/内置方法名 都存放在名称空间
1. 名称空间
- 名称空间的生成顺序:
- 内置名称空间:python解释器启动的时候就有了
- 全局名称空间:执行文件代码的时候才会有全局
- 局部名称空间:函数调用的时候才会有局部
python解释器搜索名称的顺序:
先从当前位置寻找,找不到再按照下面的这种顺序;搜索不会按下面的逆序搜索(只会在当前或者然继续搜索)
局部 ——》全局——》内置——》报错
(1)内置名称空间
- 存储了python解释器自带内置方法(print/len/list/str/dict 等)的名称
(2)全局名称空间
- 存储了除了内置和局部名称的其他名称
(3)局部名称空间
函数内部定义的都叫局部
局部名称空间存储了局部中的各名称
2. 作用域(发挥作用的区域)
(1)全局作用域
包含:内置名称空间 + 全局名称空间
(2)局部作用域
只包含:局部名称空间
3. 改变全局和局部的三种方法
1. 全局作用域的 x 和局部作用域的 x 没有半毛钱的关系 2. 局部作用域1的x和局部作用域2的x也没有任何关系,即使局部作用域1和局部作用域2再同一个局部作用域下
(1)可变数据类型无所不能
- 要用就用可变数据类型
- 但不能以定义的方式改变该数据类型
#所有可变数据类型均可打破上述一切规则
lt = [10]
def f1():
lt.append(12)
# lt = [0] 这种方法不行
lt[0] = 11
f1()
print(lt) # 打印结果: lt 为 [11,12]
(2)global
- global 将局部名称变成全局名称
x = 10
def f1():
global x # 让global以下的局部的x变成全局的x
x = 20
f1()
print(x) # 打印结果:x为20
(3)nonlocal
- nonlocal 将当前局部名称变成本层的顶层局部名称
x = 10
def f1():
def f2():
def f3():
nonlocal x # nonlocal让x成为顶层函数的局部,不是让他成为全局 # 压根没有应用情景,尽量不要嵌套函数
x = 1
x = 2
f3()
print(x) # 打印结果: x为1
原文地址:https://www.cnblogs.com/Mcoming/p/11558466.html
- 碎片化 | 第四阶段-45-session为空问题解决-视频
- 以后有机会写框架用得着的
- 合并两个不相关的Git仓库
- 用 Tensorflow 建立 CNN
- 碎片化 | 第四阶段-36-struts-spring结合jdbc实现删除功能-视频
- 跨域访问支持(Spring Boot、Nginx、浏览器)
- 自己动手写个聊天机器人吧
- 碎片化 | 第四阶段-37-sturts2-登录功能实现-视频
- Spring Cloud Edgware新特性之六:Artifact ID变更
- 用 RNN 训练语言模型生成文本
- 碎片化 | 第四阶段-38-Struts2登录session对象封装-视频
- LeetCode实战:子问题分析
- 5分钟构建一个自己的无人驾驶车
- 碎片化 | 第四阶段-39-Struts2中session对象梳理-视频
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos7中安装Android SDK的方法步骤
- centos配置ssh免密码登录后仍要输入密码的解决方法
- CentOS7.2安装Nginx的方法步骤
- CentOS安装Python2.7与Python2.6并存的方法
- 详解Centos下YUM安装PHP的两种方式
- linux下make命令实现输出高亮的方法
- Ubuntu彻底卸载MySQL、Apache2和Php的方法教程
- linux下如何创建守护进程的步骤
- ubuntu系统中/etc/rc.local和/etc/init.d/rc.local的区别详解
- centos6.8下hadoop3.1.1完全分布式安装指南(推荐)
- 批处理模式下运行 top 命令的方法
- 关于CentOs系统自带python和yum卸载后的解决办法
- Linux sftp命令用法总结
- CentOS 7中搭建NFS文件共享存储服务的完整步骤
- centos 7中添加一个新用户并授权的步骤详解