动态传参 (重点)  *    **
形参
 * 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. [翻译] Macros with a Variable Number of Arguments - GCC

    可变参数宏(Variadic Macro) 在1999年的ISO C标准中,可以声明一个像函数一样接受可变参数的宏.定义这种宏的语法与函数的定义相似.这是一个例子: #define debug(for ...

  2. c# BackGroundWorker 多线程操作的小例子 (转)

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...

  3. 科普文:从人人网看网络科学(Network Science)的X个经典问题

    转:https://zr9558.wordpress.com/2013/12/05/科普文:从人人网看网络科学(network-science)的x个经典问/ 长文,写了N个小时写完的.你肯定能看懂, ...

  4. WiFi安全测试工具WiFiPhisher

    官方下载地址:https://github.com/sophron/wifiphisher打不开的要翻GFW好事做到底wifiphisher-master.zip=================== ...

  5. 苹果手机(ios系统)蓝牙BLE的一些特点

    摘自<BluetoothDesignGuidelines.pdf>文档 1. pairing: 苹果手机无法主动发起SMP配对流程,可通过以下两种方式发起配对流程: (1)从端主动发起配对 ...

  6. Sonar安装和常见问题解决

    Sonar是一款代码质量分析工具,有助于帮助代码质量提高. Sonar的官网地址为:https://www.sonarqube.org/downloads/ 点击 Show All Versions ...

  7. HDU 2050(折线分割平面)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2050 折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    ...

  8. Many-to-many relationships in EF Core 2.0 – Part 1: The basics

    转载这个系列的文章,主要是因为EF Core 2.0在映射数据库的多对多关系时,并不像老的EntityFramework那样有原生的方法进行支持,希望微软在以后EF Core的版本中加入原生支持多对多 ...

  9. careercup-扩展性和存储限制10.6

    题目 你有10亿个url,每个url对应一个非常大的网页.你怎么检测重复的网页? 解答 网页大,数量多,要把它们载入内存是不现实的. 因此我们需要一个更简短的方式来表示这些网页.而hash表正是干这事 ...

  10. Selenium基本用法以及元素定位

    一.Selenium 简介 Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗口跳 ...