动态传参 (重点) * **
形参
* 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()
- 初涉JavaScript模式 (10) : 函数 【进阶用法】
写在前面 不知不觉写到第10篇了.这篇写起来很忐忑,终于和高级搭上边了(呵呵),这篇我们 主要 说一下 JS 方法的部分高级用法(我知道的),笔者水平有限,难免有错.废话不多少,进入正文. 初始化 我 ...
- 小学生都能学会的python(函数的进阶)
小学生都能学会的python(函数的进阶) 1. 动态传参 形参: 1. 位置参数 2. 默认值参数 3. 动态传参 *args 动态接收位置参数 **kwargs 动态接收关键字参数 def fun ...
- python 基础篇 10 函数进阶
本节主要内容:1. 函数参数--动态传参2. 名称空间, 局部名称空间, 全局名称空间, 作⽤域, 加载顺序.3. 函数的嵌套4. gloabal, nonlocal关键字 ⼀. 函数参数--动态传参 ...
- python基础(9)-迭代器&生成器函数&生成器进阶&推导式
迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...
- day 10函数二
今日内容 '''实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合*****形参:定义函数,在括号内声明的变量名,用来接受外界传来的值''''''注:形参随着函数的调用 ...
- day 10 函数命名空间、函数嵌套和作用域
1. day 09 内容复习 # 函数 # 可读性强 复用性强 # def 函数名(): # 函数体 #return 返回值 # 所有的函数 只定义不调用就一定不执行 #先定义后调用 #函数名() # ...
- python note 10 函数变量
1.命名空间 #内置命名空间 —— python解释器 # 就是python解释器一启动就可以使用的名字存储在内置命名空间中 # 内置的名字在启动解释器的时候被加载进内存里#全局命名空间 —— 我们写 ...
- Python开发——10.面向对象编程进阶
一.isinstance(obj,cls)和issubclass(sub,super) 1.isinstance(obj,cls) 判断obj是不是由cls产生的类 2.issubclass(sub, ...
- Day 10 函数的形参,实参
今日内容 '''实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合*****形参:定义函数,在括号内声明的变量名,用来接受外界传来的值''''''注:形参随着函数的调用 ...
随机推荐
- Linq中使用Left Join 和 Right Join
原文地址:http://www.cnblogs.com/xinjian/archive/2010/11/17/1879959.html 准备一些测试数据,如下: use Test Create tab ...
- 【转】winrar命令行详解
从命令行也可以运行 WinRAR 命令,常规的命令行语法描述如下: WinRAR <命令> -<开关1> -<开关N> <压缩文件> <文件.. ...
- 你所不知道的C和C++运行库 标签: vc 2017-05-26 10:33 41人阅读 评论(0) 收藏
在使用vs2013调用vc2005编译出的dll时出现错误,遂将源程序用vs2013编译出dll,再用vs2013调用错误消失,不解.寻找原因时有人说"VC库版本不一样",故查找C ...
- python 字符编码、格式化
数据类型-布尔值一个布尔值只有True.False两种值,要么是True,要么是False 布尔值可以用and.or和not运算 空值是Python里一个特殊的值,用None表示 Python对b ...
- Zabbix监控mysql主从状态并实现报警
一.环境需求 主机A: zabbix-server 主机B: zabbix-agent/mysql从 二.主机B操作 1.添加监控脚本 vim /data/zabbix/mysql_slave_che ...
- C++使用BOOST操作文件、目录
开始使用 在BOOST库出现之前,C++对于文件和目录的操作,大都借助于UNIX提供的底层文件和目录接口,从使用角度来看,这些底层的操作不够友好.BOOST中filesystem库是一种可移植的文件系 ...
- 自开发Web应用和SAP Customer Data Cloud Identity服务的集成
今天的文章继续由SAP成都研究院的云时代女王,Aviva给大家分享关于SAP Customer Data Cloud的一些使用经验. Aviva之前的文章可以在本文末尾处获得. 下面是她的正文. 大家 ...
- 规约模式的ef拼接
public class LamadaExtention<Dto> where Dto : new() { private List<Expression> m_lstExpr ...
- Excel 移动列操作
- C/C++心得-理解指针
上一篇笔者用自己那不是怎么好理解的逻辑介绍了内存和C中的基本数据类型,现在笔者再根据自己重新所学来说说C语言中的指针. 理解指针才能真正的算C语言入门.也许是我大学期间太关注前端UE,也许是当初开始学 ...