动态传参 (重点)  *    **
形参
 * 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()
 

day 10 函数的进阶的更多相关文章

  1. 初涉JavaScript模式 (10) : 函数 【进阶用法】

    写在前面 不知不觉写到第10篇了.这篇写起来很忐忑,终于和高级搭上边了(呵呵),这篇我们 主要 说一下 JS 方法的部分高级用法(我知道的),笔者水平有限,难免有错.废话不多少,进入正文. 初始化 我 ...

  2. 小学生都能学会的python(函数的进阶)

    小学生都能学会的python(函数的进阶) 1. 动态传参 形参: 1. 位置参数 2. 默认值参数 3. 动态传参 *args 动态接收位置参数 **kwargs 动态接收关键字参数 def fun ...

  3. python 基础篇 10 函数进阶

    本节主要内容:1. 函数参数--动态传参2. 名称空间, 局部名称空间, 全局名称空间, 作⽤域, 加载顺序.3. 函数的嵌套4. gloabal, nonlocal关键字 ⼀. 函数参数--动态传参 ...

  4. python基础(9)-迭代器&生成器函数&生成器进阶&推导式

    迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...

  5. day 10函数二

    今日内容 '''实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合​*****形参:定义函数,在括号内声明的变量名,用来接受外界传来的值​'''​'''注:形参随着函数的调用 ...

  6. day 10 函数命名空间、函数嵌套和作用域

    1. day 09 内容复习 # 函数 # 可读性强 复用性强 # def 函数名(): # 函数体 #return 返回值 # 所有的函数 只定义不调用就一定不执行 #先定义后调用 #函数名() # ...

  7. python note 10 函数变量

    1.命名空间 #内置命名空间 —— python解释器 # 就是python解释器一启动就可以使用的名字存储在内置命名空间中 # 内置的名字在启动解释器的时候被加载进内存里#全局命名空间 —— 我们写 ...

  8. Python开发——10.面向对象编程进阶

    一.isinstance(obj,cls)和issubclass(sub,super) 1.isinstance(obj,cls) 判断obj是不是由cls产生的类 2.issubclass(sub, ...

  9. Day 10 函数的形参,实参

    今日内容 '''实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合​*****形参:定义函数,在括号内声明的变量名,用来接受外界传来的值​'''​'''注:形参随着函数的调用 ...

随机推荐

  1. Linux->apt-包的位置和变更

    ubuntu中由apt-get获得的文件包保存在/var/cache/apt/archives: 通过apt-get命令下载的软件包,放在/var/cache/apt/archives 目录下: 下载 ...

  2. 【Leetcode】【Medium】Unique Paths II

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  3. 用QT写一个对话框

    打开QT creater创建取名去findDialog的项目,这个项目要基于QDialog.直接上FindDialog.h的头文件. #ifndef FINDDIALOG_H #define FIND ...

  4. Hadoop学习---Hadoop的HBase的学习

    Hbase Hbase的特点: Hbase是bigtable的开源的仿制版本 建立在HDFS之上 可靠性,靠性能 大:一个表可以有上亿行,上百万列 面向列:面向列(族)的存储和权限控制,列(族)独立检 ...

  5. 远程计算机或设备将不接受连接,IE无法上网

    遇到一个奇葩问题,IE浏览器突然不能上网了,但是其他浏览器可以,QQ什么的也都正常,只有IE是出现:远程计算机或设备将不接受连接 这个问题,网上找了很多答案都没用,什么设置WINS,允许远程访问,取消 ...

  6. January 14 2017 Week 2nd Saturday

    Don't try so hard, the best things come when you least expect them to. 不要着急,最好的总会在最不经意时出现. The secon ...

  7. Timer类注意事项

    Java的一个Timer对象可以执行多个Timertask任务,但是一个Timer对象本身只有一个线程,如果向他提交多个task,并且某个task相当耗时的话,其他的task即使到了执行时间,仍然会等 ...

  8. 上海大智慧某站未授权访问&SQL注入

    详细说明: 注入:禁用JS,http://dzh.com.cn/admin/userlist.phphttp://dzh.com.cn/admin/editUser.php?username=test ...

  9. MySQL的存储函数(自定义函数)的定义和使用方法

    存储函数 什么是存储函数: 封装一段sql代码,完成一种特定的功能,返回结果. 存储函数的语法:  create function 函数([函数参数[,….]]) Returns 返回类型 Begin ...

  10. MATLAB入门学习(整合)

    整合一下,都是链接地址: MATLAB入门学习(一):初次使用.. MATLAB入门学习(二):矩阵相关 MATLAB入门学习(三):矩阵常用函数 MATLAB入门学习(四):编写简单.m文件和函数文 ...