zoukankan      html  css  js  c++  java
  • Python 函数 II (万能参数等)

    1.今日内容

    1. 形参角度:

      • 万能参数
      • *的魔法用法
      • 仅限关键字参数
      • 形参的最终顺序
    2. 名称空间

      • 全局名称空间,局部,内置

      • 加载顺序,取值顺序

      • 作用域

    3. 函数的嵌套

    4. 内置函数 globals,locals

    5. 关键字:nonlocal,global

    2.昨日回顾

    1. 函数是以功能为导向,减少重复代码,体改代码的可读性

      def func():
        函数体
      
    2. 函数的调用:func()

      func()
      func()
      
    3. 函数的返回值

      • 终止函数
      • return 单个值
      • return多个值:返回一个元组(1,2,3)
    4. 函数的参数

      • 实参角度:位置参数,关键字参数,混合参数(位置参数一定要在关键字参数前面)
      • 形参角度:位置参数,默认参数(常用的参数设置)

    3.具体内容

    1. 万能参数

    2. *魔法用法

      • 动态传参:*args
      def func(*args): #从实参角度:定义一个函数时,*所有的位置参数聚合到一个元组中,赋值给了args
        print(f'你都看过什么书:{args}')
      func('为什么学生不喜欢上学','稀缺','穷爸爸,富爸爸','腾讯传')
      #你都看过什么书:('为什么学生不喜欢上学', '稀缺', '穷爸爸,富爸爸', '腾讯传')
      
      • **kwagrs
      #函数定义时:**将所有的关键字参数聚合到哟个字典中,将这个字典赋值给了kwargs
      def func(**kwargs):
        print(kwargs)
      func(name = '太白',age = 18,sex = '男')
      #{'name': '太白', 'age': 18, 'sex': '男'}
      
      • *和**在函数的调用时,代表打散
      def func(*args,**kwargs):
        print(args)
        print(kwargs)
      func(*[1,2,3],*[4,5,6])#(1, 2, 3, 4, 5, 6){}
      func((1,2,3,4,5,6))
      func(**{'name':'alex','age':18,'sex':'男'})
      func(name='alex',age=18,sex ='男')
      #() {'name': 'alex', 'age': 18, 'sex': '男'}
      
    3. 形参顺序

      #*args 的位置
      def func(位置参数,*args,关键字参数):
        函数体
      def func(a,b,*args,sex = '女'):
        print(a) #1
        print(b) #2
        print(args) #(3,4,5,5)
        print(sex) #男
      func(1,2,3,4,5,5,sex = '男')
        
      #**kwargs 的位置
      def func(位置参数,*args,关键字参数,**kwargs):
        函数体
      def func(a,b,*args,sex = '女',**kwargs):
        print(a) #1
        print(b) #2
        print(args) #(3,4,5,5)
        print(sex) #男
        print(kwargs) #{'name':'alex','age':18}
      func(1,2,3,4,5,5,sex = '男',name = 'alex',age = 18)
      
      #形参角度第四种参数:仅限关键字参数
      def func(位置参数,*args,关键字参数,c,**kwargs):
        函数体
      def func(a,b,*args,sex = '女',c,**kwargs):
        print(a) #1
        print(b) #2
        print(args) #(3,4,5,5)
        print(sex) #男
        print(kwargs) #{'name':'alex','age':18}
        print(c) #关键字
      func(1,2,3,4,5,5,sex = '男',c ='关键字',name = 'alex',age = 18)
      '''
      形参角度最终的顺序:
      位置参数,*args,默认参数,仅限关键字参数,**kwargs
      '''
      
    4. 名称空间

      • 全局名称空间
        • py文件运行时开辟的,存放的是执行py文件(除去函数内部)的所有变量与值(地址)的对应关系,整个py文件结束后,才会消失
      • 临时(局部)名称空间
        • 函数执行时,在内存中临时开辟的一个空间,存放的函数中的变量与值的对应关系,随函数的结束而消失
      • 内置名称空间
        • python源码提供的一些内置函数
    5. 取值顺序、加载顺序

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

      • 取值顺序:(就近原则)

    6. 作用域

      • 全局作用域:全局名称空间,内置名称空间
      • 局部作用域:局部名称空间
      #局部作用域可以引用全局作用域的变量
      date = '周五'
      def func():
        a = 222
        print(date)
      print(a)#报错
      func()#周五
      print(a)#报错
      
      #局部作用域不能改变全局变量
      count = 1
      def func():
        count += 2#报错
        print(count)#报错
      func()
      
      #关键字:global
      #1. 可以在局部作用域声明一个全局变量。
      #2.对全局变量进行赋值
      name = 'zhang'
      def func():
        name = 'liu'
        def inner():
          globar name
          name = 'ma'
      	inner()
        print(name)
      func()#liu
      print(name)#ma
      
      #关键字:nonlocal
      #1.不能操作全局变量。
      #2.可以对父级作用域的变量进行修改,并且在当前作用域创建(复制)一份此变量。
      name = '张'
      def func():
        name = '刘'
        def inner():
          nonlocal name#找到上一级的name
          name ='码云'
        inner()
        print(name)
      func()#码云
      print(name)#张
      
    7. 内置函数:globals,locals

      a = 1
      b = 2
      def func():
        name = 'jk'
        age = 99
        print(globals())#返回字典:字典里面的键值对:全局作用域的所有内容
        print(locals) #返回字典:字典里面的键值对:当前作用域的所有内容
      
      

    4.今日总结

    1. 参数:万能参数*args,**kwargs
    2. 参数顺序,*的魔法用法:聚合,打散
    3. 名称空间,作用域,取值顺序,加载顺序
    4. 关键字:nonlocal,global
    5. 内置函数:globals,locals
  • 相关阅读:
    NOIP201* 游记
    [Luogu3378] 【模板】堆 题解
    [BZOJ5105]【[Code+#1]晨跑】 题解
    牛客多校第九场 E All men are brothers 并查集/组合论
    牛客多校第九场 D Knapsack Cryptosystem 背包
    牛客多校第九场 B Quadratic equation 模平方根
    hdu多校第八场 1011 (hdu6667) Roundgod and Milk Tea 二分图匹配
    hdu多校第八场 1010(hdu6666) Quailty and CCPC 排序/签到
    hdu多校第八场 1003 (hdu6659) Acesrc and Good Numbers 数论/打表
    hdu多校第八场 1009 (hdu6665) Calabash and Landlord 计算几何/dfs
  • 原文地址:https://www.cnblogs.com/xiaohei-chen/p/11915015.html
Copyright © 2011-2022 走看看