zoukankan      html  css  js  c++  java
  • python-day10

    一. 动态传参

      形参:

        1. 位置参数

        2. 默认值

        3. 动态传参

          1 *args: 动态接受位置参数

          2 **kwargs: 动态接收关键字参数

          顺序: 位置,*args, 默认值,**kwargs

          

          *,**:

            def func(*args,**kwargs): 无敌传参

              pass

            *,** 在形参位置: 聚合

              在实参位置: 打散

      实参:

        1. 位置参数

        2. 关键字参数

        3. 混合参数

      

     1 # def fun(a,b): #位置参数
     2 #     print(a,b)
     3 # fun(1,2)
     4 
     5 # def fun(a,b): #关键字参数
     6 #     print(a,b)
     7 # fun(b=2,a=2)
     8 
     9 # def fun(a,b,c):#混合参数
    10 #     print(a,b,c)
    11 # fun(1,c=3,b=2)
    12 
    13 # def chi(*args):
    14 #     print(args)
    15 # # chi(args = 123) X X X
    16 # chi()
    17 # chi('10','11','12','13')
    18 #
    19 # def func(*args):
    20 #     print(args)
    21 # func('111111111111111')
    22 
    23 # def func(**kwargs):
    24 #     print(kwargs)
    25 # func(a = 1,b = 2)
    26 
    27 # def func(**kwargs):
    28 #     print(kwargs)
    29 # func(abc= 123,hui = 6)
    30 
    31 
    32 # def func(*args,**kwargs):
    33 #     print(args,kwargs)
    34 # func('a','b',a = 1,b = 2)
    35 # -------------------------------------------------
    36 
    37 # 动态传参
    38 # *表示动态传参,可以接受所有的位置参数
    39 # 传参的时候自动的把实参打包成元组 交给形参
    40 
    41 # def chi(*args):
    42 #     print(args)
    43 # chi()
    44 # # chi(good_food = '胡辣汤') #关键字参数  #  一个星'*'不能穿关键字参数
    45 # chi(1,2,3,4,5,6,7,8,9,0)#接受所有的位置参数
    46 # ------------------------------------------------------------
    47 #  **  表示接收关键字的动态传参
    48 #接收到的内容放在字典里
    49 # def chi(**food):
    50 #     print(food)
    51 # chi(good_food = '哈哈',junk_food='呵呵',drink = '吼吼')
    52 # 顺序  位置>*args>默认值参数>**kwargs
    53 # --------------------------
    54 # lst = [1,2,3,4,5,6,7,8,9]
    55 # def chi(*food):
    56 #     print(food)
    57 # chi(*lst)#把一个列表或者元组或者字符串.打散成参数. 传递给形参
    58 
    59 
    60 # dic={'a':1,'b':2,'c':3}
    61 # def da(**kwargs):#动/态传参,接收关键字参数
    62     # print(kwargs)
    63 # da(张无忌= dic['a'])
    64 # da(**dic)#把字典打算成关键字参数
    65 
    66 #*,**:在参数:聚合,  实参:打散
    View Code

    二. 名称空间和作用域

      名称空间: 保存名字用的

        变量,函数,类

      1. 内置名称空间:python自己,print,input,len

      2. 全局名称空间: 你写的代码从上到下

      3. 全局名称空间: 函数,类,方法,其他模块,对象

      作用域

        全局作用域

          内置+全局

        局部作用域

          局部名称空间

        从局部找全局可以,但是从全局找局部是不可以的

        globals() 查看全局作用域中的名字

        locals() 查看当前作用域中的名字

      

     1 #在我们程序运行的时候, 首先 加载的并不是我们的代码
     2 # 先加载的是内置的一些东西
     3 
     4 #先加载print等其他
     5 # a = 10
     6 # def chi():
     7 #     a = 20
     8 #     print(a)
     9 # print(a)
    10 # chi()
    11 # print(a)
    12 
    13 # def chi():
    14     # p = 30
    15     # print(locals())#{'p': 30} locals()可以查看当前局部作用域中的内容
    16     # print(p)
    17 # chi()
    18 # print(locals())#查看当前作用域中的名字
    19 # print(globals())
    20 # a = 10 #全局/
    21 # b = 20
    22 # print(globals())#查看全局作用域中(内置+全局)的内容
    View Code

    三. 函数的嵌套(难点)

      每一层都会产生独自的名称空间

      

     1 # 一个套一个
     2 # def outer():
     3 #     print('我是outer')
     4 #     #在函数内部声明的函数,只能在函数内部访问
     5 #     def inner():
     6 #         print('我是inner')
     7 #     inner()
     8 #     print('我是outer_end')
     9 # outer()
    10 
    11 # def fun2():
    12 #     print(222)
    13 #     def fun3():
    14 #         print(666)
    15 #     print(444)
    16 #     fun3()
    17 #     print(888)
    18 # print(333)
    19 # fun2()
    20 # print(555)
    View Code

    四.nonlocal  global

      global: 在局部引入全局的内容,  可以生化一个变量为全局变量

      noblocal: 在局部, 引入上一层名称空间中的变量,如果没有,继续上一层.......上...上一层,没有报错

     

     1 # a = 10
     2 # def func():
     3 #     a = 20#并没有改变全局变量,创建了一个自己的变量
     4 #     #全局变量在局部,可以用,但是,不能改
     5 #     a = a+10
     6 #     print(a)
     7 # func()
     8 # print(a)
     9 
    10 # a = 10
    11 # def func():
    12 #     global a #从全局把变量引进来
    13 #     a = a+10
    14 #     print(a)
    15 # func()
    16 # print(a)
    17 
    18 # def func():
    19 #     global a #可以创建(升华)一个局部变量为全局变量
    20 #     a = 30
    21 # func()
    22 # print(a)
    23 
    24 #  nonlocal 在局部, 引入上一层名称空间中的名字. 如果上一层没有, 继续上一层 .....
    25 # def outer():
    26 #     a = 10
    27 #     def inner():
    28 #         nonlocal a
    29 #         a = 20
    30 #         print(a)
    31 #     print(a)  # 10
    32 #     inner()   # 20
    33 #     print(a)  # 20
    34 # outer()
    35 
    36 # ***
    37 a = 1
    38 def fun_1():
    39     a = 2
    40     def fun_2():
    41         nonlocal a
    42         a = 3
    43         def fun_3():
    44             a = 4
    45             print(a)
    46         print(a)
    47         fun_3()
    48         print(a)
    49     print(a)
    50     fun_2()
    51     print(a)
    52 print(a)
    53 fun_1()
    54 print(a)
    55 # 1234331
    View Code

    补充:

      一.形参的接收顺序   

        1 位置>*args>默认参数>**kwargs

      二.

      命名空间:我们的变量在储存的时候就是储存在这片空间中
      全局命名空间: 我们直接在py文件中,函数外声明的变量都属于全局命名空间
      局部命名空间: 在函数中声明的变量会放在局部命名空间
        内置命名空间: 存放python解释器为我们提供的名字,list,tuple,str,int这些都是内置命名空间
      三.
        全局作用域: 全局命名空间 + 内置命名空间
        局部作用域: 局部命名空间
      四.名称空间的加载顺序,取值顺序
        加载顺序:1内置命名空间  2全局命名空间  3局部命名空间(函数被执行的时候)
        取值顺序: 1局部命名空间 2全局命名空间  3内置命名空间
      五:
        global表示不再使用局部作用域的内容了,而改用全局作用域中的变量
        nonlocal表示在局部作用域中,调用父级命名空间中的变量
        
      
  • 相关阅读:
    使用BC库解密出现no such provider错误
    使用PyHive操作Hive
    使用Python实现Map Reduce程序
    Mysql问题
    安装Python2.7出现configure: error: no acceptable C compiler found in $PATH错误
    crontab入门
    Linux命令-dd
    Linux命令-cp
    Linux命令-mkdir
    RHEL7.2下netcat工具安装教程
  • 原文地址:https://www.cnblogs.com/Thui/p/9879051.html
Copyright © 2011-2022 走看看