day 10 函数的进阶
时间:2018-12-10
本文章向大家介绍day 10 函数的进阶,主要包括day 10 函数的进阶相关应用实例、知识点总结和注意事项,具有一定的参考价值,需要的朋友可以参考一下。
动态传参 (重点) * **
形参
* args在形参位置, *表示不定参数--接受的是位置参数
接受到的位置参数的动态传参: 都是元组
形参的顺序:
位置 *args 默认值 **kwargs 以后写参数,可以随意的进行搭配
def chi(zhushi, cai, fushi, tang, tiandian):
print(zhushi,cai,fushi,tang,tiandian)
chi("大碗大米饭", "火爆大头菜", "把子肉", "西红柿鸡蛋汤", "烤地瓜")
chi("小碗大米饭", "火爆大头菜") # 参数不够
形参的顺序(重点):
位置 *args 默认值 **kwargs
以后写参数. 可以随意的进行搭配, 但是, 顺序不能串
**kwargs在形参表示动态传参--关键字参数,关键字动态传参接收到的是字典
**在形参表示动态传参-关键字参数
关键字动态传参接收到的是字典
def func(**kwargs): # 也是聚合. ** 聚合成字典
print(kwargs)
# func(1,2,3,4,5,6,7) # 位置参数. 报错
func(a=1, b=2, c=3, haha="呵呵", good="not bad")
实参
*在实参的是打散,把列表,元组,字符串打散成位置参数进行传递
** 在形参表示动态传参--关键字参数;打散,打散成关键字
关于*和**
形参: 聚合
位置参数* ->元组
关键字** -> 字典
实参: 打散
列表,字符串,元素 -> *
字典 ->**
无敌传参
def func(*args, **kwargs): arguments参数 keyword-arguments关键字参数
pass
作用域(重要)和名称空间
名称空间:用来存放名字(变量,函数名,类名,引入的模块)的
1.全局名称空间:我们在py文件中自己写的变量, 函数.....
2.内置名称空间; 我们python解释器提供好的一些内置内容 (print,input..........)
3.局部名称空间: 在我们执行函数的时候,会产生一个局部名称空间.放的是:函数内部的内容
名称空间可能会有无数个,对于局部名称空间.相对是独立的,一般互不干扰
作用域:
1.全局作用域: 内置+全局
2.局部作用域: 局部
从全局找局部-> 找不到
从局部找全局-> 可以找到
怎么查看全局或局部中的内容:
globals 全局作用域: 内置+全局名称空间
locals 查看当前作用域的内容
def chi():
a = 20
b = 30
print(locals()) # 查看当前作用域中的内容
print(globals()) # alex,老男孩儿, 武sir, 全局作用域中的内容
chi()
print(locals()) # 全局
print(globals()) # 全局
函数的嵌套
nonlocal和global 关键字(重点)
global 表示从全局把一个变量引入局部,后面使用的都是全局变量
nonlocal 在局部,寻找离他最近的外层的一个变量
如果没有global和nonlocal ,查找的顺序:自己,上一层,上一层,上一层
函数的互相调用
def func1():
print("我是神器的func1")
def func2():
func1()
print("我是神器的func2")
def func3():
print("我是神器的func3")
# func5()
def func4():
func3()
print("我是神器的func4")
def func5():
func2()
func3()
print("我是神器的func5")
def func6():
func5()
print("我是神器的func6")
func3()
func1()
func6()
def outer():
def inner():
print("我的天哪")
print("还可以这样写???")
inner()
outer()
inner() # 在全局不能找到局部的内容
def func1():
print("1")
def func2():
print("2")
def func3():
print("3")
print("4")
func3()
print(5)
print("6")
func2()
print("7")
func1()
全局变量一般是不能随意的修改的
a = 10
def func():
# 慎用.
global a # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量
print("里面的打印",a)
func()
print("外面的打印", a)
a = 10
def func():
def inner():
# 慎用.
global a # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量
print("里面的打印",a)
inner()
func()
print("外面的打印", a)
nonlocal 在局部, 寻找离他最近的外层的一个变量
a = 50
def func1():
# a = 10 # 局部
def func2():
nonlocal a # 不找全局, global找全局
a += 10 # a = a + 10 python不让这么干
print("func2", a)
func2()
print(a)
func1()
print(a)
如果没有nonlocal和global 查找的顺序: 自己, 上一层, 上一层, 上一层
def func0():
a = 50
def func1():
a = 10 # 局部
def func2():
nonlocal a # 不找全局, global找全局
a += 10 # a = a + 10 python不让这么干
print("func2", a)
func2()
print(a)
func1()
print(a)
func0()
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)
flag = False
def login():
global flag
uname = input("用户名:")
upwd = input("密码:")
if uname == "alex" and upwd == "123":
flag = True
else:
flag = False
def fatie():
if flag == True:
print("可以发帖")
else:
print("滚去登录")
login()
fatie()
fatie()
fatie()
fatie()
- nginx支持跨域访问
- nginx静态资源文件无法访问,403 forbidden错误
- vue.js如何在标签属性中插入变量参数
- SpringBoot解决ajax跨域问题
- WebBrowser(IE) 与 JS 相互调用
- HOSTS配置问题导致集群异常故障分析
- Linux Regulator Framework(2)_regulator driver
- systemd的作用
- alsa声卡分析alsa-utils调用过程(二)-tinymixer
- alsa声卡分析alsa-utils调用过程(一)-tinyplay
- ALSA声卡驱动的DAPM(二)-建立过程
- ALSA声卡驱动的DAPM(一)-DPAM详解
- 高通Audio中ASOC的codec驱动(二)
- vue项目里的日期格式化
- 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 数组属性和方法
- 包子旧闻&Leetcode solution 1344. Angle Between Hands of a Clock
- Ubuntu下DNS服务搭建
- 深入理解JavaScript函数式编程
- JavaScript 异步编程
- 日志清理脚本-V0.0.3(增加多目录清理、正则表达式匹配、调试模式;部分细节优化)
- Fastdfs高可用集群搭建
- Logstash:处理多个 input
- 一文学会哈希法解题
- 一小时彻底掌握stm32中断。
- Python 爬虫进阶必备 | 关于某虚拟币网站加密签名的分析(难度0.1)
- PHP中的数据库连接持久化
- ClickHouse王炸功能即将来袭?
- 搭建Amoeba实现MySQL主从数据库读写分离
- 如何在centos7上看墙外的世界
- 远程仓库的使用