zoukankan      html  css  js  c++  java
  • Python中*args和**kargs如何使用

    对于初学者来说,看到*args和**kargs就头大,到底它们有何用处,怎么使用?本文将和大家一起来扒一扒,希望对大家学习python有所帮助。

    1.*args 实质就是将函数传入的参数,存储在元组类型的变量args当中

    def fun_var_args(farg, *args):
    
        print "farg:", farg
    
        for value in args:
    
            print "other arg:", value
    
    fun_var_args(1, "two")
    

    运行:

    farg: 1
    other arg: two

    def fun_var_args(farg, *args):
    
        print "farg:", farg
    
        for value in args:
    
            print "other arg:", value
    
    fun_var_args(1, "two",3,4,5)
    

    运行:

    farg: 1
    other arg: two
    other arg: 3
    other arg: 4
    other arg: 5

    2.第二种场景:

    def fun_input_list(var1,var2,var3):
        print var1,var2,var3
    
    var_list=["second",3]
    fun_input_list(1,*var_list)
    

    运行:

    1 second 3

    def fun_input_list(var1,var2,var3):
        print var1,var2,var3
    
    var_list=["second",3,4,5]
    fun_input_list(1,*var_list)
    

    运行:(注意:运行有错误,故意的)  

    fun_input_list(1,*var_list)
    TypeError: fun_input_list() takes exactly 3 arguments (5 given)

    threading中使用*args

    1.两个传参

    # encoding: utf-8
    from time import ctime,sleep
    import threading
    
    # 定义自己类的功能
    class MyThread(threading.Thread):
        def __init__(self, func, args):
            threading.Thread.__init__(self)
            self.func = func
            self.args = args
        # 调用start自动执行的函数
        def run(self):
            self.func(*self.args)
    def player(song_file,time):
        for i in range(2):
            print("start player %s . %s"%(song_file,ctime()) )
        sleep(time)
    
    threads = []
    
    t = MyThread(player,('You and me .mp3',7))
    
    threads.append(t)
    t.start()
    t.join()
    

    运行:

    start player You and me .mp3 . Wed Jul 18 23:40:30 2018
    start player You and me .mp3 . Wed Jul 18 23:40:30 2018

    1.一个传参,注意args的传值('You and me .mp3',),这里是元祖类型。

    # encoding: utf-8
    from time import ctime,sleep
    import threading
    
    # 定义自己类的功能
    class MyThread(threading.Thread):
        def __init__(self, func, args):
            threading.Thread.__init__(self)
            self.func = func
            self.args = args
        # 调用start自动执行的函数
        def run(self):
            self.func(*self.args)
    def player(song_file):
        for i in range(2):
            print("start player %s ."%(song_file) )
    
    threads = []
    t = MyThread(player,('You and me .mp3',))
    threads.append(t)
    t.start()
    t.join()
    

    运行:

    start player You and me .mp3 .
    start player You and me .mp3 .

    一个或者多个传参

    # encoding: utf-8
    from time import ctime,sleep
    import threading
    
    # 定义自己类的功能
    class MyThread1(threading.Thread):
    
        def __init__(self, func, args):
            threading.Thread.__init__(self)
            self.func = func
            self.args = args
    
        def run(self):
            self.func(*self.args)
    
    class MyThread2(threading.Thread):
    
        def __init__(self, func):
            threading.Thread.__init__(self)
            self.func = func
    
        def run(self):
            self.func()
    
    def player1():
        for i in range(2):
            print"start player."
    
    def player2(song_file):
        for i in range(2):
            print("start player %s ."%(song_file) )
    
    args = 'You and me .mp3'
    threads = []
    t1 = MyThread2(player1)
    threads.append(t1)
    t2 = MyThread1(player2,(args,))
    threads.append(t2)
    print threads
    for t in threads:
        t.setDaemon(True)
        t.start()
    for t in threads:
        t.join()
    

    运行:

    [<MyThread2(Thread-1, initial)>, <MyThread1(Thread-2, initial)>]
    start player.
    start player.
    start player You and me .mp3 .
    start player You and me .mp3 .

    3.**kargs 实质就是将函数的参数和值,存储在字典类型的kargs变量中

    def fun_var_kargs(farg,**kargs):
        print "firsr value %s"% farg
        for key in kargs.keys():
            print key,
            print kargs[key],
    
    fun_var_kargs(1,var1="second",var2=35,var3="third")
    

    运行:注意字典是二分法读取的,所以先var1="second",然后var3="third",最后var2=35

    firsr value 1
    var1 second var3 third var2 35

    注:print key + ":" + kargs[key],这个为什么不能用

    def fun_var_kargs(farg,**kargs):
        print "firsr value %s"% farg
        for key in kargs.keys():
            print key + ":" + kargs[key],
    
    fun_var_kargs(1,var1="second",var2=35,var3="third")
    

    运行:

    print key + ":" + kargs[key],
    TypeError: cannot concatenate 'str' and 'int' objects
    firsr value 1
    var1:second var3:third

    4.**kargs的第二种使用场景

    def fun_input_dic(var1,var2,var3):
        print var1,var2,var3
    
    dic_input={"var2":2,"var3":"third"}
    fun_input_dic(1,**dic_input)
    

    运行:

    1 2 third

    注意*dic_input的运行结果,那就跟*dic_input用法一样了。

    def fun_input_dic(var1,var2,var3):
        print var1,var2,var3
    
    dic_input={"var2":2,"var3":"third"}
    fun_input_dic(1,*dic_input)
    

    运行:

    1 var3 var2

  • 相关阅读:
    centos6.5 安装redis自动启动
    正则去除字符串中的特殊字符
    数据库存储去重
    pymysql.err.ProgrammingError: (1064)(字符串转译问题)
    [转] Linux下SVN的三种备份方式
    ASP.NET ASHX中访问Session
    ionic 里使用 iframe 可能遇到的问题
    ionic $http 无法正常访问外部web服务器的问题
    Mac下80端口相关
    IIS7 无法写入配置文件web.config 错误
  • 原文地址:https://www.cnblogs.com/anita-harbour/p/9333586.html
Copyright © 2011-2022 走看看