zoukankan      html  css  js  c++  java
  • day10 函数进阶

    今天主要的学习内容

    1. 函数参数--动态传参
    2. 名称空间, 局部名称空间, 全局名称空间, 作?域, 加载顺序.
    3. 函数的嵌套
    4. gloabal, nonlocal关键字

    一 .动态传参  *   **

    动态传参分为两种:

    1  .动态接受位置参数

    我自己的理解是将你输入的输入全部赋值给你的变量参数  如:

      def func(*content):
    
        pass
    
      func(1,2,3,4,5,6,7)

    就是上面的将1-7全部给content,最后输入的全部放到一个tuple中

    注意: 动态接收参数的时候要注意 : 动态参数必须在位置参数后面

    def chi(*food, a, b):
      print("我要吃", food, a, b)
    chi("大米饭", "小米饭", "黄瓜", "茄子")     # 前两个参数用位置参数来接收, 后面的参数用
    
    动态参数接收
    

      

    上面的代码是错误的, 因为*food 已经接收了所有的数据,a,b永远接收不到信息,系统报错

    由此我们得出总结:

    顺序 : 位置参数,动态参数* ,默认值参数

    2.动态接收关键字参数

    在python中我们使用**来接受动态关键字参数

    def func(**kwargs):
        print(kwargs)
    func(a=1,b=2,c=3)
    func(a=1,b=3)
    
    
    结果 :
    {'a': 1, 'b': 2, 'c': 3}
    {'a': 1, 'b': 2}
    

      这个时候接收的是一个字典dict

    最终我们得到的顺序是:

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

    这四种参数可以任意的进行使用

    这里如果想要接收所有的参数 ,有一种无敌传参(自己给的名字):

      def func (*args ,**kwargs):

        print(*args,**kwargs)

    func()这里用户输入的所有参数都可以拿到并输出

    当* ,**在形参的位置 相当于把输入的东西聚合 ,聚合成元组 ,字典

    当* ,**在实参位置的时候,把用户输入的东西按照顺序打散

    命名空间

    全局命名空间 --->我们直接在py 文件中,函数外声明的变量都属于全局命名空间

    局部命名空间 --->在函数声明的变量中会放在局部命名空间

    内置命名空间 --->存放在python解释器中为我们提供的名字 ,list ,tuple ,dict ,int ,str 这些都是内置命名空间

    加载顺序:  内置命名空间-->全局命名空间 -->局部命名空间

    取值顺序:  局部命名空间 -->全局命名空间-->内置命名空间

    a=10
    def func():
        a=20
        print(a)
    
    func()  #结果为20
    

      作用域:作用域就是作用范围 ,按照生效范围来看分为 全局作用域 和局部作用域

    全局作用域: 包含了全局命名空间和内置命名空间,在整个文件的任何位置都可以使用(遵循从上到下逐个进行)

    局部作用域: 在函数内部可以使用

     作用域命名空间:

    1. 全局作用域: 全局命名空间+ 内置命名空间   locals() 查看全局作用域内容

    2. 局部作用域: 局部命名空间   globals() 查看当前作用域内容 

     函数的嵌套 

    1. 只要遇到了()就是函数的调用 ,如果没有()就不是函数的调用

    2, 函数的执行顺序

    def fun1():
         print(111)
     def fun2():
         print(222)
     fun1()
     
    fun2()
    print(111)
    # 函数的嵌套
    def fun2():
         print(222)
         def fun3():
             print(666)
         print(444)
         fun3()
         print(888)
    
    print(33)
    fun2()
    print(555)    
    

      关键字global 和nonlocal

    我们写一个代码,首先在全局声明一个变量 ,然后在局部调用这个变量,并改变这个变量的值

    a=100
    def func():
        global a  #这里的global 是把外面的a 引入进来 (用的是外面的a),但是要注意,这里将a修改后,外面的a也相应的发生了改变
        a=28
        print(a)
    
    func()
    print(a)
    

      即 :global表示的不在用局部的内容,改用全局作用域的变量

    nonlocal是调用上一级的内容 ,如果找不到,继续往上找,直到找到全局,但是找不到全局

    a=10
    def func():
        a=20
        def pp():
            nonlcal a  #这里的nonlcal就是调用了上一层的a=20 ,而不是a=10
            print(a)
         pp()      
    
    func()  
    

     nonlcal和global都是引入外面的内容 ,也同样是修改了外面的内容  

  • 相关阅读:
    linux中的 tar命令的 -C 参数,以及其它一些参数
    dockerfile 介绍
    linux安装mysql后root无法登录
    centos搭建本地yum源,
    centos7下载自定义仓库的镜像设置方法
    QT TCP文件上传服务器
    QT UDP聊天小程序
    QT 网络编程三(TCP版)
    QT 网络编程二(UDP版本)
    QT 网络编程一
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/10085483.html
Copyright © 2011-2022 走看看