• 基础函数(2)


    函数的动态参数

      1,*args  位置参数动态传参

      在参数位置编写*表示接收任意内容      接收到的是元组tuple

    def chi (*food):
        print("我要吃",food)
    chi("大米饭","烤肉","鸡腿","牛排")
    
    结果:
    我要吃('大米饭','烤肉','鸡腿','牛排')         #多个参数传递进去,接收的是元组

      动态参数必须在位置参数后面,否则会报错

    def chi (*food,a,b):
        print("我要吃",food,a,b)
    chi("大米饭","红烧肉","黄瓜","茄子")
    
    #这个时候程序会报错,前面传递进去的所有参数都会被*food接收,a和b永远接收不到参数
    
    
    所以必须改写成下面的代码:
    
    def chi (a,b,*food):
        print("我要吃",a,b,food)
    chi("黄瓜","茄子","大米饭","红烧肉")     #前面两个用位置参数接收,后面的参数用动态参数接收

      2,**kwargs  关键字参数动态传参     接收到的是一个字典dict

      如果想接受所有的参数:

    def func(*args,**kwargs):
        print(args,kwargs)
    
    func("香烟","瓜子","矿泉水",a="香肠",b="啤酒")      #可以接收所有参数,

      ♦ 参数顺序:  位置参数=>*args(动态参数)=>默认值=>**kwargs(关键字动态参数)

    动态参数的另一种传参方式:

      

    def funs(*args):
        print(args)
    lst = [1,4,7]
    fun(lst[0],lst[1],lst[2])
    fun(*lst)           #可以使用*把一个列表按顺序打散
    s = "臣妾做不到啊"
    fun(*s)             #字符串也可以打散, (可迭代对象)
    
    
    #在实参的位置上给一个序列,列表,可迭代对象前面加*,表示把这个按顺序打散
    #在形参的位置上*,表示把接收到的参数组合成一个元组
    #字典也可以打散,需要用两个**   (例如: **kwargs)

    函数的注释:

    def chi(food,drink):
        """
        这里是函数的注释,先写一下当前这个函数是干什么的
        :param food:  参数food 是什么意思
        :param drink: 参数drink是什么意思
        :return:  返回是什么东西
        """
        print(food,drink)
        return"very good"

    二:命名空间

      1:内置名称空间

      2:全局名称空间

      3:局部名称空间

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

      全局作用域:包含全局命名空间和内置命名空间.在整个文件的任何位置都可以使用

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

    作用域命名空间:

      1:全局作用域: 全局命名空间+内置命名空间

      2:局部作用域: 局部命名空间

      globals:查看全局作用域内容

      locals:查看局部作用域中的变量和函数信息

    a = 10
    def func():
        a = 40
        b = 20
            def abc():
                print("哈哈")
        print(a,b)        #这里使用的是局部作用域    
        print(globals)   #打印全局作用域的内容
        print(locals)    #打印局部作用域的内容
    func()

    三;函数的嵌套

    1:只要遇见了()就是函数的调用,没有()就不是函数的调用

    2;函数的执行顺序

    def outer():
         print("哈哈")
         def inner_1():
             print("呵呵")
             def inner_1_1():
                 print("嘻嘻")
             inner_1_1()
             print("吼吼")
         def inner_2():
             print("嘿嘿")
         inner_2()
         inner_1()
     outer()
    
    #输出结果:哈哈=>嘿嘿=>呵呵=>嘻嘻=>吼吼

    四;关键字global和nonlocal

      global表示:不在使用局部作用域中的内容了,而改用全局作用域中的变量

      nonlocal表示:在局部作用中,调用父级命名空间中的变量(外层函数中离它最近的变量)

  • 相关阅读:
    [N1CTF 2018]eating_cms 敏感文件扫描+php伪协议利用
    文件包含漏洞(总结)+常见的getshell+PHP伪协议
    laravel安装jwt-auth及验证(实例)
    理解 PHP 8 的 JIT
    Laravel 文件缓存也可以快得飞起,tmpfs 了解一下
    关于 Laravel ORM 对 Model::find 方法进行缓存
    在 Laravel 7 中优雅使用 UUID 教程
    PestPHP 正式开源,一个优雅的测试框架
    PHP 8 还有半年就要来了, 来看看有哪些新特性
    Redis持久化过程的监控及优化
  • 原文地址:https://www.cnblogs.com/wangjun187197/p/9450249.html
Copyright © 2020-2023  润新知