Python初学者笔记(五):白话讲*arg和**kwarg,你看不懂算我笨!

1 篇文章 0 订阅
1 篇文章 0 订阅

Python初学者看资料自学时,最容易遇到的四个问题:

1、术语太多:术语多是专业性的体现,但不用给初学者讲解的时候也用那么多术语吧?很多东西用生活化的例子就能讲清楚。
2、Python版本不同:任何语言都在进化,比如中文,但是也不能用文言文给儿童讲故事吧?初学者还是使用最新版本语言沟通吧。本文程序都是基于Python3.6编译通过的,同时提醒大家,看资料要先对照Python版本号。
3、资料片面:只讲是什么,不讲为什么和用在哪儿,比如很多资料讲“建立字典”,建立完就完了,具体怎么用啊?
4、缺少短小易懂的案例:很多给初学者提供的程序代码动不动就几十行,初学者怎么能看懂呢?

掌握更多的功能是为了更复杂的编程,但是也要从简单的事做起才行。

比如现在我有一个最简单的加法(Jiafa)函数:

def Jiafa(x, y):
    z = x + y
    return z
print(Jiafa(1,2))
这个很简单,一看就知道输出等于3。
那下一个问题是,如果我要算不固定个数的数字相加,那怎么来计算呢?
这时,就使用*args和**kwarg,就可以帮助我们解决这种问题。

*args:可以理解为只有一列的表格,长度不固定。

**kwargs:可以理解为字典,长度也不固定。

首先,*args和**kwarg不是必须成对出现,也不是必须叫这个名字,也可以叫*x和**y。写成这样,只是一种约定俗成,比如给别人讲故事:从前有个张三和李四……大家一听就知道你要说什么了,而不能说从前有个马七狗八,大家虽然也能听懂,但总是不太好理解。

先说*args的作用,还是开篇的案例,我们要算不定长的加法,就可以用*args来定义了,当然也可以叫*x,*y。

def Jiafa(*args):
    sum = 0
    for i in args:
        sum = sum + i
    print(sum)

Jiafa(1, 3, 5)
Jiafa(2, 4, 6, 8, )
输出结果,9和20。这个案例很简单,用*args定义就可以引入,相当于定义了 不定长度的函数,然后在程序中就可以多次使用。

**kwargs的字典呢?先看一下普通的字典,用一对大括号{}就可以创建字典,比如下面3行程序,就可以编一个字典的程序:

dict = {"system": "系统", "China": "中国", "link": "联接"}

x = input("请输入一个英文单词:")
print(dict.get(x, "本字典里没找到!"))
如果输入正确,会得到答案,否则会显示没找到。

在这个程序里,dict = {"system": "系统", "China": "中国", "link": "联接"}创建了三对“键和值”(key和value),比如“system”是key,“系统”是key对应的值,也叫键值。

还可以写一个测试单词的小软件。

dict = {"system": "系统", "China": "中国", "link": "联接"}

# 通过Key找value的语句:
y = input("请输入China的中文意思:")
if dict['China'] == y:
    print("恭喜你,答对了!")

# 通过value找Key的语句:
z = input("请输入“系统”的英文单词:")
if list(dict.keys())[list(dict.values()).index("系统")] == z:
    print("恭喜你,答对了!")
现在问题来了,如果开始不知道字典里都有哪些内容,需要在程序运程中才知道怎么办?这个时候就可以用**kwargs来定义了。我们先用**kwargs来定义一个函数,函数内容先都不用写,再看看下面的小程序:

def dict(**kwargs):
    return kwargs

mydict = dict(system="系统", China="中国", link="联接")
x = input("请输入单词:")
if x in mydict.keys():
    print("中文意思:", mydict[x])
else:
    print("抱歉,没找到。")
用字典也可以达成这样的功能,使用in……keys(),就是判断这个key是不是存在,如果存在就返回它的值。
同样,用**kwargs传递数据的案例,可以设计一个用户登录的程序:

def dict(**kwargs):
    return kwargs

userdict = dict(user1="1234", user2="5678")

x = input("请输入用户名:")
if x in userdict.keys():
    y = input("请输入密码:")
    if userdict[x] == y:
        print("完全正确")
    else:
        print("密码错误!")
else:
    print("用户不存在!")
以上的功能,都是最精减的代码能表达出*args和**kwarg的功能的。

希望大家学会初步的功能,继续进阶,加油!

同时,也向看到本文的高手们请教一个问题,为什么直接定义字典,不能用dict = {system= "系统", China= "中国", link= "联接"},非要用dict = {"system": "系统", "China": "中国", "link": "联接"}呢?有什么区别呢?


  • 19
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值