• 01-python基础知识


    1.这两个参数是什么意思:*args,**kwargs?我们为什么要使用它们?

    答案

    如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用args;如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。args和kwargs这两个标识符是约定俗成的用法,你当然还可以用bob和**billy,但是这样就并不太妥。

    下面是具体的示例:

    def f(*args,**kwargs): print args, kwargs
    
    l = [1,2,3]
    t = (4,5,6)
    d = {'a':7,'b':8,'c':9}
    
    f()
    f(1,2,3)                    # (1, 2, 3) {}
    f(1,2,3,"groovy")           # (1, 2, 3, 'groovy') {}
    f(a=1,b=2,c=3)              # () {'a': 1, 'c': 3, 'b': 2}
    f(a=1,b=2,c=3,zzz="hi")     # () {'a': 1, 'c': 3, 'b': 2, 'zzz': 'hi'}
    f(1,2,3,a=1,b=2,c=3)        # (1, 2, 3) {'a': 1, 'c': 3, 'b': 2}
    
    f(*l,**d)                   # (1, 2, 3) {'a': 7, 'c': 9, 'b': 8}
    f(*t,**d)                   # (4, 5, 6) {'a': 7, 'c': 9, 'b': 8}
    f(1,2,*t)                   # (1, 2, 4, 5, 6) {}
    f(q="winning",**d)          # () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
    f(1,2,*t,q="winning",**d)   # (1, 2, 4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
    
    def f2(arg1,arg2,*args,**kwargs): print arg1,arg2, args, kwargs
    
    f2(1,2,3)                       # 1 2 (3,) {}
    f2(1,2,3,"groovy")              # 1 2 (3, 'groovy') {}
    f2(arg1=1,arg2=2,c=3)           # 1 2 () {'c': 3}
    f2(arg1=1,arg2=2,c=3,zzz="hi")  # 1 2 () {'c': 3, 'zzz': 'hi'}
    f2(1,2,3,a=1,b=2,c=3)           # 1 2 (3,) {'a': 1, 'c': 3, 'b': 2}
    
    f2(*l,**d)                   # 1 2 (3,) {'a': 7, 'c': 9, 'b': 8}
    f2(*t,**d)                   # 4 5 (6,) {'a': 7, 'c': 9, 'b': 8}
    f2(1,2,*t)                   # 1 2 (4, 5, 6) {}
    f2(1,1,q="winning",**d)      # 1 1 () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
    f2(1,2,*t,q="winning",**d)   # 1 2 (4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
    

    2.下面这些是什么意思:@classmethod, @staticmethod, @property?

    回答背景知识

    这些都是装饰器(decorator)。装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类。@标记是语法糖(syntactic sugar),可以让你以简单易读得方式装饰目标对象。

    @my_decorator
    def my_func(stuff):
    do_things
    Is equivalent to

    def my_func(stuff):
    do_things

    my_func = my_decorator(my_func)

    如果有一天我们淹没在茫茫人海中庸碌一生,那一定是我们没有努力活得丰盛
  • 相关阅读:
    6.简单总结一下类与对象
    5.创建对象内存分析
    4.构造器详解
    3.类和对象的关系
    业余草推荐18个Java开源免费的CMS系统
    业余草教你解读Spark源码阅读之HistoryServer
    业余草公众号运营攻略:教你一天涨粉200以上
    从菜鸟到大牛的码农升职必学文章推荐
    倒排索引的AND操作
    程序员,如何在工作之外,增加自己的收入
  • 原文地址:https://www.cnblogs.com/yeran/p/10480208.html
Copyright © 2020-2023  润新知